**, and notice that the paragraph line is indented automatically.
-
-```
-
-
Vim plugins are awesome !
-
-```
-
-Vim Surround has many other options. Give it a try—and consult [GitHub][7] for additional information.
-
-### 4\. Vim Gitgutter
-
-The [Vim Gitgutter][8] plugin is useful for anyone using Git for version control. It shows the output of **Git diff** as symbols in the "gutter"—the sign column where Vim presents additional information, such as line numbers. For example, consider the following as the committed version in Git:
-
-```
- 1 package main
- 2
- 3 import "fmt"
- 4
- 5 func main() {
- 6 x := true
- 7 items := []string{"tv", "pc", "tablet"}
- 8
- 9 if x {
- 10 for _, i := range items {
- 11 fmt.Println(i)
- 12 }
- 13 }
- 14 }
-```
-
-After making some changes, Vim Gitgutter displays the following symbols in the gutter:
-
-```
- 1 package main
- 2
- 3 import "fmt"
- 4
-_ 5 func main() {
- 6 items := []string{"tv", "pc", "tablet"}
- 7
-~ 8 if len(items) > 0 {
- 9 for _, i := range items {
- 10 fmt.Println(i)
-+ 11 fmt.Println("------")
- 12 }
- 13 }
- 14 }
-```
-
-The **-** symbol shows that a line was deleted between lines 5 and 6. The **~** symbol shows that line 8 was modified, and the symbol **+** shows that line 11 was added.
-
-In addition, Vim Gitgutter allows you to navigate between "hunks"—individual changes made in the file—with **[c** and **]c** , or even stage individual hunks for commit by pressing **Leader+hs**.
-
-This plugin gives you immediate visual feedback of changes, and it's a great addition to your toolbox if you use Git.
-
-### 5\. VIM Fugitive
-
-[Vim Fugitive][9] is another great plugin for anyone incorporating Git into the Vim workflow. It's a Git wrapper that allows you to execute Git commands directly from Vim and integrates with Vim's interface. This plugin has many features—check its [GitHub][10] page for more information.
-
-Here's a basic Git workflow example using Vim Fugitive. Considering the changes we've made to the Go code block on section 4, you can use **git blame** by typing the command **:Gblame** :
-
-```
-e9949066 (Ricardo Gerardi 2018-12-05 18:17:19 -0500)│ 1 package main
-e9949066 (Ricardo Gerardi 2018-12-05 18:17:19 -0500)│ 2
-e9949066 (Ricardo Gerardi 2018-12-05 18:17:19 -0500)│ 3 import "fmt"
-e9949066 (Ricardo Gerardi 2018-12-05 18:17:19 -0500)│ 4
-e9949066 (Ricardo Gerardi 2018-12-05 18:17:19 -0500)│_ 5 func main() {
-e9949066 (Ricardo Gerardi 2018-12-05 18:17:19 -0500)│ 6 items := []string{"tv", "pc", "tablet"}
-e9949066 (Ricardo Gerardi 2018-12-05 18:17:19 -0500)│ 7
-00000000 (Not Committed Yet 2018-12-05 18:55:00 -0500)│~ 8 if len(items) > 0 {
-e9949066 (Ricardo Gerardi 2018-12-05 18:17:19 -0500)│ 9 for _, i := range items {
-e9949066 (Ricardo Gerardi 2018-12-05 18:17:19 -0500)│ 10 fmt.Println(i)
-00000000 (Not Committed Yet 2018-12-05 18:55:00 -0500)│+ 11 fmt.Println("------")
-e9949066 (Ricardo Gerardi 2018-12-05 18:17:19 -0500)│ 12 }
-e9949066 (Ricardo Gerardi 2018-12-05 18:17:19 -0500)│ 13 }
-e9949066 (Ricardo Gerardi 2018-12-05 18:17:19 -0500)│ 14 }
-```
-
-You can see that lines 8 and 11 have not been committed. Check the repository status by typing **:Gstatus** :
-
-```
- 1 # On branch master
- 2 # Your branch is up to date with 'origin/master'.
- 3 #
- 4 # Changes not staged for commit:
- 5 # (use "git add
..." to update what will be committed)
- 6 # (use "git checkout -- ..." to discard changes in working directory)
- 7 #
- 8 # modified: vim-5plugins/examples/test1.go
- 9 #
- 10 no changes added to commit (use "git add" and/or "git commit -a")
---------------------------------------------------------------------------------------------------------
- 1 package main
- 2
- 3 import "fmt"
- 4
-_ 5 func main() {
- 6 items := []string{"tv", "pc", "tablet"}
- 7
-~ 8 if len(items) > 0 {
- 9 for _, i := range items {
- 10 fmt.Println(i)
-+ 11 fmt.Println("------")
- 12 }
- 13 }
- 14 }
-```
-
-Vim Fugitive opens a split window with the result of **git status**. You can stage a file for commit by pressing the **-** key on the line with the name of the file. You can reset the status by pressing **-** again. The message updates to reflect the new status:
-
-```
- 1 # On branch master
- 2 # Your branch is up to date with 'origin/master'.
- 3 #
- 4 # Changes to be committed:
- 5 # (use "git reset HEAD ..." to unstage)
- 6 #
- 7 # modified: vim-5plugins/examples/test1.go
- 8 #
---------------------------------------------------------------------------------------------------------
- 1 package main
- 2
- 3 import "fmt"
- 4
-_ 5 func main() {
- 6 items := []string{"tv", "pc", "tablet"}
- 7
-~ 8 if len(items) > 0 {
- 9 for _, i := range items {
- 10 fmt.Println(i)
-+ 11 fmt.Println("------")
- 12 }
- 13 }
- 14 }
-```
-
-Now you can use the command **:Gcommit** to commit the changes. Vim Fugitive opens another split that allows you to enter a commit message:
-
-```
- 1 vim-5plugins: Updated test1.go example file
- 2 # Please enter the commit message for your changes. Lines starting
- 3 # with '#' will be ignored, and an empty message aborts the commit.
- 4 #
- 5 # On branch master
- 6 # Your branch is up to date with 'origin/master'.
- 7 #
- 8 # Changes to be committed:
- 9 # modified: vim-5plugins/examples/test1.go
- 10 #
-```
-
-Save the file with **:wq** to complete the commit:
-
-```
-[master c3bf80f] vim-5plugins: Updated test1.go example file
- 1 file changed, 2 insertions(+), 2 deletions(-)
-Press ENTER or type command to continue
-```
-
-You can use **:Gstatus** again to see the result and **:Gpush** to update the remote repository with the new commit.
-
-```
- 1 # On branch master
- 2 # Your branch is ahead of 'origin/master' by 1 commit.
- 3 # (use "git push" to publish your local commits)
- 4 #
- 5 nothing to commit, working tree clean
-```
-
-If you like Vim Fugitive and want to learn more, the GitHub repository has links to screencasts showing additional functionality and workflows. Check it out!
-
-### What's next?
-
-These Vim plugins help developers write code in any programming language. There are two other categories of plugins to help developers: code-completion plugins and syntax-checker plugins. They are usually related to specific programming languages, so I will cover them in a follow-up article.
-
-Do you have another Vim plugin you use when writing code? Please share it in the comments below.
-
---------------------------------------------------------------------------------
-
-via: https://opensource.com/article/19/1/vim-plugins-developers
-
-作者:[Ricardo Gerardi][a]
-选题:[lujun9972][b]
-译者:[pityonline](https://github.com/pityonline)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]: https://opensource.com/users/rgerardi
-[b]: https://github.com/lujun9972
-[1]: https://www.vim.org/
-[2]: https://www.vim.org/scripts/script.php?script_id=3599
-[3]: https://github.com/jiangmiao/auto-pairs
-[4]: https://github.com/scrooloose/nerdcommenter
-[5]: http://vim.wikia.com/wiki/Filetype.vim
-[6]: https://www.vim.org/scripts/script.php?script_id=1697
-[7]: https://github.com/tpope/vim-surround
-[8]: https://github.com/airblade/vim-gitgutter
-[9]: https://www.vim.org/scripts/script.php?script_id=2975
-[10]: https://github.com/tpope/vim-fugitive
diff --git a/sources/tech/20190115 Linux Desktop Setup - HookRace Blog.md b/sources/tech/20190115 Linux Desktop Setup - HookRace Blog.md
new file mode 100644
index 0000000000..29d5f63d2a
--- /dev/null
+++ b/sources/tech/20190115 Linux Desktop Setup - HookRace Blog.md
@@ -0,0 +1,514 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Linux Desktop Setup · HookRace Blog)
+[#]: via: (https://hookrace.net/blog/linux-desktop-setup/)
+[#]: author: (Dennis Felsing http://felsin9.de/nnis/)
+
+Linux Desktop Setup
+======
+
+
+My software setup has been surprisingly constant over the last decade, after a few years of experimentation since I initially switched to Linux in 2006. It might be interesting to look back in another 10 years and see what changed. A quick overview of what’s running as I’m writing this post:
+
+[![htop overview][1]][2]
+
+### Motivation
+
+My software priorities are, in no specific order:
+
+ * Programs should run on my local system so that I’m in control of them, this excludes cloud solutions.
+ * Programs should run in the terminal, so that they can be used consistently from anywhere, including weak computers or a phone.
+ * Keyboard focused is nearly automatic by using terminal software. I prefer to use the mouse where it makes sense only, reaching for the mouse all the time during typing feels like a waste of time. Occasionally it took me an hour to notice that the mouse wasn’t even plugged in.
+ * Ideally use fast and efficient software, I don’t like hearing the fan and feeling the room heat up. I can also keep running older hardware for much longer, my 10 year old Thinkpad x200s is still fine for all the software I use.
+ * Be composable. I don’t want to do every step manually, instead automate more when it makes sense. This naturally favors the shell.
+
+
+
+### Operating Systems
+
+I had a hard start with Linux 12 years ago by removing Windows, armed with just the [Gentoo Linux][3] installation CD and a printed manual to get a functioning Linux system. It took me a few days of compiling and tinkering, but in the end I felt like I had learnt a lot.
+
+I haven’t looked back to Windows since then, but I switched to [Arch Linux][4] on my laptop after having the fan fail from the constant compilation stress. Later I also switched all my other computers and private servers to Arch Linux. As a rolling release distribution you get package upgrades all the time, but the most important breakages are nicely reported in the [Arch Linux News][5].
+
+One annoyance though is that Arch Linux removes the old kernel modules once you upgrade it. I usually notice that once I try plugging in a USB flash drive and the kernel fails to load the relevant module. Instead you’re supposed to reboot after each kernel upgrade. There are a few [hacks][6] around to get around the problem, but I haven’t been bothered enough to actually use them.
+
+Similar problems happen with other programs, commonly Firefox, cron or Samba requiring a restart after an upgrade, but annoyingly not warning you that that’s the case. [SUSE][7], which I use at work, nicely warns about such cases.
+
+For the [DDNet][8] production servers I prefer [Debian][9] over Arch Linux, so that I have a lower chance of breakage on each upgrade. For my firewall and router I used [OpenBSD][10] for its clean system, documentation and great [pf firewall][11], but right now I don’t have a need for a separate router anymore.
+
+### Window Manager
+
+Since I started out with Gentoo I quickly noticed the huge compile time of KDE, which made it a no-go for me. I looked around for more minimal solutions, and used [Openbox][12] and [Fluxbox][13] initially. At some point I jumped on the tiling window manager train in order to be more keyboard-focused and picked up [dwm][14] and [awesome][15] close to their initial releases.
+
+In the end I settled on [xmonad][16] thanks to its flexibility, extendability and being written and configured in pure [Haskell][17], a great functional programming language. One example of this is that at home I run a single 40” 4K screen, but often split it up into four virtual screens, each displaying a workspace on which my windows are automatically arranged. Of course xmonad has a [module][18] for that.
+
+[dzen][19] and [conky][20] function as a simple enough status bar for me. My entire conky config looks like this:
+
+```
+out_to_console yes
+update_interval 1
+total_run_times 0
+
+TEXT
+${downspeed eth0} ${upspeed eth0} | $cpu% ${loadavg 1} ${loadavg 2} ${loadavg 3} $mem/$memmax | ${time %F %T}
+```
+
+And gets piped straight into dzen2 with `conky | dzen2 -fn '-xos4-terminus-medium-r-normal-*-12-*-*-*-*-*-*-*' -bg '#000000' -fg '#ffffff' -p -e '' -x 1000 -w 920 -xs 1 -ta r`.
+
+One important feature for me is to make the terminal emit a beep sound once a job is done. This is done simply by adding a `\a` character to the `PR_TITLEBAR` variable in zsh, which is shown whenever a job is done. Of course I disable the actual beep sound by blacklisting the `pcspkr` kernel module with `echo "blacklist pcspkr" > /etc/modprobe.d/nobeep.conf`. Instead the sound gets turned into an urgency by urxvt’s `URxvt.urgentOnBell: true` setting. Then xmonad has an urgency hook to capture this and I can automatically focus the currently urgent window with a key combination. In dzen I get the urgent windowspaces displayed with a nice and bright `#ff0000`.
+
+The final result in all its glory on my Laptop:
+
+[![Laptop screenshot][21]][22]
+
+I hear that [i3][23] has become quite popular in the last years, but it requires more manual window alignment instead of specifying automated methods to do it.
+
+I realize that there are also terminal multiplexers like [tmux][24], but I still require a few graphical applications, so in the end I never used them productively.
+
+### Terminal Persistency
+
+In order to keep terminals alive I use [dtach][25], which is just the detach feature of screen. In order to make every terminal on my computer detachable I wrote a [small wrapper script][26]. This means that even if I had to restart my X server I could keep all my terminals running just fine, both local and remote.
+
+### Shell & Programming
+
+Instead of [bash][27] I use [zsh][28] as my shell for its huge number of features.
+
+As a terminal emulator I found [urxvt][29] to be simple enough, support Unicode and 256 colors and has great performance. Another great feature is being able to run the urxvt client and daemon separately, so that even a large number of terminals barely takes up any memory (except for the scrollback buffer).
+
+There is only one font that looks absolutely clean and perfect to me: [Terminus][30]. Since i’s a bitmap font everything is pixel perfect and renders extremely fast and at low CPU usage. In order to switch fonts on-demand in each terminal with `CTRL-WIN-[1-7]` my ~/.Xdefaults contains:
+
+```
+URxvt.font: -xos4-terminus-medium-r-normal-*-14-*-*-*-*-*-*-*
+dzen2.font: -xos4-terminus-medium-r-normal-*-14-*-*-*-*-*-*-*
+
+URxvt.keysym.C-M-1: command:\033]50;-xos4-terminus-medium-r-normal-*-12-*-*-*-*-*-*-*\007
+URxvt.keysym.C-M-2: command:\033]50;-xos4-terminus-medium-r-normal-*-14-*-*-*-*-*-*-*\007
+URxvt.keysym.C-M-3: command:\033]50;-xos4-terminus-medium-r-normal-*-18-*-*-*-*-*-*-*\007
+URxvt.keysym.C-M-4: command:\033]50;-xos4-terminus-medium-r-normal-*-22-*-*-*-*-*-*-*\007
+URxvt.keysym.C-M-5: command:\033]50;-xos4-terminus-medium-r-normal-*-24-*-*-*-*-*-*-*\007
+URxvt.keysym.C-M-6: command:\033]50;-xos4-terminus-medium-r-normal-*-28-*-*-*-*-*-*-*\007
+URxvt.keysym.C-M-7: command:\033]50;-xos4-terminus-medium-r-normal-*-32-*-*-*-*-*-*-*\007
+
+URxvt.keysym.C-M-n: command:\033]10;#ffffff\007\033]11;#000000\007\033]12;#ffffff\007\033]706;#00ffff\007\033]707;#ffff00\007
+URxvt.keysym.C-M-b: command:\033]10;#000000\007\033]11;#ffffff\007\033]12;#000000\007\033]706;#0000ff\007\033]707;#ff0000\007
+```
+
+For programming and writing I use [Vim][31] with syntax highlighting and [ctags][32] for indexing, as well as a few terminal windows with grep, sed and the other usual suspects for search and manipulation. This is probably not at the same level of comfort as an IDE, but allows me more automation.
+
+One problem with Vim is that you get so used to its key mappings that you’ll want to use them everywhere.
+
+[Python][33] and [Nim][34] do well as scripting languages where the shell is not powerful enough.
+
+### System Monitoring
+
+[htop][35] (look at the background of that site, it’s a live view of the server that’s hosting it) works great for getting a quick overview of what the software is currently doing. [lm_sensors][36] allows monitoring the hardware temperatures, fans and voltages. [powertop][37] is a great little tool by Intel to find power savings. [ncdu][38] lets you analyze disk usage interactively.
+
+[nmap][39], iptraf-ng, [tcpdump][40] and [Wireshark][41] are essential tools for analyzing network problems.
+
+There are of course many more great tools.
+
+### Mails & Synchronization
+
+On my home server I have a [fetchmail][42] daemon running for each email acccount that I have. Fetchmail just retrieves the incoming emails and invokes [procmail][43]:
+
+```
+#!/bin/sh
+for i in /home/deen/.fetchmail/*; do
+ FETCHMAILHOME=$i /usr/bin/fetchmail -m 'procmail -d %T' -d 60
+done
+```
+
+The configuration is as simple as it could be and waits for the server to inform us of fresh emails:
+
+```
+poll imap.1und1.de protocol imap timeout 120 user "dennis@felsin9.de" password "XXX" folders INBOX keep ssl idle
+```
+
+My `.procmailrc` config contains a few rules to backup all mails and sort them into the correct directories, for example based on the mailing list id or from field in the mail header:
+
+```
+MAILDIR=/home/deen/shared/Maildir
+LOGFILE=$HOME/.procmaillog
+LOGABSTRACT=no
+VERBOSE=off
+FORMAIL=/usr/bin/formail
+NL="
+"
+
+:0wc
+* ! ? test -d /media/mailarchive/`date +%Y`
+| mkdir -p /media/mailarchive/`date +%Y`
+
+# Make backups of all mail received in format YYYY/YYYY-MM
+:0c
+/media/mailarchive/`date +%Y`/`date +%Y-%m`
+
+:0
+* ^From: .*(.*@.*.kit.edu|.*@.*.uka.de|.*@.*.uni-karlsruhe.de)
+$MAILDIR/.uni/
+
+:0
+* ^list-Id:.*lists.kit.edu
+$MAILDIR/.uni-ml/
+
+[...]
+```
+
+To send emails I use [msmtp][44], which is also great to configure:
+
+```
+account default
+host smtp.1und1.de
+tls on
+tls_trust_file /etc/ssl/certs/ca-certificates.crt
+auth on
+from dennis@felsin9.de
+user dennis@felsin9.de
+password XXX
+
+[...]
+```
+
+But so far the emails are still on the server. My documents are all stored in a directory that I synchronize between all computers using [Unison][45]. Think of Unison as a bidirectional interactive [rsync][46]. My emails are part of this documents directory and thus they end up on my desktop computers.
+
+This also means that while the emails reach my server immediately, I only fetch them on deman instead of getting instant notifications when an email comes in.
+
+From there I read the mails with [mutt][47], using the sidebar plugin to display my mail directories. The `/etc/mailcap` file is essential to display non-plaintext mails containing HTML, Word or PDF:
+
+```
+text/html;w3m -I %{charset} -T text/html; copiousoutput
+application/msword; antiword %s; copiousoutput
+application/pdf; pdftotext -layout /dev/stdin -; copiousoutput
+```
+
+### News & Communication
+
+[Newsboat][48] is a nice little RSS/Atom feed reader in the terminal. I have it running on the server in a `tach` session with about 150 feeds. Filtering feeds locally is also possible, for example:
+
+```
+ignore-article "https://forum.ddnet.tw/feed.php" "title =~ \"Map Testing •\" or title =~ \"Old maps •\" or title =~ \"Map Bugs •\" or title =~ \"Archive •\" or title =~ \"Waiting for mapper •\" or title =~ \"Other mods •\" or title =~ \"Fixes •\""
+```
+
+I use [Irssi][49] the same way for communication via IRC.
+
+### Calendar
+
+[remind][50] is a calendar that can be used from the command line. Setting new reminders is done by editing the `rem` files:
+
+```
+# One time events
+REM 2019-01-20 +90 Flight to China %b
+
+# Recurring Holidays
+REM 1 May +90 Holiday "Tag der Arbeit" %b
+REM [trigger(easterdate(year(today()))-2)] +90 Holiday "Karfreitag" %b
+
+# Time Change
+REM Nov Sunday 1 --7 +90 Time Change (03:00 -> 02:00) %b
+REM Apr Sunday 1 --7 +90 Time Change (02:00 -> 03:00) %b
+
+# Birthdays
+FSET birthday(x) "'s " + ord(year(trigdate())-x) + " birthday is %b"
+REM 16 Apr +90 MSG Andreas[birthday(1994)]
+
+# Sun
+SET $LatDeg 49
+SET $LatMin 19
+SET $LatSec 49
+SET $LongDeg -8
+SET $LongMin -40
+SET $LongSec -24
+
+MSG Sun from [sunrise(trigdate())] to [sunset(trigdate())]
+[...]
+```
+
+Unfortunately there is no Chinese Lunar calendar function in remind yet, so Chinese holidays can’t be calculated easily.
+
+I use two aliases for remind:
+
+```
+rem -m -b1 -q -g
+```
+
+to see a list of the next events in chronological order and
+
+```
+rem -m -b1 -q -cuc12 -w$(($(tput cols)+1)) | sed -e "s/\f//g" | less
+```
+
+to show a calendar fitting just the width of my terminal:
+
+![remcal][51]
+
+### Dictionary
+
+[rdictcc][52] is a little known dictionary tool that uses the excellent dictionary files from [dict.cc][53] and turns them into a local database:
+
+```
+$ rdictcc rasch
+====================[ A => B ]====================
+rasch:
+ - apace
+ - brisk [speedy]
+ - cursory
+ - in a timely manner
+ - quick
+ - quickly
+ - rapid
+ - rapidly
+ - sharpish [Br.] [coll.]
+ - speedily
+ - speedy
+ - swift
+ - swiftly
+rasch [gehen]:
+ - smartly [quickly]
+Rasch {n} [Zittergras-Segge]:
+ - Alpine grass [Carex brizoides]
+ - quaking grass sedge [Carex brizoides]
+Rasch {m} [regional] [Putzrasch]:
+ - scouring pad
+====================[ B => A ]====================
+Rasch model:
+ - Rasch-Modell {n}
+```
+
+### Writing and Reading
+
+I have a simple todo file containing my tasks, that is basically always sitting open in a Vim session. For work I also use the todo file as a “done” file so that I can later check what tasks I finished on each day.
+
+For writing documents, letters and presentations I use [LaTeX][54] for its superior typesetting. A simple letter in German format can be set like this for example:
+
+```
+\documentclass[paper = a4, fromalign = right]{scrlttr2}
+\usepackage{german}
+\usepackage{eurosym}
+\usepackage[utf8]{inputenc}
+\setlength{\parskip}{6pt}
+\setlength{\parindent}{0pt}
+
+\setkomavar{fromname}{Dennis Felsing}
+\setkomavar{fromaddress}{Meine Str. 1\\69181 Leimen}
+\setkomavar{subject}{Titel}
+
+\setkomavar*{enclseparator}{Anlagen}
+
+\makeatletter
+\@setplength{refvpos}{89mm}
+\makeatother
+
+\begin{document}
+\begin{letter} {Herr Soundso\\Deine Str. 2\\69121 Heidelberg}
+\opening{Sehr geehrter Herr Soundso,}
+
+Sie haben bei mir seit dem Bla Bla Bla.
+
+Ich fordere Sie hiermit zu Bla Bla Bla auf.
+
+\closing{Mit freundlichen Grüßen}
+
+\end{letter}
+\end{document}
+```
+
+Further example documents and presentations can be found over at [my private site][55].
+
+To read PDFs [Zathura][56] is fast, has Vim-like controls and even supports two different PDF backends: Poppler and MuPDF. [Evince][57] on the other hand is more full-featured for the cases where I encounter documents that Zathura doesn’t like.
+
+### Graphical Editing
+
+[GIMP][58] and [Inkscape][59] are easy choices for photo editing and interactive vector graphics respectively.
+
+In some cases [Imagemagick][60] is good enough though and can be used straight from the command line and thus automated to edit images. Similarly [Graphviz][61] and [TikZ][62] can be used to draw graphs and other diagrams.
+
+### Web Browsing
+
+As a web browser I’ve always used [Firefox][63] for its extensibility and low resource usage compared to Chrome.
+
+Unfortunately the [Pentadactyl][64] extension development stopped after Firefox switched to Chrome-style extensions entirely, so I don’t have satisfying Vim-like controls in my browser anymore.
+
+### Media Players
+
+[mpv][65] with hardware decoding allows watching videos at 5% CPU load using the `vo=gpu` and `hwdec=vaapi` config settings. `audio-channels=2` in mpv seems to give me clearer downmixing to my stereo speakers / headphones than what PulseAudio does by default. A great little feature is exiting with `Shift-Q` instead of just `Q` to save the playback location. When watching with someone with another native tongue you can use `--secondary-sid=` to show two subtitles at once, the primary at the bottom, the secondary at the top of the screen
+
+My wirelss mouse can easily be made into a remote control with mpv with a small `~/.config/mpv/input.conf`:
+
+```
+MOUSE_BTN5 run "mixer" "pcm" "-2"
+MOUSE_BTN6 run "mixer" "pcm" "+2"
+MOUSE_BTN1 cycle sub-visibility
+MOUSE_BTN7 add chapter -1
+MOUSE_BTN8 add chapter 1
+```
+
+[youtube-dl][66] works great for watching videos hosted online, best quality can be achieved with `-f bestvideo+bestaudio/best --all-subs --embed-subs`.
+
+As a music player [MOC][67] hasn’t been actively developed for a while, but it’s still a simple player that plays every format conceivable, including the strangest Chiptune formats. In the AUR there is a [patch][68] adding PulseAudio support as well. Even with the CPU clocked down to 800 MHz MOC barely uses 1-2% of a single CPU core.
+
+![moc][69]
+
+My music collection sits on my home server so that I can access it from anywhere. It is mounted using [SSHFS][70] and automount in the `/etc/fstab/`:
+
+```
+root@server:/media/media /mnt/media fuse.sshfs noauto,x-systemd.automount,idmap=user,IdentityFile=/root/.ssh/id_rsa,allow_other,reconnect 0 0
+```
+
+### Cross-Platform Building
+
+Linux is great to build packages for any major operating system except Linux itself! In the beginning I used [QEMU][71] to with an old Debian, Windows and Mac OS X VM to build for these platforms.
+
+Nowadays I switched to using chroot for the old Debian distribution (for maximum Linux compatibility), [MinGW][72] to cross-compile for Windows and [OSXCross][73] to cross-compile for Mac OS X.
+
+The script used to [build DDNet][74] as well as the [instructions for updating library builds][75] are based on this.
+
+### Backups
+
+As usual, we nearly forgot about backups. Even if this is the last chapter, it should not be an afterthought.
+
+I wrote [rrb][76] (reverse rsync backup) 10 years ago to wrap rsync so that I only need to give the backup server root SSH rights to the computers that it is backing up. Surprisingly rrb needed 0 changes in the last 10 years, even though I kept using it the entire time.
+
+The backups are stored straight on the filesystem. Incremental backups are implemented using hard links (`--link-dest`). A simple [config][77] defines how long backups are kept, which defaults to:
+
+```
+KEEP_RULES=( \
+ 7 7 \ # One backup a day for the last 7 days
+ 31 8 \ # 8 more backups for the last month
+ 365 11 \ # 11 more backups for the last year
+1825 4 \ # 4 more backups for the last 5 years
+)
+```
+
+Since some of my computers don’t have a static IP / DNS entry and I still want to back them up using rrb I use a reverse SSH tunnel (as a systemd service) for them:
+
+```
+[Unit]
+Description=Reverse SSH Tunnel
+After=network.target
+
+[Service]
+ExecStart=/usr/bin/ssh -N -R 27276:localhost:22 -o "ExitOnForwardFailure yes" server
+KillMode=process
+Restart=always
+
+[Install]
+WantedBy=multi-user.target
+```
+
+Now the server can reach the client through `ssh -p 27276 localhost` while the tunnel is running to perform the backup, or in `.ssh/config` format:
+
+```
+Host cr-remote
+ HostName localhost
+ Port 27276
+```
+
+While talking about SSH hacks, sometimes a server is not easily reachable thanks to some bad routing. In that case you can route the SSH connection through another server to get better routing, in this case going through the USA to reach my Chinese server which had not been reliably reachable from Germany for a few weeks:
+
+```
+Host chn.ddnet.tw
+ ProxyCommand ssh -q usa.ddnet.tw nc -q0 chn.ddnet.tw 22
+ Port 22
+```
+
+### Final Remarks
+
+Thanks for reading my random collection of tools. I probably forgot many programs that I use so naturally every day that I don’t even think about them anymore. Let’s see how stable my software setup stays in the next years. If you have any questions, feel free to get in touch with me at [dennis@felsin9.de][78].
+
+Comments on [Hacker News][79].
+
+--------------------------------------------------------------------------------
+
+via: https://hookrace.net/blog/linux-desktop-setup/
+
+作者:[Dennis Felsing][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: http://felsin9.de/nnis/
+[b]: https://github.com/lujun9972
+[1]: https://hookrace.net/public/linux-desktop/htop_small.png
+[2]: https://hookrace.net/public/linux-desktop/htop.png
+[3]: https://gentoo.org/
+[4]: https://www.archlinux.org/
+[5]: https://www.archlinux.org/news/
+[6]: https://www.reddit.com/r/archlinux/comments/4zrsc3/keep_your_system_fully_functional_after_a_kernel/
+[7]: https://www.suse.com/
+[8]: https://ddnet.tw/
+[9]: https://www.debian.org/
+[10]: https://www.openbsd.org/
+[11]: https://www.openbsd.org/faq/pf/
+[12]: http://openbox.org/wiki/Main_Page
+[13]: http://fluxbox.org/
+[14]: https://dwm.suckless.org/
+[15]: https://awesomewm.org/
+[16]: https://xmonad.org/
+[17]: https://www.haskell.org/
+[18]: http://hackage.haskell.org/package/xmonad-contrib-0.15/docs/XMonad-Layout-LayoutScreens.html
+[19]: http://robm.github.io/dzen/
+[20]: https://github.com/brndnmtthws/conky
+[21]: https://hookrace.net/public/linux-desktop/laptop_small.png
+[22]: https://hookrace.net/public/linux-desktop/laptop.png
+[23]: https://i3wm.org/
+[24]: https://github.com/tmux/tmux/wiki
+[25]: http://dtach.sourceforge.net/
+[26]: https://github.com/def-/tach/blob/master/tach
+[27]: https://www.gnu.org/software/bash/
+[28]: http://www.zsh.org/
+[29]: http://software.schmorp.de/pkg/rxvt-unicode.html
+[30]: http://terminus-font.sourceforge.net/
+[31]: https://www.vim.org/
+[32]: http://ctags.sourceforge.net/
+[33]: https://www.python.org/
+[34]: https://nim-lang.org/
+[35]: https://hisham.hm/htop/
+[36]: http://lm-sensors.org/
+[37]: https://01.org/powertop/
+[38]: https://dev.yorhel.nl/ncdu
+[39]: https://nmap.org/
+[40]: https://www.tcpdump.org/
+[41]: https://www.wireshark.org/
+[42]: http://www.fetchmail.info/
+[43]: http://www.procmail.org/
+[44]: https://marlam.de/msmtp/
+[45]: https://www.cis.upenn.edu/~bcpierce/unison/
+[46]: https://rsync.samba.org/
+[47]: http://www.mutt.org/
+[48]: https://newsboat.org/
+[49]: https://irssi.org/
+[50]: https://www.roaringpenguin.com/products/remind
+[51]: https://hookrace.net/public/linux-desktop/remcal.png
+[52]: https://github.com/tsdh/rdictcc
+[53]: https://www.dict.cc/
+[54]: https://www.latex-project.org/
+[55]: http://felsin9.de/nnis/research/
+[56]: https://pwmt.org/projects/zathura/
+[57]: https://wiki.gnome.org/Apps/Evince
+[58]: https://www.gimp.org/
+[59]: https://inkscape.org/
+[60]: https://imagemagick.org/Usage/
+[61]: https://www.graphviz.org/
+[62]: https://sourceforge.net/projects/pgf/
+[63]: https://www.mozilla.org/en-US/firefox/new/
+[64]: https://github.com/5digits/dactyl
+[65]: https://mpv.io/
+[66]: https://rg3.github.io/youtube-dl/
+[67]: http://moc.daper.net/
+[68]: https://aur.archlinux.org/packages/moc-pulse/
+[69]: https://hookrace.net/public/linux-desktop/moc.png
+[70]: https://github.com/libfuse/sshfs
+[71]: https://www.qemu.org/
+[72]: http://www.mingw.org/
+[73]: https://github.com/tpoechtrager/osxcross
+[74]: https://github.com/ddnet/ddnet-scripts/blob/master/ddnet-release.sh
+[75]: https://github.com/ddnet/ddnet-scripts/blob/master/ddnet-lib-update.sh
+[76]: https://github.com/def-/rrb/blob/master/rrb
+[77]: https://github.com/def-/rrb/blob/master/config.example
+[78]: mailto:dennis@felsin9.de
+[79]: https://news.ycombinator.com/item?id=18979731
diff --git a/sources/tech/20190116 Best Audio Editors For Linux.md b/sources/tech/20190116 Best Audio Editors For Linux.md
new file mode 100644
index 0000000000..d588c886e2
--- /dev/null
+++ b/sources/tech/20190116 Best Audio Editors For Linux.md
@@ -0,0 +1,156 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Best Audio Editors For Linux)
+[#]: via: (https://itsfoss.com/best-audio-editors-linux)
+[#]: author: (Ankush Das https://itsfoss.com/author/ankush/)
+
+Best Audio Editors For Linux
+======
+
+You’ve got a lot of choices when it comes to audio editors for Linux. No matter whether you are a professional music producer or just learning to create awesome music, the audio editors will always come in handy.
+
+Well, for professional-grade usage, a [DAW][1] (Digital Audio Workstation) is always recommended. However, not everyone needs all the functionalities, so you should know about some of the most simple audio editors as well.
+
+In this article, we will talk about a couple of DAWs and basic audio editors which are available as **free and open source** solutions for Linux and (probably) for other operating systems.
+
+### Top Audio Editors for Linux
+
+![Best audio editors and DAW for Linux][2]
+
+We will not be focusing on all the functionalities that DAWs offer – but the basic audio editing capabilities. You may still consider this as the list of best DAW for Linux.
+
+**Installation instruction:** You will find all the mentioned audio editors or DAWs in your AppCenter or Software center. In case, you do not find them listed, please head to their official website for more information.
+
+#### 1\. Audacity
+
+![audacity audio editor][3]
+
+Audacity is one of the most basic yet a capable audio editor available for Linux. It is a free and open-source cross-platform tool. A lot of you must be already knowing about it.
+
+It has improved a lot when compared to the time when it started trending. I do recall that I utilized it to “try” making karaokes by removing the voice from an audio file. Well, you can still do it – but it depends.
+
+**Features:**
+
+It also supports plug-ins that include VST effects. Of course, you should not expect it to support VST Instruments.
+
+ * Live audio recording through a microphone or a mixer
+ * Export/Import capability supporting multiple formats and multiple files at the same time
+ * Plugin support: LADSPA, LV2, Nyquist, VST and Audio Unit effect plug-ins
+ * Easy editing with cut, paste, delete and copy functions.
+ * Spectogram view mode for analyzing frequencies
+
+
+
+#### 2\. LMMS
+
+![][4]
+
+LMMS is a free and open source (cross-platform) digital audio workstation. It includes all the basic audio editing functionalities along with a lot of advanced features.
+
+You can mix sounds, arrange them, or create them using VST instruments. It does support them. Also, it comes baked in with some samples, presets, VST Instruments, and effects to get started. In addition, you also get a spectrum analyzer for some advanced audio editing.
+
+**Features:**
+
+ * Note playback via MIDI
+ * VST Instrument support
+ * Native multi-sample support
+ * Built-in compressor, limiter, delay, reverb, distortion and bass enhancer
+
+
+
+#### 3\. Ardour
+
+![Ardour audio editor][5]
+
+Ardour is yet another free and open source digital audio workstation. If you have an audio interface, Ardour will support it. Of course, you can add unlimited multichannel tracks. The multichannel tracks can also be routed to different mixer tapes for the ease of editing and recording.
+
+You can also import a video to it and edit the audio to export the whole thing. It comes with a lot of built-in plugins and supports VST plugins as well.
+
+**Features:**
+
+ * Non-linear editing
+ * Vertical window stacking for easy navigation
+ * Strip silence, push-pull trimming, Rhythm Ferret for transient and note onset-based editing
+
+
+
+#### 4\. Cecilia
+
+![cecilia audio editor][6]
+
+Cecilia is not an ordinary audio editor application. It is meant to be used by sound designers or if you are just in the process of becoming one. It is technically an audio signal processing environment. It lets you create ear-bending sound out of them.
+
+You get in-build modules and plugins for sound effects and synthesis. It is tailored for a specific use – if that is what you were looking for – look no further!
+
+**Features:**
+
+ * Modules to achieve more (UltimateGrainer – A state-of-the-art granulation processing, RandomAccumulator – Variable speed recording accumulator,
+UpDistoRes – Distortion with upsampling and resonant lowpass filter)
+ * Automatic Saving of modulations
+
+
+
+#### 5\. Mixxx
+
+![Mixxx audio DJ ][7]
+
+If you want to mix and record something while being able to have a virtual DJ tool, [Mixxx][8] would be a perfect tool. You get to know the BPM, key, and utilize the master sync feature to match the tempo and beats of a song. Also, do not forget that it is yet another free and open source application for Linux!
+
+It supports custom DJ equipment as well. So, if you have one or a MIDI – you can record your live mixes using this tool.
+
+**Features**
+
+ * Broadcast and record DJ Mixes of your song
+ * Ability to connect your equipment and perform live
+ * Key detection and BPM detection
+
+
+
+#### 6\. Rosegarden
+
+![rosegarden audio editor][9]
+
+Rosegarden is yet another impressive audio editor for Linux which is free and open source. It is neither a fully featured DAW nor a basic audio editing tool. It is a mixture of both with some scaled down functionalities.
+
+I wouldn’t recommend this for professionals but if you have a home studio or just want to experiment, this would be one of the best audio editors for Linux to have installed.
+
+**Features:**
+
+ * Music notation editing
+ * Recording, Mixing, and samples
+
+
+
+### Wrapping Up
+
+These are some of the best audio editors you could find out there for Linux. No matter whether you need a DAW, a cut-paste editing tool, or a basic mixing/recording audio editor, the above-mentioned tools should help you out.
+
+Did we miss any of your favorite? Let us know about it in the comments below.
+
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/best-audio-editors-linux
+
+作者:[Ankush Das][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/ankush/
+[b]: https://github.com/lujun9972
+[1]: https://en.wikipedia.org/wiki/Digital_audio_workstation
+[2]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/01/linux-audio-editors-800x450.jpeg?resize=800%2C450&ssl=1
+[3]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/01/audacity-audio-editor.jpg?fit=800%2C591&ssl=1
+[4]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/01/lmms-daw.jpg?fit=800%2C472&ssl=1
+[5]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/01/ardour-audio-editor.jpg?fit=800%2C639&ssl=1
+[6]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/01/cecilia.jpg?fit=800%2C510&ssl=1
+[7]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/01/mixxx.jpg?fit=800%2C486&ssl=1
+[8]: https://itsfoss.com/dj-mixxx-2/
+[9]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/01/rosegarden.jpg?fit=800%2C391&ssl=1
+[10]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/01/linux-audio-editors.jpeg?fit=800%2C450&ssl=1
diff --git a/sources/tech/20190116 GameHub - An Unified Library To Put All Games Under One Roof.md b/sources/tech/20190116 GameHub - An Unified Library To Put All Games Under One Roof.md
new file mode 100644
index 0000000000..bdaae74b43
--- /dev/null
+++ b/sources/tech/20190116 GameHub - An Unified Library To Put All Games Under One Roof.md
@@ -0,0 +1,139 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (GameHub – An Unified Library To Put All Games Under One Roof)
+[#]: via: (https://www.ostechnix.com/gamehub-an-unified-library-to-put-all-games-under-one-roof/)
+[#]: author: (SK https://www.ostechnix.com/author/sk/)
+
+GameHub – An Unified Library To Put All Games Under One Roof
+======
+
+
+
+**GameHub** is an unified gaming library that allows you to view, install, run and remove games on GNU/Linux operating system. It supports both native and non-native games from various sources including Steam, GOG, Humble Bundle, and Humble Trove etc. The non-native games are supported by [Wine][1], Proton, [DOSBox][2], ScummVM and RetroArch. It also allows you to add custom emulators and download bonus content and DLCs for GOG games. Simply put, Gamehub is a frontend for Steam/GoG/Humblebundle/Retroarch. It can use steam technologies like Proton to run windows gog games. GameHub is free, open source gaming platform written in **Vala** using **GTK+3**. If you’re looking for a way to manage all games under one roof, GameHub might be a good choice.
+
+### Installing GameHub
+
+The author of GameHub has designed it specifically for elementary OS. So, you can install it on Debian, Ubuntu, elementary OS and other Ubuntu-derivatives using GameHub PPA.
+
+```
+$ sudo apt install --no-install-recommends software-properties-common
+$ sudo add-apt-repository ppa:tkashkin/gamehub
+$ sudo apt update
+$ sudo apt install com.github.tkashkin.gamehub
+```
+
+GameHub is available in [**AUR**][3], so just install it on Arch Linux and its variants using any AUR helpers, for example [**YaY**][4].
+
+```
+$ yay -S gamehub-git
+```
+
+It is also available as **AppImage** and **Flatpak** packages in [**releases page**][5].
+
+If you prefer AppImage package, do the following:
+
+```
+$ wget https://github.com/tkashkin/GameHub/releases/download/0.12.1-91-dev/GameHub-bionic-0.12.1-91-dev-cd55bb5-x86_64.AppImage -O gamehub
+```
+
+Make it executable:
+
+```
+$ chmod +x gamehub
+```
+
+And, run GameHub using command:
+
+```
+$ ./gamehub
+```
+
+If you want to use Flatpak installer, run the following commands one by one.
+
+```
+$ git clone https://github.com/tkashkin/GameHub.git
+$ cd GameHub
+$ scripts/build.sh build_flatpak
+```
+
+### Put All Games Under One Roof
+
+Launch GameHub from menu or application launcher. At first launch, you will see the following welcome screen.
+
+
+
+As you can see in the above screenshot, you need to login to the given sources namely Steam, GoG or Humble Bundle. If you don’t have Steam client on your Linux system, you need to install it first to access your steam account. For GoG and Humble bundle sources, click on the icon to log in to the respective source.
+
+Once you logged in to your account(s), all games from the all sources can be visible on GameHub dashboard.
+
+
+
+You will see list of logged-in sources on the top left corner. To view the games from each source, just click on the respective icon.
+
+You can also switch between list view or grid view, sort the games by applying the filters and search games from the list in GameHub dashboard.
+
+#### Installing a game
+
+Click on the game of your choice from the list and click Install button. If the game is non-native, GameHub will automatically choose the compatibility layer (E.g Wine) that suits to run the game and install the selected game. As you see in the below screenshot, Indiana Jones game is not available for Linux platform.
+
+
+
+If it is a native game (i.e supports Linux), simply press the Install button.
+
+![][7]
+
+If you don’t want to install the game, just hit the **Download** button to save it in your games directory. It is also possible to add locally installed games to GameHub using the **Import** option.
+
+
+
+#### GameHub Settings
+
+GameHub Settings window can be launched by clicking on the four straight lines on top right corner.
+
+From Settings section, we can enable, disable and set various settings such as,
+
+ * Switch between light/dark themes.
+ * Use Symbolic icons instead of colored icons for games.
+ * Switch to compact list.
+ * Enable/disable merging games from different sources.
+ * Enable/disable compatibility layers.
+ * Set games collection directory. The default directory for storing the collection is **$HOME/Games/_Collection**.
+ * Set games directories for each source.
+ * Add/remove emulators,
+ * And many.
+
+
+
+For more details, refer the project links given at the end of this guide.
+
+**Related read:**
+
+And, that’s all for now. Hope this helps. I will be soon here with another guide. Until then, stay tuned with OSTechNix.
+
+Cheers!
+
+
+
+--------------------------------------------------------------------------------
+
+via: https://www.ostechnix.com/gamehub-an-unified-library-to-put-all-games-under-one-roof/
+
+作者:[SK][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.ostechnix.com/author/sk/
+[b]: https://github.com/lujun9972
+[1]: https://www.ostechnix.com/run-windows-games-softwares-ubuntu-16-04/
+[2]: https://www.ostechnix.com/how-to-run-ms-dos-games-and-programs-in-linux/
+[3]: https://aur.archlinux.org/packages/gamehub-git/
+[4]: https://www.ostechnix.com/yay-found-yet-another-reliable-aur-helper/
+[5]: https://github.com/tkashkin/GameHub/releases
+[6]: data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7
+[7]: http://www.ostechnix.com/wp-content/uploads/2019/01/gamehub4.png
diff --git a/sources/tech/20190117 Pyvoc - A Command line Dictionary And Vocabulary Building Tool.md b/sources/tech/20190117 Pyvoc - A Command line Dictionary And Vocabulary Building Tool.md
new file mode 100644
index 0000000000..b0aa45d618
--- /dev/null
+++ b/sources/tech/20190117 Pyvoc - A Command line Dictionary And Vocabulary Building Tool.md
@@ -0,0 +1,239 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Pyvoc – A Command line Dictionary And Vocabulary Building Tool)
+[#]: via: (https://www.ostechnix.com/pyvoc-a-command-line-dictionary-and-vocabulary-building-tool/)
+[#]: author: (SK https://www.ostechnix.com/author/sk/)
+
+Pyvoc – A Command line Dictionary And Vocabulary Building Tool
+======
+
+
+
+Howdy! I have a good news for non-native English speakers. Now, you can improve your English vocabulary and find the meaning of English words, right from your Terminal. Say hello to **Pyvoc** , a cross-platform, open source, command line dictionary and vocabulary building tool written in **Python** programming language. Using this tool, you can brush up some English words meanings, test or improve your vocabulary skill or simply use it as a CLI dictionary on Unix-like operating systems.
+
+### Installing Pyvoc
+
+Since Pyvoc is written using Python language, you can install it using [**Pip3**][1] package manager.
+
+```
+$ pip3 install pyvoc
+```
+
+Once installed, run the following command to automatically create necessary configuration files in your $HOME directory.
+
+```
+$ pyvoc word
+```
+
+Sample output:
+
+```
+|Creating necessary config files
+/getting api keys. please handle with care!
+|
+
+word
+Noun: single meaningful element of speech or writing
+example: I don't like the word ‘unofficial’
+
+Verb: express something spoken or written
+example: he words his request in a particularly ironic way
+
+Interjection: used to express agreement or affirmation
+example: Word, that's a good record, man
+```
+
+Done! Let us go ahead and brush the English skills.
+
+### Use Pyvoc as a command line Dictionary tool
+
+Pyvoc fetches the word meaning from **Oxford Dictionary API**.
+
+Let us say, you want to find the meaning of a word **‘digression’**. To do so, run:
+
+```
+$ pyvoc digression
+```
+
+
+
+See? Pyvoc not only displays the meaning of word **‘digression’** , but also an example sentence which shows how to use that word in practical.
+
+Let us see an another example.
+
+```
+$ pyvoc subterfuge
+|
+
+subterfuge
+Noun: deceit used in order to achieve one's goal
+example: he had to use subterfuge and bluff on many occasions
+```
+
+It also shows the word classes as well. As you already know, English has four major **word classes** :
+
+ 1. Nouns,
+
+ 2. Verbs,
+
+ 3. Adjectives,
+
+ 4. Adverbs.
+
+
+
+
+Take a look at the following example.
+
+```
+$ pyvoc welcome
+ /
+
+welcome
+Noun: instance or manner of greeting someone
+example: you will receive a warm welcome
+
+Interjection: used to greet someone in polite or friendly way
+example: welcome to the Wildlife Park
+
+Verb: greet someone arriving in polite or friendly way
+example: hotels should welcome guests in their own language
+
+Adjective: gladly received
+example: I'm pleased to see you, lad—you're welcome
+```
+
+As you see in the above output, the word ‘welcome’ can be used as a verb, noun, adjective and interjection. Pyvoc has given example for each class.
+
+If you misspell a word, it will inform you to check the spelling of the given word.
+
+```
+$ pyvoc wlecome
+\
+No definition found. Please check the spelling!!
+```
+
+Useful, isn’t it?
+
+### Create vocabulary groups
+
+A vocabulary group is nothing but a collection words added by the user. You can later revise or take quiz from these groups. 100 groups of 60 words are **reserved** for the user.
+
+To add a word (E.g **sporadic** ) to a group, just run:
+
+```
+$ pyvoc sporadic -a
+-
+
+sporadic
+Adjective: occurring at irregular intervals or only in few places
+example: sporadic fighting broke out
+
+
+writing to vocabulary group...
+word added to group number 51
+```
+
+As you can see, I didn’t provide any group number and pyvoc displayed the meaning of given word and automatically added that word to group number **51**. If you don’t provide the group number, Pyvoc will **incrementally add words** to groups **51-100**.
+
+Pyvoc also allows you to specify a group number if you want to. You can specify a group from 1-50 using **-g** option. For example, I am going to add a word to Vocabulary group 20 using the following command.
+
+```
+$ pyvoc discrete -a -g 20
+ /
+
+discrete
+Adjective: individually separate and distinct
+example: speech sounds are produced as a continuous sound signal rather
+ than discrete units
+
+creating group Number 20...
+writing to vocabulary group...
+word added to group number 20
+```
+
+See? The above command displays the meaning of ‘discrete’ word and adds it to the vocabulary group 20. If the group doesn’t exists, Pyvoc will create it and add the word.
+
+By default, Pyvoc includes three predefined vocabulary groups (101, 102, and 103). These custom groups has 800 words of each. All words in these groups are taken from **GRE** and **SAT** preparation websites.
+
+To view the user-generated groups, simply run:
+
+```
+$ pyvoc word -l
+ -
+
+word
+Noun: single meaningful element of speech or writing
+example: I don't like the word ‘unofficial’
+
+Verb: express something spoken or written
+example: he words his request in a particularly ironic way
+
+Interjection: used to express agreement or affirmation
+example: Word, that's a good record, man
+
+
+USER GROUPS
+Group no. No. of words
+20 1
+
+DEFAULT GROUP
+Group no. No. of words
+51 1
+```
+```
+
+```
+
+As you see, I have created one group (20) including the default group (51).
+
+### Test and improve English vocabulary
+
+As I already said, you can use the Vocabulary groups to revise or take quiz from them.
+
+For instance, to revise the group no. **101** , use **-r** option like below.
+
+```
+$ pyvoc 101 -r
+```
+
+You can now revise the meaning of all words in the Vocabulary group 101 in random order. Just hit ENTER to go through next questions. Once done, hit **CTRL+C** to exit.
+
+
+
+Also, you take quiz from the existing groups to brush up your vocabulary. To do so, use **-q** option like below.
+
+```
+$ pyvoc 103 -q 50
+```
+
+This command allows you to take quiz of 50 questions from vocabulary group 103. Choose the correct answer from the list by entering the appropriate number. You will get 1 point for every correct answer. The more you score the more your vocabulary skill will be.
+
+
+
+Pyvoc is in the early-development stage. I hope the developer will improve it and add more features in the days to come.
+
+As a non-native English speaker, I personally find it useful to test and learn new word meanings in my free time. If you’re a heavy command line user and wanted to quickly check the meaning of a word, Pyvoc is the right tool. You can also test your English Vocabulary at your free time to memorize and improve your English language skill. Give it a try. You won’t be disappointed.
+
+And, that’s all for now. Hope this was useful. More good stuffs to come. Stay tuned!
+
+Cheers!
+
+
+--------------------------------------------------------------------------------
+
+via: https://www.ostechnix.com/pyvoc-a-command-line-dictionary-and-vocabulary-building-tool/
+
+作者:[SK][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.ostechnix.com/author/sk/
+[b]: https://github.com/lujun9972
+[1]: https://www.ostechnix.com/manage-python-packages-using-pip/
diff --git a/sources/tech/20190119 Get started with Roland, a random selection tool for the command line.md b/sources/tech/20190119 Get started with Roland, a random selection tool for the command line.md
deleted file mode 100644
index edf787447b..0000000000
--- a/sources/tech/20190119 Get started with Roland, a random selection tool for the command line.md
+++ /dev/null
@@ -1,90 +0,0 @@
-[#]: collector: (lujun9972)
-[#]: translator: (geekpi)
-[#]: reviewer: ( )
-[#]: publisher: ( )
-[#]: url: ( )
-[#]: subject: (Get started with Roland, a random selection tool for the command line)
-[#]: via: (https://opensource.com/article/19/1/productivity-tools-roland)
-[#]: author: (Kevin Sonney https://opensource.com/users/ksonney (Kevin Sonney))
-
-Get started with Roland, a random selection tool for the command line
-======
-
-Get help making hard choices with Roland, the seventh in our series on open source tools that will make you more productive in 2019.
-
-
-
-There seems to be a mad rush at the beginning of every year to find ways to be more productive. New Year's resolutions, the itch to start the year off right, and of course, an "out with the old, in with the new" attitude all contribute to this. And the usual round of recommendations is heavily biased towards closed source and proprietary software. It doesn't have to be that way.
-
-Here's the seventh of my picks for 19 new (or new-to-you) open source tools to help you be more productive in 2019.
-
-### Roland
-
-By the time the workday has ended, often the only thing I want to think about is hitting the couch and playing the video game of the week. But even though my professional obligations stop at the end of the workday, I still have to manage my household. Laundry, pet care, making sure my teenager has what he needs, and most important: deciding what to make for dinner.
-
-Like many people, I often suffer from [decision fatigue][1], and I make less-than-healthy choices for dinner based on speed, ease of preparation, and (quite frankly) whatever causes me the least stress.
-
-
-
-[Roland][2] makes planning my meals much easier. Roland is a Perl application designed for tabletop role-playing games. It picks randomly from a list of items, such as monsters and hirelings. In essence, Roland does the same thing at the command line that a game master does when rolling physical dice to look up things in a table from the Game Master's Big Book of Bad Things to Do to Players.
-
-With minor modifications, Roland can do so much more. For example, just by adding a table, I can enable Roland to help me choose what to cook for dinner.
-
-The first step is installing Roland and all its dependencies.
-
-```
-git clone git@github.com:rjbs/Roland.git
-cpan install Getopt::Long::Descriptive Moose \
- namespace::autoclean List:AllUtils Games::Dice \
- Sort::ByExample Data::Bucketeer Text::Autoformat \
- YAML::XS
-cd oland
-```
-
-Next, I create a YAML document named **dinner** and enter all our meal options.
-
-```
-type: list
-pick: 1
-items:
- - "frozen pizza"
- - "chipotle black beans"
- - "huevos rancheros"
- - "nachos"
- - "pork roast"
- - "15 bean soup"
- - "roast chicken"
- - "pot roast"
- - "grilled cheese sandwiches"
-```
-
-Running the command **bin/roland dinner** will read the file and pick one of the options.
-
-
-
-I like to plan for the week ahead so I can shop for all my ingredients in advance. The **pick** command determines how many items from the list to chose, and right now, the **pick** option is set to 1. If I want to plan a full week's dinner menu, I can just change **pick: 1** to **pick: 7** and it will give me a week's worth of dinners. You can also use the **-m** command line option to manually enter the choices.
-
-
-
-You can also do fun things with Roland, like adding a file named **8ball** with some classic phrases.
-
-
-
-You can create all kinds of files to help with common decisions that seem so stressful after a long day of work. And even if you don't use it for that, you can still use it to decide which devious trap to set up for tonight's game.
-
-
---------------------------------------------------------------------------------
-
-via: https://opensource.com/article/19/1/productivity-tools-roland
-
-作者:[Kevin Sonney][a]
-选题:[lujun9972][b]
-译者:[译者ID](https://github.com/译者ID)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]: https://opensource.com/users/ksonney (Kevin Sonney)
-[b]: https://github.com/lujun9972
-[1]: https://en.wikipedia.org/wiki/Decision_fatigue
-[2]: https://github.com/rjbs/Roland
diff --git a/sources/tech/20190121 Akira- The Linux Design Tool We-ve Always Wanted.md b/sources/tech/20190121 Akira- The Linux Design Tool We-ve Always Wanted.md
deleted file mode 100644
index bd58eca5bf..0000000000
--- a/sources/tech/20190121 Akira- The Linux Design Tool We-ve Always Wanted.md
+++ /dev/null
@@ -1,92 +0,0 @@
-[#]: collector: (lujun9972)
-[#]: translator: ( )
-[#]: reviewer: ( )
-[#]: publisher: ( )
-[#]: url: ( )
-[#]: subject: (Akira: The Linux Design Tool We’ve Always Wanted?)
-[#]: via: (https://itsfoss.com/akira-design-tool)
-[#]: author: (Ankush Das https://itsfoss.com/author/ankush/)
-
-Akira: The Linux Design Tool We’ve Always Wanted?
-======
-
-Let’s make it clear, I am not a professional designer – but I’ve used certain tools on Windows (like Photoshop, Illustrator, etc.) and [Figma][1] (which is a browser-based interface design tool). I’m sure there are a lot more design tools available for Mac and Windows.
-
-Even on Linux, there is a limited number of dedicated [graphic design tools][2]. A few of these tools like [GIMP][3] and [Inkscape][4] are used by professionals as well. But most of them are not considered professional grade, unfortunately.
-
-Even if there are a couple more solutions – I’ve never come across a native Linux application that could replace [Sketch][5], Figma, or Adobe **** XD. Any professional designer would agree to that, isn’t it?
-
-### Is Akira going to replace Sketch, Figma, and Adobe XD on Linux?
-
-Well, in order to develop something that would replace those awesome proprietary tools – [Alessandro Castellani][6] – came up with a [Kickstarter campaign][7] by teaming up with a couple of experienced developers –
-[Alberto Fanjul][8], [Bilal Elmoussaoui][9], and [Felipe Escoto][10].
-
-So, yes, Akira is still pretty much just an idea- with a working prototype of its interface (as I observed in their [live stream session][11] via Kickstarter recently).
-
-### If it does not exist, why the Kickstarter campaign?
-
-![][12]
-
-The aim of the Kickstarter campaign is to gather funds in order to hire the developers and take a few months off to dedicate their time in order to make Akira possible.
-
-Nonetheless, if you want to support the project, you should know some details, right?
-
-Fret not, we asked a couple of questions in their livestream session – let’s get into it…
-
-### Akira: A few more details
-
-![Akira prototype interface][13]
-Image Credits: Kickstarter
-
-As the Kickstarter campaign describes:
-
-> The main purpose of Akira is to offer a fast and intuitive tool to **create Web and Mobile interfaces** , more like **Sketch** , **Figma** , or **Adobe XD** , with a completely native experience for Linux.
-
-They’ve also written a detailed description as to how the tool will be different from Inkscape, Glade, or QML Editor. Of course, if you want all the technical details, [Kickstarter][7] is the way to go. But, before that, let’s take a look at what they had to say when I asked some questions about Akira.
-
-Q: If you consider your project – similar to what Figma offers – why should one consider installing Akira instead of using the web-based tool? Is it just going to be a clone of those tools – offering a native Linux experience or is there something really interesting to encourage users to switch (except being an open source solution)?
-
-**Akira:** A native experience on Linux is always better and fast in comparison to a web-based electron app. Also, the hardware configuration matters if you choose to utilize Figma – but Akira will be light on system resource and you will still be able to do similar stuff without needing to go online.
-
-Q: Let’s assume that it becomes the open source solution that Linux users have been waiting for (with similar features offered by proprietary tools). What are your plans to sustain it? Do you plan to introduce any pricing plans – or rely on donations?
-
-**Akira** : The project will mostly rely on Donations (something like [Krita Foundation][14] could be an idea). But, there will be no “pro” pricing plans – it will be available for free and it will be an open source project.
-
-So, with the response I got, it definitely seems to be something promising that we should probably support.
-
-### Wrapping Up
-
-What do you think about Akira? Is it just going to remain a concept? Or do you hope to see it in action?
-
-Let us know your thoughts in the comments below.
-
-![][15]
-
---------------------------------------------------------------------------------
-
-via: https://itsfoss.com/akira-design-tool
-
-作者:[Ankush Das][a]
-选题:[lujun9972][b]
-译者:[译者ID](https://github.com/译者ID)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]: https://itsfoss.com/author/ankush/
-[b]: https://github.com/lujun9972
-[1]: https://www.figma.com/
-[2]: https://itsfoss.com/best-linux-graphic-design-software/
-[3]: https://itsfoss.com/gimp-2-10-release/
-[4]: https://inkscape.org/
-[5]: https://www.sketchapp.com/
-[6]: https://github.com/Alecaddd
-[7]: https://www.kickstarter.com/projects/alecaddd/akira-the-linux-design-tool/description
-[8]: https://github.com/albfan
-[9]: https://github.com/bilelmoussaoui
-[10]: https://github.com/Philip-Scott
-[11]: https://live.kickstarter.com/alessandro-castellani/live-stream/the-current-state-of-akira
-[12]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/01/akira-design-tool-kickstarter.jpg?resize=800%2C451&ssl=1
-[13]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/01/akira-mockup.png?ssl=1
-[14]: https://krita.org/en/about/krita-foundation/
-[15]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/01/akira-design-tool-kickstarter.jpg?fit=812%2C458&ssl=1
diff --git a/sources/tech/20190121 Get started with TaskBoard, a lightweight kanban board.md b/sources/tech/20190121 Get started with TaskBoard, a lightweight kanban board.md
deleted file mode 100644
index e77e5e3b1c..0000000000
--- a/sources/tech/20190121 Get started with TaskBoard, a lightweight kanban board.md
+++ /dev/null
@@ -1,59 +0,0 @@
-[#]: collector: (lujun9972)
-[#]: translator: ( )
-[#]: reviewer: ( )
-[#]: publisher: ( )
-[#]: url: ( )
-[#]: subject: (Get started with TaskBoard, a lightweight kanban board)
-[#]: via: (https://opensource.com/article/19/1/productivity-tool-taskboard)
-[#]: author: (Kevin Sonney https://opensource.com/users/ksonney (Kevin Sonney))
-
-Get started with TaskBoard, a lightweight kanban board
-======
-Check out the ninth tool in our series on open source tools that will make you more productive in 2019.
-
-
-
-There seems to be a mad rush at the beginning of every year to find ways to be more productive. New Year's resolutions, the itch to start the year off right, and of course, an "out with the old, in with the new" attitude all contribute to this. And the usual round of recommendations is heavily biased towards closed source and proprietary software. It doesn't have to be that way.
-
-Here's the ninth of my picks for 19 new (or new-to-you) open source tools to help you be more productive in 2019.
-
-### TaskBoard
-
-As I wrote in the [second article][1] in this series, [kanban boards][2] are pretty popular these days. And not all kanban boards are created equal. [TaskBoard][3] is a PHP application that is easy to set up on an existing web server and has a set of functions that make it easy to use and manage.
-
-
-
-[Installation][4] is as simple as unzipping the files on your web server, running a script or two, and making sure the correct directories are accessible. The first time you start it up, you're presented with a login form, and then it's time to start adding users and making boards. Board creation options include adding the columns you want to use and setting the default color of the cards. You can also assign users to boards so everyone sees only the boards they need to see.
-
-User management is lightweight, and all accounts are local to the server. You can set a default board for everyone on the server, and users can set their own default boards, too. These options can be useful when someone works on one board more than others.
-
-
-
-TaskBoard also allows you to create automatic actions, which are actions taken upon changes to user assignment, columns, or card categories. Although TaskBoard is not as powerful as some other kanban apps, you can set up automatic actions to make cards more visible for board users, clear due dates, and auto-assign new cards to people as needed. For example, in the screenshot below, if a card is assigned to the "admin" user, its color is changed to red, and when a card is assigned to my user, its color is changed to teal. I've also added an action to clear an item's due date if it's added to the "To-Do" column and to auto-assign cards to my user when that happens.
-
-
-
-The cards are very straightforward. While they don't have a start date, they do have end dates and a points field. Points can be used for estimating the time needed, effort required, or just general priority. Using points is optional, but if you are using TaskBoard for scrum planning or other agile techniques, it is a really handy feature. You can also filter the view by users and categories. This can be helpful on a team with multiple work streams going on, as it allows a team lead or manager to get status information about progress or a person's workload.
-
-
-
-If you need a reasonably lightweight kanban board, check out TaskBoard. It installs quickly, has some nice features, and is very, very easy to use. It's also flexible enough to be used for development teams, personal task tracking, and a whole lot more.
-
-
---------------------------------------------------------------------------------
-
-via: https://opensource.com/article/19/1/productivity-tool-taskboard
-
-作者:[Kevin Sonney][a]
-选题:[lujun9972][b]
-译者:[译者ID](https://github.com/译者ID)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]: https://opensource.com/users/ksonney (Kevin Sonney)
-[b]: https://github.com/lujun9972
-[1]: https://opensource.com/article/19/1/productivity-tool-wekan
-[2]: https://en.wikipedia.org/wiki/Kanban
-[3]: https://taskboard.matthewross.me/
-[4]: https://taskboard.matthewross.me/docs/
diff --git a/sources/tech/20190122 Dcp (Dat Copy) - Easy And Secure Way To Transfer Files Between Linux Systems.md b/sources/tech/20190122 Dcp (Dat Copy) - Easy And Secure Way To Transfer Files Between Linux Systems.md
deleted file mode 100644
index b6499932ae..0000000000
--- a/sources/tech/20190122 Dcp (Dat Copy) - Easy And Secure Way To Transfer Files Between Linux Systems.md
+++ /dev/null
@@ -1,177 +0,0 @@
-[#]: collector: (lujun9972)
-[#]: translator: ( )
-[#]: reviewer: ( )
-[#]: publisher: ( )
-[#]: url: ( )
-[#]: subject: (Dcp (Dat Copy) – Easy And Secure Way To Transfer Files Between Linux Systems)
-[#]: via: (https://www.2daygeek.com/dcp-dat-copy-secure-way-to-transfer-files-between-linux-systems/)
-[#]: author: (Vinoth Kumar https://www.2daygeek.com/author/vinoth/)
-
-Dcp (Dat Copy) – Easy And Secure Way To Transfer Files Between Linux Systems
-======
-
-Linux has native command to perform this task nicely using scp and rsync. However, we need to try new things.
-
-Also, we need to encourage the developers who is working new things with different concept and new technology.
-
-We also written few articles about these kind of topic, you can navigate those by clicking the below appropriate links.
-
-Those are **[OnionShare][1]** , **[Magic Wormhole][2]** , **[Transfer.sh][3]** and **ffsend**.
-
-### What’s Dcp?
-
-[dcp][4] copies files between hosts on a network using the peer-to-peer Dat network.
-
-dcp can be seen as an alternative to tools like scp, removing the need to configure SSH access between hosts.
-
-This lets you transfer files between two remote hosts, without you needing to worry about the specifics of how said hosts reach each other and regardless of whether hosts are behind NATs.
-
-dcp requires zero configuration and is secure, fast, and peer-to-peer. Also, this is not production-ready software. Use at your own risk.
-
-### What’s Dat Protocol?
-
-Dat is a peer-to-peer protocol. A community-driven project powering a next-generation Web.
-
-### How dcp works:
-
-dcp will create a dat archive for a specified set of files or directories and, using the generated public key, lets you download said archive from a second host.
-
-Any data shared over the network is encrypted using the public key of the archive, meaning data access is limited to those who have access to said key.
-
-### dcp Use cases:
-
- * Send files to multiple colleagues – just send the generated public key via chat and they can receive the files on their machine.
- * Sync files between two physical computers on your local network, without needing to set up SSH access.
- * Easily send files to a friend without needing to create a zip and upload it the cloud.
- * Copy files to a remote server when you have shell access but not SSH, for example on a kubernetes pod.
- * Share files between Linux/macOS and Windows, which isn’t exactly known for great SSH support.
-
-
-
-### How To Install NodeJS & npm in Linux?
-
-dcp package was written in JavaScript programming language so, we need to install NodeJS as a prerequisites to install dcp. Use the following command to install NodeJS in Linux.
-
-For **`Fedora`** system, use **[DNF Command][5]** to install NodeJS & npm.
-
-```
-$ sudo dnf install nodejs npm
-```
-
-For **`Debian/Ubuntu`** systems, use **[APT-GET Command][6]** or **[APT Command][7]** to install NodeJS & npm.
-
-```
-$ sudo apt install nodejs npm
-```
-
-For **`Arch Linux`** based systems, use **[Pacman Command][8]** to install NodeJS & npm.
-
-```
-$ sudo pacman -S nodejs npm
-```
-
-For **`RHEL/CentOS`** systems, use **[YUM Command][9]** to install NodeJS & npm.
-
-```
-$ sudo yum install epel-release
-$ sudo yum install nodejs npm
-```
-
-For **`openSUSE Leap`** system, use **[Zypper Command][10]** to install NodeJS & npm.
-
-```
-$ sudo zypper nodejs6
-```
-
-### How To Install dcp in Linux?
-
-Once you have installed the NodeJS, use the following npm command to install dcp.
-
-npm is a package manager for the JavaScript programming language. It is the default package manager for the JavaScript runtime environment Node.js.
-
-```
-# npm i -g dat-cp
-```
-
-### How to Send Files Through dcp?
-
-Enter the files or folders which you want to transfer to remote server followed by the dcp command, And no need to mention the destination machine name.
-
-```
-# dcp [File Name Which You Want To Transfer]
-```
-
-It will generate a dat archive for the given file when you ran the dcp command. Once it’s done then it will geerate a public key at the bottom of the page.
-
-### How To Receive Files Through dcp?
-
-Enter the generated the public key on remote server to receive the files or folders.
-
-```
-# dcp [Public Key]
-```
-
-To recursively copy directories.
-
-```
-# dcp [Folder Name Which You Want To Transfer] -r
-```
-
-In the following example, we are going to transfer a single file.
-![][12]
-
-Output for the above file transfer.
-![][13]
-
-If you want to send more than one file, use the following format.
-![][14]
-
-Output for the above file transfer.
-![][15]
-
-To recursively copy directories.
-![][16]
-
-Output for the above folder transfer.
-![][17]
-
-It won’t allow you to download the files or folders in second time. It means once you downloaded the files or folders then immediately the link will be expired.
-![][18]
-
-Navigate to man page to know about other options.
-
-```
-# dcp --help
-```
-
---------------------------------------------------------------------------------
-
-via: https://www.2daygeek.com/dcp-dat-copy-secure-way-to-transfer-files-between-linux-systems/
-
-作者:[Vinoth Kumar][a]
-选题:[lujun9972][b]
-译者:[译者ID](https://github.com/译者ID)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]: https://www.2daygeek.com/author/vinoth/
-[b]: https://github.com/lujun9972
-[1]: https://www.2daygeek.com/onionshare-secure-way-to-share-files-sharing-tool-linux/
-[2]: https://www.2daygeek.com/wormhole-securely-share-files-from-linux-command-line/
-[3]: https://www.2daygeek.com/transfer-sh-easy-fast-way-share-files-over-internet-from-command-line/
-[4]: https://github.com/tom-james-watson/dat-cp
-[5]: https://www.2daygeek.com/dnf-command-examples-manage-packages-fedora-system/
-[6]: https://www.2daygeek.com/apt-get-apt-cache-command-examples-manage-packages-debian-ubuntu-systems/
-[7]: https://www.2daygeek.com/apt-command-examples-manage-packages-debian-ubuntu-systems/
-[8]: https://www.2daygeek.com/pacman-command-examples-manage-packages-arch-linux-system/
-[9]: https://www.2daygeek.com/yum-command-examples-manage-packages-rhel-centos-systems/
-[10]: https://www.2daygeek.com/zypper-command-examples-manage-packages-opensuse-system/
-[11]: data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7
-[12]: https://www.2daygeek.com/wp-content/uploads/2019/01/Dcp-Dat-Copy-Easy-And-Secure-Way-To-Transfer-Files-Between-Linux-Systems-1.png
-[13]: https://www.2daygeek.com/wp-content/uploads/2019/01/Dcp-Dat-Copy-Easy-And-Secure-Way-To-Transfer-Files-Between-Linux-Systems-2.png
-[14]: https://www.2daygeek.com/wp-content/uploads/2019/01/Dcp-Dat-Copy-Easy-And-Secure-Way-To-Transfer-Files-Between-Linux-Systems-3.jpg
-[15]: https://www.2daygeek.com/wp-content/uploads/2019/01/Dcp-Dat-Copy-Easy-And-Secure-Way-To-Transfer-Files-Between-Linux-Systems-4.jpg
-[16]: https://www.2daygeek.com/wp-content/uploads/2019/01/Dcp-Dat-Copy-Easy-And-Secure-Way-To-Transfer-Files-Between-Linux-Systems-6.jpg
-[17]: https://www.2daygeek.com/wp-content/uploads/2019/01/Dcp-Dat-Copy-Easy-And-Secure-Way-To-Transfer-Files-Between-Linux-Systems-7.jpg
-[18]: https://www.2daygeek.com/wp-content/uploads/2019/01/Dcp-Dat-Copy-Easy-And-Secure-Way-To-Transfer-Files-Between-Linux-Systems-5.jpg
diff --git a/sources/tech/20190122 Get started with Go For It, a flexible to-do list application.md b/sources/tech/20190122 Get started with Go For It, a flexible to-do list application.md
deleted file mode 100644
index 56dde41884..0000000000
--- a/sources/tech/20190122 Get started with Go For It, a flexible to-do list application.md
+++ /dev/null
@@ -1,60 +0,0 @@
-[#]: collector: (lujun9972)
-[#]: translator: ( )
-[#]: reviewer: ( )
-[#]: publisher: ( )
-[#]: url: ( )
-[#]: subject: (Get started with Go For It, a flexible to-do list application)
-[#]: via: (https://opensource.com/article/19/1/productivity-tool-go-for-it)
-[#]: author: (Kevin Sonney https://opensource.com/users/ksonney (Kevin Sonney))
-
-Get started with Go For It, a flexible to-do list application
-======
-Go For It, the tenth in our series on open source tools that will make you more productive in 2019, builds on the Todo.txt system to help you get more things done.
-
-
-There seems to be a mad rush at the beginning of every year to find ways to be more productive. New Year's resolutions, the itch to start the year off right, and of course, an "out with the old, in with the new" attitude all contribute to this. And the usual round of recommendations is heavily biased towards closed source and proprietary software. It doesn't have to be that way.
-
-Here's the tenth of my picks for 19 new (or new-to-you) open source tools to help you be more productive in 2019.
-
-### Go For It
-
-Sometimes what a person needs to be productive isn't a fancy kanban board or a set of notes, but a simple, straightforward to-do list. Something that is as basic as "add item to list, check it off when done." And for that, the [plain-text Todo.txt system][1] is possibly one of the easiest to use, and it's supported on almost every system out there.
-
-
-
-[Go For It][2] is a simple, easy-to-use graphical interface for Todo.txt. It can be used with an existing file, if you are already using Todo.txt, and will create both a to-do and a done file if you aren't. It allows drag-and-drop ordering of tasks, allowing users to organize to-do items in the order they want to execute them. It also supports priorities, projects, and contexts, as outlined in the [Todo.txt format guidelines][3]. And, it can filter tasks by context or project simply by clicking on the project or context in the task list.
-
-
-
-At first, Go For It may look the same as just about any other Todo.txt program, but looks can be deceiving. The real feature that sets Go For It apart is that it includes a built-in [Pomodoro Technique][4] timer. Select the task you want to complete, switch to the Timer tab, and click Start. When the task is done, simply click Done, and it will automatically reset the timer and pick the next task on the list. You can pause and restart the timer as well as click Skip to jump to the next task (or break). It provides a warning when 60 seconds are left for the current task. The default time for tasks is set at 25 minutes, and the default time for breaks is set at five minutes. You can adjust this in the Settings screen, as well as the location of the directory containing your Todo.txt and done.txt files.
-
-
-
-Go For It's third tab, Done, allows you to look at the tasks you've completed and clean them out when you want. Being able to look at what you've accomplished can be very motivating and a good way to get a feel for where you are in a longer process.
-
-
-
-It also has all of Todo.txt's other advantages. Go For It's list is accessible by other programs that use the same format, including [Todo.txt's original command-line tool][5] and any [add-ons][6] you've installed.
-
-Go For It seeks to be a simple tool to help manage your to-do list and get those items done. If you already use Todo.txt, Go For It is a fantastic addition to your toolkit, and if you don't, it's a really good way to start using one of the simplest and most flexible systems available.
-
-
---------------------------------------------------------------------------------
-
-via: https://opensource.com/article/19/1/productivity-tool-go-for-it
-
-作者:[Kevin Sonney][a]
-选题:[lujun9972][b]
-译者:[译者ID](https://github.com/译者ID)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]: https://opensource.com/users/ksonney (Kevin Sonney)
-[b]: https://github.com/lujun9972
-[1]: http://todotxt.org/
-[2]: http://manuel-kehl.de/projects/go-for-it/
-[3]: https://github.com/todotxt/todo.txt
-[4]: https://en.wikipedia.org/wiki/Pomodoro_Technique
-[5]: https://github.com/todotxt/todo.txt-cli
-[6]: https://github.com/todotxt/todo.txt-cli/wiki/Todo.sh-Add-on-Directory
diff --git a/sources/tech/20190122 How To Copy A File-Folder From A Local System To Remote System In Linux.md b/sources/tech/20190122 How To Copy A File-Folder From A Local System To Remote System In Linux.md
deleted file mode 100644
index 6de6cd173f..0000000000
--- a/sources/tech/20190122 How To Copy A File-Folder From A Local System To Remote System In Linux.md
+++ /dev/null
@@ -1,398 +0,0 @@
-[#]: collector: (lujun9972)
-[#]: translator: ( )
-[#]: reviewer: ( )
-[#]: publisher: ( )
-[#]: url: ( )
-[#]: subject: (How To Copy A File/Folder From A Local System To Remote System In Linux?)
-[#]: via: (https://www.2daygeek.com/linux-scp-rsync-pscp-command-copy-files-folders-in-multiple-servers-using-shell-script/)
-[#]: author: (Prakash Subramanian https://www.2daygeek.com/author/prakash/)
-
-How To Copy A File/Folder From A Local System To Remote System In Linux?
-======
-
-Copying a file from one server to another server or local to remote is one of the routine task for Linux administrator.
-
-If anyone says no, i won’t accept because this is one of the regular activity wherever you go.
-
-It can be done in many ways and we are trying to cover all the possible options.
-
-You can choose the one which you would prefer. Also, check other commands as well that may help you for some other purpose.
-
-I have tested all these commands and script in my test environment so, you can use this for your routine work.
-
-By default every one go with SCP because it’s one of the native command that everyone use for file copy. But commands which is listed in this article are be smart so, give a try if you would like to try new things.
-
-This can be done in below four ways easily.
-
- * **`SCP:`** scp copies files between hosts on a network. It uses ssh for data transfer, and uses the same authentication and provides the same security as ssh.
- * **`RSYNC:`** rsync is a fast and extraordinarily versatile file copying tool. It can copy locally, to/from another host over any remote shell, or to/from a remote rsync daemon.
- * **`PSCP:`** pscp is a program for copying files in parallel to a number of hosts. It provides features such as passing a password to scp, saving output to files, and timing out.
- * **`PRSYNC:`** prsync is a program for copying files in parallel to a number of hosts. It provides features such as passing a password to ssh, saving output to files, and timing out.
-
-
-
-### Method-1: Copy Files/Folders From A Local System To Remote System In Linux Using SCP Command?
-
-scp command allow us to copy files/folders from a local system to remote system.
-
-We are going to copy the `output.txt` file from my local system to `2g.CentOS.com` remote system under `/opt/backup` directory.
-
-```
-# scp output.txt root@2g.CentOS.com:/opt/backup
-
-output.txt 100% 2468 2.4KB/s 00:00
-```
-
-We are going to copy two files `output.txt` and `passwd-up.sh` files from my local system to `2g.CentOS.com` remote system under `/opt/backup` directory.
-
-```
-# scp output.txt passwd-up.sh root@2g.CentOS.com:/opt/backup
-
-output.txt 100% 2468 2.4KB/s 00:00
-passwd-up.sh 100% 877 0.9KB/s 00:00
-```
-
-We are going to copy the `shell-script` directory from my local system to `2g.CentOS.com` remote system under `/opt/backup` directory.
-
-This will copy the `shell-script` directory and associated files under `/opt/backup` directory.
-
-```
-# scp -r /home/daygeek/2g/shell-script/ [email protected]:/opt/backup/
-
-output.txt 100% 2468 2.4KB/s 00:00
-ovh.sh 100% 76 0.1KB/s 00:00
-passwd-up.sh 100% 877 0.9KB/s 00:00
-passwd-up1.sh 100% 7 0.0KB/s 00:00
-server-list.txt 100% 23 0.0KB/s 00:00
-```
-
-### Method-2: Copy Files/Folders From A Local System To Multiple Remote System In Linux Using Shell Script with scp Command?
-
-If you would like to copy the same file into multiple remote servers then create the following small shell script to achieve this.
-
-To do so, get the servers list and add those into `server-list.txt` file. Make sure you have to update the servers list into `server-list.txt` file. Each server should be in separate line.
-
-Finally mention the file location which you want to copy like below.
-
-```
-# file-copy.sh
-
-#!/bin/sh
-for server in `more server-list.txt`
-do
- scp /home/daygeek/2g/shell-script/output.txt [email protected]$server:/opt/backup
-done
-```
-
-Once you done, set an executable permission to password-update.sh file.
-
-```
-# chmod +x file-copy.sh
-```
-
-Finally run the script to achieve this.
-
-```
-# ./file-copy.sh
-
-output.txt 100% 2468 2.4KB/s 00:00
-output.txt 100% 2468 2.4KB/s 00:00
-```
-
-Use the following script to copy the multiple files into multiple remote servers.
-
-```
-# file-copy.sh
-
-#!/bin/sh
-for server in `more server-list.txt`
-do
- scp /home/daygeek/2g/shell-script/output.txt passwd-up.sh [email protected]$server:/opt/backup
-done
-```
-
-The below output shows all the files twice as this copied into two servers.
-
-```
-# ./file-cp.sh
-
-output.txt 100% 2468 2.4KB/s 00:00
-passwd-up.sh 100% 877 0.9KB/s 00:00
-output.txt 100% 2468 2.4KB/s 00:00
-passwd-up.sh 100% 877 0.9KB/s 00:00
-```
-
-Use the following script to copy the directory recursively into multiple remote servers.
-
-```
-# file-copy.sh
-
-#!/bin/sh
-for server in `more server-list.txt`
-do
- scp -r /home/daygeek/2g/shell-script/ [email protected]$server:/opt/backup
-done
-```
-
-Output for the above script.
-
-```
-# ./file-cp.sh
-
-output.txt 100% 2468 2.4KB/s 00:00
-ovh.sh 100% 76 0.1KB/s 00:00
-passwd-up.sh 100% 877 0.9KB/s 00:00
-passwd-up1.sh 100% 7 0.0KB/s 00:00
-server-list.txt 100% 23 0.0KB/s 00:00
-
-output.txt 100% 2468 2.4KB/s 00:00
-ovh.sh 100% 76 0.1KB/s 00:00
-passwd-up.sh 100% 877 0.9KB/s 00:00
-passwd-up1.sh 100% 7 0.0KB/s 00:00
-server-list.txt 100% 23 0.0KB/s 00:00
-```
-
-### Method-3: Copy Files/Folders From A Local System To Multiple Remote System In Linux Using PSCP Command?
-
-pscp command directly allow us to perform the copy to multiple remote servers.
-
-Use the following pscp command to copy a single file to remote server.
-
-```
-# pscp.pssh -H 2g.CentOS.com /home/daygeek/2g/shell-script/output.txt /opt/backup
-
-[1] 18:46:11 [SUCCESS] 2g.CentOS.com
-```
-
-Use the following pscp command to copy a multiple files to remote server.
-
-```
-# pscp.pssh -H 2g.CentOS.com /home/daygeek/2g/shell-script/output.txt ovh.sh /opt/backup
-
-[1] 18:47:48 [SUCCESS] 2g.CentOS.com
-```
-
-Use the following pscp command to copy a directory recursively to remote server.
-
-```
-# pscp.pssh -H 2g.CentOS.com -r /home/daygeek/2g/shell-script/ /opt/backup
-
-[1] 18:48:46 [SUCCESS] 2g.CentOS.com
-```
-
-Use the following pscp command to copy a single file to multiple remote servers.
-
-```
-# pscp.pssh -h server-list.txt /home/daygeek/2g/shell-script/output.txt /opt/backup
-
-[1] 18:49:48 [SUCCESS] 2g.CentOS.com
-[2] 18:49:48 [SUCCESS] 2g.Debian.com
-```
-
-Use the following pscp command to copy a multiple files to multiple remote servers.
-
-```
-# pscp.pssh -h server-list.txt /home/daygeek/2g/shell-script/output.txt passwd-up.sh /opt/backup
-
-[1] 18:50:30 [SUCCESS] 2g.Debian.com
-[2] 18:50:30 [SUCCESS] 2g.CentOS.com
-```
-
-Use the following pscp command to copy a directory recursively to multiple remote servers.
-
-```
-# pscp.pssh -h server-list.txt -r /home/daygeek/2g/shell-script/ /opt/backup
-
-[1] 18:51:31 [SUCCESS] 2g.Debian.com
-[2] 18:51:31 [SUCCESS] 2g.CentOS.com
-```
-
-### Method-4: Copy Files/Folders From A Local System To Multiple Remote System In Linux Using rsync Command?
-
-Rsync is a fast and extraordinarily versatile file copying tool. It can copy locally, to/from another host over any remote shell, or to/from a remote rsync daemon.
-
-Use the following rsync command to copy a single file to remote server.
-
-```
-# rsync -avz /home/daygeek/2g/shell-script/output.txt [email protected]:/opt/backup
-
-sending incremental file list
-output.txt
-
-sent 598 bytes received 31 bytes 1258.00 bytes/sec
-total size is 2468 speedup is 3.92
-```
-
-Use the following pscp command to copy a multiple files to remote server.
-
-```
-# rsync -avz /home/daygeek/2g/shell-script/output.txt passwd-up.sh root@2g.CentOS.com:/opt/backup
-
-sending incremental file list
-output.txt
-passwd-up.sh
-
-sent 737 bytes received 50 bytes 1574.00 bytes/sec
-total size is 2537 speedup is 3.22
-```
-
-Use the following rsync command to copy a single file to remote server overh ssh.
-
-```
-# rsync -avzhe ssh /home/daygeek/2g/shell-script/output.txt root@2g.CentOS.com:/opt/backup
-
-sending incremental file list
-output.txt
-
-sent 598 bytes received 31 bytes 419.33 bytes/sec
-total size is 2.47K speedup is 3.92
-```
-
-Use the following pscp command to copy a directory recursively to remote server over ssh. This will copy only files not the base directory.
-
-```
-# rsync -avzhe ssh /home/daygeek/2g/shell-script/ root@2g.CentOS.com:/opt/backup
-
-sending incremental file list
-./
-output.txt
-ovh.sh
-passwd-up.sh
-passwd-up1.sh
-server-list.txt
-
-sent 3.85K bytes received 281 bytes 8.26K bytes/sec
-total size is 9.12K speedup is 2.21
-```
-
-### Method-5: Copy Files/Folders From A Local System To Multiple Remote System In Linux Using Shell Script with rsync Command?
-
-If you would like to copy the same file into multiple remote servers then create the following small shell script to achieve this.
-
-```
-# file-copy.sh
-
-#!/bin/sh
-for server in `more server-list.txt`
-do
- rsync -avzhe ssh /home/daygeek/2g/shell-script/ root@2g.CentOS.com$server:/opt/backup
-done
-```
-
-Output for the above shell script.
-
-```
-# ./file-copy.sh
-
-sending incremental file list
-./
-output.txt
-ovh.sh
-passwd-up.sh
-passwd-up1.sh
-server-list.txt
-
-sent 3.86K bytes received 281 bytes 8.28K bytes/sec
-total size is 9.13K speedup is 2.21
-
-sending incremental file list
-./
-output.txt
-ovh.sh
-passwd-up.sh
-passwd-up1.sh
-server-list.txt
-
-sent 3.86K bytes received 281 bytes 2.76K bytes/sec
-total size is 9.13K speedup is 2.21
-```
-
-### Method-6: Copy Files/Folders From A Local System To Multiple Remote System In Linux Using Shell Script with scp Command?
-
-In the above two shell script, we need to mention the file and folder location as a prerequiesties but here i did a small modification that allow the script to get a file or folder as a input. It could be very useful when you want to perform the copy multiple times in a day.
-
-```
-# file-copy.sh
-
-#!/bin/sh
-for server in `more server-list.txt`
-do
-scp -r $1 root@2g.CentOS.com$server:/opt/backup
-done
-```
-
-Run the shell script and give the file name as a input.
-
-```
-# ./file-copy.sh output1.txt
-
-output1.txt 100% 3558 3.5KB/s 00:00
-output1.txt 100% 3558 3.5KB/s 00:00
-```
-
-### Method-7: Copy Files/Folders From A Local System To Multiple Remote System In Linux With Non-Standard Port Number?
-
-Use the below shell script to copy a file or folder if you are using Non-Standard port.
-
-If you are using `Non-Standard` port, make sure you have to mention the port number as follow for SCP command.
-
-```
-# file-copy-scp.sh
-
-#!/bin/sh
-for server in `more server-list.txt`
-do
-scp -P 2222 -r $1 root@2g.CentOS.com$server:/opt/backup
-done
-```
-
-Run the shell script and give the file name as a input.
-
-```
-# ./file-copy.sh ovh.sh
-
-ovh.sh 100% 3558 3.5KB/s 00:00
-ovh.sh 100% 3558 3.5KB/s 00:00
-```
-
-If you are using `Non-Standard` port, make sure you have to mention the port number as follow for rsync command.
-
-```
-# file-copy-rsync.sh
-
-#!/bin/sh
-for server in `more server-list.txt`
-do
-rsync -avzhe 'ssh -p 2222' $1 root@2g.CentOS.com$server:/opt/backup
-done
-```
-
-Run the shell script and give the file name as a input.
-
-```
-# ./file-copy-rsync.sh passwd-up.sh
-sending incremental file list
-passwd-up.sh
-
-sent 238 bytes received 35 bytes 26.00 bytes/sec
-total size is 159 speedup is 0.58
-
-sending incremental file list
-passwd-up.sh
-
-sent 238 bytes received 35 bytes 26.00 bytes/sec
-total size is 159 speedup is 0.58
-```
---------------------------------------------------------------------------------
-
-via: https://www.2daygeek.com/linux-scp-rsync-pscp-command-copy-files-folders-in-multiple-servers-using-shell-script/
-
-作者:[Prakash Subramanian][a]
-选题:[lujun9972][b]
-译者:[译者ID](https://github.com/译者ID)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]: https://www.2daygeek.com/author/prakash/
-[b]: https://github.com/lujun9972
diff --git a/sources/tech/20190123 Mind map yourself using FreeMind and Fedora.md b/sources/tech/20190123 Mind map yourself using FreeMind and Fedora.md
deleted file mode 100644
index 146f95752a..0000000000
--- a/sources/tech/20190123 Mind map yourself using FreeMind and Fedora.md
+++ /dev/null
@@ -1,81 +0,0 @@
-[#]: collector: (lujun9972)
-[#]: translator: ( )
-[#]: reviewer: ( )
-[#]: publisher: ( )
-[#]: url: ( )
-[#]: subject: (Mind map yourself using FreeMind and Fedora)
-[#]: via: (https://fedoramagazine.org/mind-map-yourself-using-freemind-and-fedora/)
-[#]: author: (Paul W. Frields https://fedoramagazine.org/author/pfrields/)
-
-Mind map yourself using FreeMind and Fedora
-======
-
-
-A mind map of yourself sounds a little far-fetched at first. Is this process about neural pathways? Or telepathic communication? Not at all. Instead, a mind map of yourself is a way to describe yourself to others visually. It also shows connections among the characteristics you use to describe yourself. It’s a useful way to share information with others in a clever but also controllable way. You can use any mind map application for this purpose. This article shows you how to get started using [FreeMind][1], available in Fedora.
-
-### Get the application
-
-The FreeMind application has been around a while. While the UI is a bit dated and could use a refresh, it’s a powerful app that offers many options for building mind maps. And of course it’s 100% open source. There are other mind mapping apps available for Fedora and Linux users, as well. Check out [this previous article that covers several mind map options][2].
-
-Install FreeMind from the Fedora repositories using the Software app if you’re running Fedora Workstation. Or use this [sudo][3] command in a terminal:
-
-```
-$ sudo dnf install freemind
-```
-
-You can launch the app from the GNOME Shell Overview in Fedora Workstation. Or use the application start service your desktop environment provides. FreeMind shows you a new, blank map by default:
-
-![][4]
-FreeMind initial (blank) mind map
-
-A map consists of linked items or descriptions — nodes. When you think of something related to a node you want to capture, simply create a new node connected to it.
-
-### Mapping yourself
-
-Click in the initial node. Replace it with your name by editing the text and hitting **Enter**. You’ve just started your mind map.
-
-What would you think of if you had to fully describe yourself to someone? There are probably many things to cover. How do you spend your time? What do you enjoy? What do you dislike? What do you value? Do you have a family? All of this can be captured in nodes.
-
-To add a node connection, select the existing node, and hit **Insert** , or use the “light bulb” icon for a new child node. To add another node at the same level as the new child, use **Enter**.
-
-Don’t worry if you make a mistake. You can use the **Delete** key to remove an unwanted node. There’s no rules about content. Short nodes are best, though. They allow your mind to move quickly when creating the map. Concise nodes also let viewers scan and understand the map easily later.
-
-This example uses nodes to explore each of these major categories:
-
-![][5]
-Personal mind map, first level
-
-You could do another round of iteration for each of these areas. Let your mind freely connect ideas to generate the map. Don’t worry about “getting it right.” It’s better to get everything out of your head and onto the display. Here’s what a next-level map might look like.
-
-![][6]
-Personal mind map, second level
-
-You could expand on any of these nodes in the same way. Notice how much information you can quickly understand about John Q. Public in the example.
-
-### How to use your personal mind map
-
-This is a great way to have team or project members introduce themselves to each other. You can apply all sorts of formatting and color to the map to give it personality. These are fun to do on paper, of course. But having one on your Fedora system means you can always fix mistakes, or even make changes as you change.
-
-Have fun exploring your personal mind map!
-
-
-
---------------------------------------------------------------------------------
-
-via: https://fedoramagazine.org/mind-map-yourself-using-freemind-and-fedora/
-
-作者:[Paul W. Frields][a]
-选题:[lujun9972][b]
-译者:[译者ID](https://github.com/译者ID)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]: https://fedoramagazine.org/author/pfrields/
-[b]: https://github.com/lujun9972
-[1]: http://freemind.sourceforge.net/wiki/index.php/Main_Page
-[2]: https://fedoramagazine.org/three-mind-mapping-tools-fedora/
-[3]: https://fedoramagazine.org/howto-use-sudo/
-[4]: https://fedoramagazine.org/wp-content/uploads/2019/01/Screenshot-from-2019-01-19-15-17-04-1024x736.png
-[5]: https://fedoramagazine.org/wp-content/uploads/2019/01/Screenshot-from-2019-01-19-15-32-38-1024x736.png
-[6]: https://fedoramagazine.org/wp-content/uploads/2019/01/Screenshot-from-2019-01-19-15-38-00-1024x736.png
diff --git a/sources/tech/20190124 Get started with LogicalDOC, an open source document management system.md b/sources/tech/20190124 Get started with LogicalDOC, an open source document management system.md
deleted file mode 100644
index 21687c0ce3..0000000000
--- a/sources/tech/20190124 Get started with LogicalDOC, an open source document management system.md
+++ /dev/null
@@ -1,62 +0,0 @@
-[#]: collector: (lujun9972)
-[#]: translator: ( )
-[#]: reviewer: ( )
-[#]: publisher: ( )
-[#]: url: ( )
-[#]: subject: (Get started with LogicalDOC, an open source document management system)
-[#]: via: (https://opensource.com/article/19/1/productivity-tool-logicaldoc)
-[#]: author: (Kevin Sonney https://opensource.com/users/ksonney)
-
-Get started with LogicalDOC, an open source document management system
-======
-Keep better track of document versions with LogicalDOC, the 12th in our series on open source tools that will make you more productive in 2019.
-
-
-
-There seems to be a mad rush at the beginning of every year to find ways to be more productive. New Year's resolutions, the itch to start the year off right, and of course, an "out with the old, in with the new" attitude all contribute to this. And the usual round of recommendations is heavily biased towards closed source and proprietary software. It doesn't have to be that way.
-
-Here's the 12th of my picks for 19 new (or new-to-you) open source tools to help you be more productive in 2019.
-
-### LogicalDOC
-
-Part of being productive is being able to find what you need when you need it. We've all seen directories full of similar files with similar names, a result of renaming them every time a document changes to keep track of all the versions. For example, my wife is a writer, and she often saves document revisions with new names before she sends them to reviewers.
-
-
-
-A coder's natural solution to this problem—Git or another version control tool—won't work for document creators because the systems used for code often don't play nice with the formats used by commercial text editors. And before someone says, "just change formats," [that isn't an option for everyone][1]. Also, many version control tools are not very friendly for the less technically inclined. In large organizations, there are tools to solve this problem, but they also require the resources of a large organization to run, manage, and support them.
-
-
-
-[LogicalDOC CE][2] is an open source document management system built to solve this problem. It allows users to check in, check out, version, search, and lock document files and keeps a history of versions, similar to the version control tools used by coders.
-
-LogicalDOC can be [installed][3] on Linux, MacOS, and Windows using a Java-based installer. During installation, you'll be prompted for details on the database where its data will be stored and have an option for a local-only file store. You'll get the URL and a default username and password to access the server as well as an option to save a script to automate future installations.
-
-After you log in, LogicalDOC's default screen lists the documents you have tagged, checked out, and any recent notes on them. Switching to the Documents tab will show the files you have access to. You can upload documents by selecting a file through the interface or using drag and drop. If you upload a ZIP file, LogicalDOC will expand it and add its individual files to the repository.
-
-
-
-Right-clicking on a file will bring up a menu of options to check out files, lock files against changes, and do a whole host of other things. Checking out a file downloads it to your local machine where it can be edited. A checked-out file cannot be modified by anyone else until it's checked back in. When the file is checked back in (using the same menu), the user can add tags to the version and is required to comment on what was done to it.
-
-
-
-Going back and looking at earlier versions is as easy as downloading them from the Versions page. There are also import and export options for some third-party services, with [Dropbox][4] support built-in.
-
-Document management is not just for big companies that can afford expensive solutions. LogicalDOC helps you keep track of the documents you're using with a revision history and a safe repository for documents that are otherwise difficult to manage.
-
---------------------------------------------------------------------------------
-
-via: https://opensource.com/article/19/1/productivity-tool-logicaldoc
-
-作者:[Kevin Sonney][a]
-选题:[lujun9972][b]
-译者:[译者ID](https://github.com/译者ID)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]: https://opensource.com/users/ksonney (Kevin Sonney)
-[b]: https://github.com/lujun9972
-[1]: http://www.antipope.org/charlie/blog-static/2013/10/why-microsoft-word-must-die.html
-[2]: https://www.logicaldoc.com/download-logicaldoc-community
-[3]: https://docs.logicaldoc.com/en/installation
-[4]: https://dropbox.com
diff --git a/sources/tech/20190124 ODrive (Open Drive) - Google Drive GUI Client For Linux.md b/sources/tech/20190124 ODrive (Open Drive) - Google Drive GUI Client For Linux.md
deleted file mode 100644
index 71a91ec3d8..0000000000
--- a/sources/tech/20190124 ODrive (Open Drive) - Google Drive GUI Client For Linux.md
+++ /dev/null
@@ -1,127 +0,0 @@
-[#]: collector: (lujun9972)
-[#]: translator: ( )
-[#]: reviewer: ( )
-[#]: publisher: ( )
-[#]: url: ( )
-[#]: subject: (ODrive (Open Drive) – Google Drive GUI Client For Linux)
-[#]: via: (https://www.2daygeek.com/odrive-open-drive-google-drive-gui-client-for-linux/)
-[#]: author: (Magesh Maruthamuthu https://www.2daygeek.com/author/magesh/)
-
-ODrive (Open Drive) – Google Drive GUI Client For Linux
-======
-
-This we had discussed in so many times. However, i will give a small introduction about it.
-
-As of now there is no official Google Drive Client for Linux and we need to use unofficial clients.
-
-There are many applications available in Linux for Google Drive integration.
-
-Each application has came out with set of features.
-
-We had written few articles about this in our website in the past.
-
-Those are **[DriveSync][1]** , **[Google Drive Ocamlfuse Client][2]** and **[Mount Google Drive in Linux Using Nautilus File Manager][3]**.
-
-Today also we are going to discuss about the same topic and the utility name is ODrive.
-
-### What’s ODrive?
-
-ODrive stands for Open Drive. It’s a GUI client for Google Drive which was written in electron framework.
-
-It’s simple GUI which allow users to integrate the Google Drive with few steps.
-
-### How To Install & Setup ODrive on Linux?
-
-Since the developer is offering the AppImage package and there is no difficulty for installing the ODrive on Linux.
-
-Simple download the latest ODrive AppImage package from developer github page using **wget Command**.
-
-```
-$ wget https://github.com/liberodark/ODrive/releases/download/0.1.3/odrive-0.1.3-x86_64.AppImage
-```
-
-You have to set executable file permission to the ODrive AppImage file.
-
-```
-$ chmod +x odrive-0.1.3-x86_64.AppImage
-```
-
-Simple run the following ODrive AppImage file to launch the ODrive GUI for further setup.
-
-```
-$ ./odrive-0.1.3-x86_64.AppImage
-```
-
-You might get the same window like below when you ran the above command. Just hit the **`Next`** button for further setup.
-![][5]
-
-Click **`Connect`** link to add a Google drive account.
-![][6]
-
-Enter your email id which you want to setup a Google Drive account.
-![][7]
-
-Enter your password for the given email id.
-![][8]
-
-Allow ODrive (Open Drive) to access your Google account.
-![][9]
-
-By default, it will choose the folder location. You can change if you want to use the specific one.
-![][10]
-
-Finally hit **`Synchronize`** button to start download the files from Google Drive to your local system.
-![][11]
-
-Synchronizing is in progress.
-![][12]
-
-Once synchronizing is completed. It will show you all files downloaded.
-Once synchronizing is completed. It’s shows you that all the files has been downloaded.
-![][13]
-
-I have seen all the files were downloaded in the mentioned directory.
-![][14]
-
-If you want to sync any new files from local system to Google Drive. Just start the `ODrive` from the application menu but it won’t actual launch the application. But it will be running in the background that we can able to see by using the ps command.
-
-```
-$ ps -df | grep odrive
-```
-
-![][15]
-
-It will automatically sync once you add a new file into the google drive folder. The same has been checked through notification menu. Yes, i can see one file was synced to Google Drive.
-![][16]
-
-GUI is not loading after sync, and i’m not sure this functionality. I will check with developer and will add update based on his input.
-
---------------------------------------------------------------------------------
-
-via: https://www.2daygeek.com/odrive-open-drive-google-drive-gui-client-for-linux/
-
-作者:[Magesh Maruthamuthu][a]
-选题:[lujun9972][b]
-译者:[译者ID](https://github.com/译者ID)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]: https://www.2daygeek.com/author/magesh/
-[b]: https://github.com/lujun9972
-[1]: https://www.2daygeek.com/drivesync-google-drive-sync-client-for-linux/
-[2]: https://www.2daygeek.com/mount-access-google-drive-on-linux-with-google-drive-ocamlfuse-client/
-[3]: https://www.2daygeek.com/mount-access-setup-google-drive-in-linux/
-[4]: data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7
-[5]: https://www.2daygeek.com/wp-content/uploads/2019/01/odrive-open-drive-google-drive-gui-client-for-linux-1.png
-[6]: https://www.2daygeek.com/wp-content/uploads/2019/01/odrive-open-drive-google-drive-gui-client-for-linux-2.png
-[7]: https://www.2daygeek.com/wp-content/uploads/2019/01/odrive-open-drive-google-drive-gui-client-for-linux-3.png
-[8]: https://www.2daygeek.com/wp-content/uploads/2019/01/odrive-open-drive-google-drive-gui-client-for-linux-4.png
-[9]: https://www.2daygeek.com/wp-content/uploads/2019/01/odrive-open-drive-google-drive-gui-client-for-linux-5.png
-[10]: https://www.2daygeek.com/wp-content/uploads/2019/01/odrive-open-drive-google-drive-gui-client-for-linux-6.png
-[11]: https://www.2daygeek.com/wp-content/uploads/2019/01/odrive-open-drive-google-drive-gui-client-for-linux-7.png
-[12]: https://www.2daygeek.com/wp-content/uploads/2019/01/odrive-open-drive-google-drive-gui-client-for-linux-8a.png
-[13]: https://www.2daygeek.com/wp-content/uploads/2019/01/odrive-open-drive-google-drive-gui-client-for-linux-9.png
-[14]: https://www.2daygeek.com/wp-content/uploads/2019/01/odrive-open-drive-google-drive-gui-client-for-linux-11.png
-[15]: https://www.2daygeek.com/wp-content/uploads/2019/01/odrive-open-drive-google-drive-gui-client-for-linux-9b.png
-[16]: https://www.2daygeek.com/wp-content/uploads/2019/01/odrive-open-drive-google-drive-gui-client-for-linux-10.png
diff --git a/sources/tech/20190124 What does DevOps mean to you.md b/sources/tech/20190124 What does DevOps mean to you.md
deleted file mode 100644
index c62f0f83ba..0000000000
--- a/sources/tech/20190124 What does DevOps mean to you.md
+++ /dev/null
@@ -1,143 +0,0 @@
-[#]: collector: (lujun9972)
-[#]: translator: ( )
-[#]: reviewer: ( )
-[#]: publisher: ( )
-[#]: url: ( )
-[#]: subject: (What does DevOps mean to you?)
-[#]: via: (https://opensource.com/article/19/1/what-does-devops-mean-you)
-[#]: author: (Girish Managoli https://opensource.com/users/gammay)
-
-What does DevOps mean to you?
-======
-6 experts break down DevOps and the practices and philosophies key to making it work.
-
-
-
-It's said if you ask 10 people about DevOps, you will get 12 answers. This is a result of the diversity in opinions and expectations around DevOps—not to mention the disparity in its practices.
-
-To decipher the paradoxes around DevOps, we went to the people who know it the best—its top practitioners around the industry. These are people who have been around the horn, who know the ins and outs of technology, and who have practiced DevOps for years. Their viewpoints should encourage, stimulate, and provoke your thoughts around DevOps.
-
-### What does DevOps mean to you?
-
-Let's start with the fundamentals. We're not looking for textbook answers, rather we want to know what the experts say.
-
-In short, the experts say DevOps is about principles, practices, and tools.
-
-[Ann Marie Fred][1], DevOps lead for IBM Digital Business Group's Commerce Platform, says, "to me, DevOps is a set of principles and practices designed to make teams more effective in designing, developing, delivering, and operating software."
-
-According to [Daniel Oh][2], senior DevOps evangelist at Red Hat, "in general, DevOps is compelling for enterprises to evolve current IT-based processes and tools related to app development, IT operations, and security protocol."
-
-[Brent Reed][3], founder of Tactec Strategic Solutions, talks about continuous improvement for the stakeholders. "DevOps means to me a way of working that includes a mindset that allows for continuous improvement for operational performance, maturing to organizational performance, resulting in delighted stakeholders."
-
-Many of the experts also emphasize culture. Ann Marie says, "it's also about continuous improvement and learning. It's about people and culture as much as it is about tools and technology."
-
-To [Dan Barker][4], chief architect and DevOps leader at the National Association of Insurance Commissioners (NAIC), "DevOps is primarily about culture. … It has brought several independent areas together like lean, [just culture][5], and continuous learning. And I see culture as being the most critical and the hardest to execute on."
-
-[Chris Baynham-Hughes][6], head of DevOps at Atos, says, "[DevOps] practice is adopted through the evolution of culture, process, and tooling within an organization. The key focus is culture change, and the key tenants of DevOps culture are collaboration, experimentation, fast-feedback, and continuous improvement."
-
-[Geoff Purdy][7], cloud architect, talks about agility and feedback "shortening and amplifying feedback loops. We want teams to get feedback in minutes rather than weeks."
-
-But in the end, Daniel nails it by explaining how open source and open culture allow him to achieve his goals "in easy and quick ways. In DevOps initiatives, the most important thing for me should be open culture rather than useful tools, multiple solutions."
-
-### What DevOps practices have you found effective?
-
-"Picking one, automated provisioning has been hugely effective for my team. "
-
-The most effective practices cited by the experts are pervasive yet disparate.
-
-According to Ann Marie, "some of the most powerful [practices] are agile project management; breaking down silos between cross-functional, autonomous squads; fully automated continuous delivery; green/blue deploys for zero downtime; developers setting up their own monitoring and alerting; blameless post-mortems; automating security and compliance."
-
-Chris says, "particular breakthroughs have been empathetic collaboration; continuous improvement; open leadership; reducing distance to the business; shifting from vertical silos to horizontal, cross-functional product teams; work visualization; impact mapping; Mobius loop; shortening of feedback loops; automation (from environments to CI/CD)."
-
-Brent supports "evolving a learning culture that includes TDD [test-driven development] and BDD [behavior-driven development] capturing of a story and automating the sequences of events that move from design, build, and test through implementation and production with continuous integration and delivery pipelines. A fail-first approach to testing, the ability to automate integration and delivery processes and include fast feedback throughout the lifecycle."
-
-Geoff highlights automated provisioning. "Picking one, automated provisioning has been hugely effective for my team. More specifically, automated provisioning from a versioned Infrastructure-as-Code codebase."
-
-Dan uses fun. "We do a lot of different things to create a DevOps culture. We hold 'lunch and learns' with free food to encourage everyone to come and learn together; we buy books and study in groups."
-
-### How do you motivate your team to achieve DevOps goals?
-
-```
-"Celebrate wins and visualize the progress made."
-```
-
-Daniel emphasizes "automation that matters. In order to minimize objection from multiple teams in a DevOps initiative, you should encourage your team to increase the automation capability of development, testing, and IT operations along with new processes and procedures. For example, a Linux container is the key tool to achieve the automation capability of DevOps."
-
-Geoff agrees, saying, "automate the toil. Are there tasks you hate doing? Great. Engineer them out of existence if possible. Otherwise, automate them. It keeps the job from becoming boring and routine because the job constantly evolves."
-
-Dan, Ann Marie, and Brent stress team motivation.
-
-Dan says, "at the NAIC, we have a great awards system for encouraging specific behaviors. We have multiple tiers of awards, and two of them can be given to anyone by anyone. We also give awards to teams after they complete something significant, but we often award individual contributors."
-
-According to Ann Marie, "the biggest motivator for teams in my area is seeing the success of others. We have a weekly playback for each other, and part of that is sharing what we've learned from trying out new tools or practices. When teams are enthusiastic about something they're doing and willing to help others get started, more teams will quickly get on board."
-
-Brent agrees. "Getting everyone educated and on the same baseline of knowledge is essential ... assessing what helps the team achieve [and] what it needs to deliver with the product owner and users is the first place I like to start."
-
-Chris recommends a two-pronged approach. "Run small, weekly goals that are achievable and agreed by the team as being important and [where] they can see progress outside of the feature work they are doing. Celebrate wins and visualize the progress made."
-
-### How do DevOps and agile work together?
-
-```
-"DevOps != Agile, second Agile != Scrum."
-```
-
-This is an important question because both DevOps and agile are cornerstones of modern software development.
-
-DevOps is a process of software development focusing on communication and collaboration to facilitate rapid application and product deployment, whereas agile is a development methodology involving continuous development, continuous iteration, and continuous testing to achieve predictable and quality deliverables.
-
-So, how do they relate? Let's ask the experts.
-
-In Brent's view, "DevOps != Agile, second Agile != Scrum. … Agile tools and ways of working—that support DevOps strategies and goals—are how they mesh together."
-
-Chris says, "agile is a fundamental component of DevOps for me. Sure, we could talk about how we adopt DevOps culture in a non-agile environment, but ultimately, improving agility in the way software is engineered is a key indicator as to the maturity of DevOps adoption within the organization."
-
-Dan relates DevOps to the larger [Agile Manifesto][8]. "I never talk about agile without referencing the Agile Manifesto in order to set the baseline. There are many implementations that don't focus on the Manifesto. When you read the Manifesto, they've really described DevOps from a development perspective. Therefore, it is very easy to fit agile into a DevOps culture, as agile is focused on communication, collaboration, flexibility to change, and getting to production quickly."
-
-Geoff sees "DevOps as one of many implementations of agile. Agile is essentially a set of principles, while DevOps is a culture, process, and toolchain that embodies those principles."
-
-Ann Marie keeps it succinct, saying "agile is a prerequisite for DevOps. DevOps makes agile more effective."
-
-### Has DevOps benefited from open source?
-
-```
-"Open source done well requires a DevOps culture."
-```
-
-This question receives a fervent "yes" from all participants followed by an explanation of the benefits they've seen.
-
-Ann Marie says, "we get to stand on the shoulders of giants and build upon what's already available. The open source model of maintaining software, with pull requests and code reviews, also works very well for DevOps teams."
-
-Chris agrees that DevOps has "undoubtedly" benefited from open source. "From the engineering and tooling side (e.g., Ansible), to the process and people side, through the sharing of stories within the industry and the open leadership community."
-
-A benefit Geoff cites is "grassroots adoption. Nobody had to sign purchase requisitions for free (as in beer) software. Teams found tooling that met their needs, were free (as in freedom) to modify, [then] built on top of it, and contributed enhancements back to the larger community. Rinse, repeat."
-
-Open source has shown DevOps "better ways you can adopt new changes and overcome challenges, just like open source software developers are doing it," says Daniel.
-
-Brent concurs. "DevOps has benefited in many ways from open source. One way is the ability to use the tools to understand how they can help accelerate DevOps goals and strategies. Educating the development and operations folks on crucial things like automation, virtualization and containerization, auto-scaling, and many of the qualities that are difficult to achieve without introducing technology enablers that make DevOps easier."
-
-Dan notes the two-way, symbiotic relationship between DevOps and open source. "Open source done well requires a DevOps culture. Most open source projects have very open communication structures with very little obscurity. This has actually been a great learning opportunity for DevOps practitioners around what they might bring into their own organizations. Also, being able to use tools from a community that is similar to that of your own organization only encourages your own culture growth. I like to use GitLab as an example of this symbiotic relationship. When I bring [GitLab] into a company, we get a great tool, but what I'm really buying is their unique culture. That brings substantial value through our interactions with them and our ability to contribute back. Their tool also has a lot to offer for a DevOps organization, but their culture has inspired awe in the companies where I've introduced it."
-
-Now that our DevOps experts have weighed in, please share your thoughts on what DevOps means—as well as the other questions we posed—in the comments.
-
-
---------------------------------------------------------------------------------
-
-via: https://opensource.com/article/19/1/what-does-devops-mean-you
-
-作者:[Girish Managoli][a]
-选题:[lujun9972][b]
-译者:[译者ID](https://github.com/译者ID)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]: https://opensource.com/users/gammay
-[b]: https://github.com/lujun9972
-[1]: https://twitter.com/DukeAMO
-[2]: https://twitter.com/danieloh30?lang=en
-[3]: https://twitter.com/brentareed
-[4]: https://twitter.com/barkerd427
-[5]: https://psnet.ahrq.gov/resources/resource/1582
-[6]: https://twitter.com/onlychrisbh?lang=en
-[7]: https://twitter.com/geoff_purdy
-[8]: https://agilemanifesto.org/
diff --git a/sources/tech/20190125 PyGame Zero- Games without boilerplate.md b/sources/tech/20190125 PyGame Zero- Games without boilerplate.md
deleted file mode 100644
index f60c2b3407..0000000000
--- a/sources/tech/20190125 PyGame Zero- Games without boilerplate.md
+++ /dev/null
@@ -1,99 +0,0 @@
-[#]: collector: (lujun9972)
-[#]: translator: (xiqingongzi)
-[#]: reviewer: ( )
-[#]: publisher: ( )
-[#]: url: ( )
-[#]: subject: (PyGame Zero: Games without boilerplate)
-[#]: via: (https://opensource.com/article/19/1/pygame-zero)
-[#]: author: (Moshe Zadka https://opensource.com/users/moshez)
-
-PyGame Zero: Games without boilerplate
-======
-Say goodbye to boring boilerplate in your game development with PyGame Zero.
-
-
-Python is a good beginner programming language. And games are a good beginner project: they are visual, self-motivating, and fun to show off to friends and family. However, the most common library to write games in Python, [PyGame][1], can be frustrating for beginners because forgetting seemingly small details can easily lead to nothing rendering.
-
-Until people understand why all the parts are there, they treat many of them as "mindless boilerplate"—magic paragraphs that need to be copied and pasted into their program to make it work.
-
-[PyGame Zero][2] is intended to bridge that gap by putting a layer of abstraction over PyGame so it requires literally no boilerplate.
-
-When we say literally, we mean it.
-
-This is a valid PyGame Zero file:
-
-```
-# This comment is here for clarity reasons
-```
-
-We can run put it in a **game.py** file and run:
-
-```
-$ pgzrun game.py
-```
-
-This will show a window and run a game loop that can be shut down by closing the window or interrupting the program with **CTRL-C**.
-
-This will, sadly, be a boring game. Nothing happens.
-
-To make it slightly more interesting, we can draw a different background:
-
-```
-def draw():
- screen.fill((255, 0, 0))
-```
-
-This will make the background red instead of black. But it is still a boring game. Nothing is happening. We can make it slightly more interesting:
-
-```
-colors = [0, 0, 0]
-
-def draw():
- screen.fill(tuple(colors))
-
-def update():
- colors[0] = (colors[0] + 1) % 256
-```
-
-This will make a window that starts black, becomes brighter and brighter red, then goes back to black, over and over again.
-
-The **update** function updates parameters, while the **draw** function renders the game based on these parameters.
-
-However, there is no way for the player to interact with the game! Let's try something else:
-
-```
-colors = [0, 0, 0]
-
-def draw():
- screen.fill(tuple(colors))
-
-def update():
- colors[0] = (colors[0] + 1) % 256
-
-def on_key_down(key, mod, unicode):
- colors[1] = (colors[1] + 1) % 256
-```
-
-Now pressing keys on the keyboard will increase the "greenness."
-
-These comprise the three important parts of a game loop: respond to user input, update parameters, and re-render the screen.
-
-PyGame Zero offers much more, including functions for drawing sprites and playing sound clips.
-
-Try it out and see what type of game you can come up with!
-
---------------------------------------------------------------------------------
-
-via: https://opensource.com/article/19/1/pygame-zero
-
-作者:[Moshe Zadka][a]
-选题:[lujun9972][b]
-译者:[xiqingongzi](https://github.com/xiqingongzi)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]: https://opensource.com/users/moshez
-[b]: https://github.com/lujun9972
-[1]: https://www.pygame.org/news
-[2]: https://pygame-zero.readthedocs.io/en/stable/
diff --git a/sources/tech/20190125 Top 5 Linux Distributions for Development in 2019.md b/sources/tech/20190125 Top 5 Linux Distributions for Development in 2019.md
deleted file mode 100644
index b3e2de22ba..0000000000
--- a/sources/tech/20190125 Top 5 Linux Distributions for Development in 2019.md
+++ /dev/null
@@ -1,161 +0,0 @@
-[#]: collector: (lujun9972)
-[#]: translator: ( )
-[#]: reviewer: ( )
-[#]: publisher: ( )
-[#]: url: ( )
-[#]: subject: (Top 5 Linux Distributions for Development in 2019)
-[#]: via: (https://www.linux.com/blog/2019/1/top-5-linux-distributions-development-2019)
-[#]: author: (Jack Wallen https://www.linux.com/users/jlwallen)
-
-Top 5 Linux Distributions for Development in 2019
-======
-
-
-
-One of the most popular tasks undertaken on Linux is development. With good reason: Businesses rely on Linux. Without Linux, technology simply wouldn’t meet the demands of today’s ever-evolving world. Because of that, developers are constantly working to improve the environments with which they work. One way to manage such improvements is to have the right platform to start with. Thankfully, this is Linux, so you always have a plethora of choices.
-
-But sometimes, too many choices can be a problem in and of itself. Which distribution is right for your development needs? That, of course, depends on what you’re developing, but certain distributions that just make sense to use as a foundation for your task. I’ll highlight five distributions I consider the best for developers in 2019.
-
-### Ubuntu
-
-Let’s not mince words here. Although the Linux Mint faithful are an incredibly loyal group (with good reason, their distro of choice is fantastic), Ubuntu Linux gets the nod here. Why? Because, thanks to the likes of [AWS][1], Ubuntu is one of the most deployed server operating systems. That means developing on a Ubuntu desktop distribution makes for a much easier translation to Ubuntu Server. And because Ubuntu makes it incredibly easy to develop for, work with, and deploy containers, it makes perfect sense that you’d want to work with this platform. Couple that with Ubuntu’s inclusion of Snap Packages, and Canonical's operating system gets yet another boost in popularity.
-
-But it’s not just about what you can do with Ubuntu, it’s how easily you can do it. For nearly every task, Ubuntu is an incredibly easy distribution to use. And because Ubuntu is so popular, chances are every tool and IDE you want to work with can be easily installed from the Ubuntu Software GUI (Figure 1).
-
-![Ubuntu][3]
-
-Figure 1: Developer tools found in the Ubuntu Software tool.
-
-[Used with permission][4]
-
-If you’re looking for ease of use, simplicity of migration, and plenty of available tools, you cannot go wrong with Ubuntu as a development platform.
-
-### openSUSE
-
-There’s a very specific reason why I add openSUSE to this list. Not only is it an outstanding desktop distribution, it’s also one of the best rolling releases you’ll find on the market. So if you’re wanting to develop with and release for the most recent software available, [openSUSE Tumbleweed][5] should be one of your top choices. If you want to leverage the latest releases of your favorite IDEs, if you always want to make sure you’re developing with the most recent libraries and toolkits, Tumbleweed is your platform.
-
-But openSUSE doesn’t just offer a rolling release distribution. If you’d rather make use of a standard release platform, [openSUSE Leap][6] is what you want.
-
-Of course, it’s not just about standard or rolling releases. The openSUSE platform also has a Kubernetes-specific release, called [Kubic][7], which is based on Kubernetes atop openSUSE MicroOS. But even if you aren’t developing for Kubernetes, you’ll find plenty of software and tools to work with.
-
-And openSUSE also offers the ability to select your desktop environment, or (should you chose) a generic desktop or server (Figure 2).
-
-![openSUSE][9]
-
-Figure 2: The openSUSE Tumbleweed installation in action.
-
-[Used with permission][4]
-
-### Fedora
-
-Using Fedora as a development platform just makes sense. Why? The distribution itself seems geared toward developers. With a regular, six month release cycle, developers can be sure they won’t be working with out of date software for long. This can be important, when you need the most recent tools and libraries. And if you’re developing for enterprise-level businesses, Fedora makes for an ideal platform, as it is the upstream for Red Hat Enterprise Linux. What that means is the transition to RHEL should be painless. That’s important, especially if you hope to bring your project to a much larger market (one with deeper pockets than a desktop-centric target).
-
-Fedora also offers one of the best GNOME experiences you’ll come across (Figure 3). This translates to a very stable and fast desktops.
-
-![GNOME][11]
-
-Figure 3: The GNOME desktop on Fedora.
-
-[Used with permission][4]
-
-But if GNOME isn’t your jam, you can opt to install one of the [Fedora spins][12] (which includes KDE, XFCE, LXQT, Mate-Compiz, Cinnamon, LXDE, and SOAS).
-
-### Pop!_OS
-
-I’d be remiss if I didn’t include [System76][13]’s platform, customized specifically for their hardware (although it does work fine on other hardware). Why would I include such a distribution, especially one that doesn’t really venture far away from the Ubuntu platform for which is is based? Primarily because this is the distribution you want if you plan on purchasing a desktop or laptop from System76. But why would you do that (especially given that Linux works on nearly all off-the-shelf hardware)? Because System76 sells outstanding hardware. With the release of their Thelio desktop, you have available one of the most powerful desktop computers on the market. If you’re developing seriously large applications (especially ones that lean heavily on very large databases or require a lot of processing power for compilation), why not go for the best? And since Pop!_OS is perfectly tuned for System76 hardware, this is a no-brainer.
-Since Pop!_OS is based on Ubuntu, you’ll have all the tools available to the base platform at your fingertips (Figure 4).
-
-![Pop!_OS][15]
-
-Figure 4: The Anjunta IDE running on Pop!_OS.
-
-[Used with permission][4]
-
-Pop!_OS also defaults to encrypted drives, so you can trust your work will be safe from prying eyes (should your hardware fall into the wrong hands).
-
-### Manjaro
-
-For anyone that likes the idea of developing on Arch Linux, but doesn’t want to have to jump through all the hoops of installing and working with Arch Linux, there’s Manjaro. Manjaro makes it easy to have an Arch Linux-based distribution up and running (as easily as installing and using, say, Ubuntu).
-
-But what makes Manjaro developer-friendly (besides enjoying that Arch-y goodness at the base) is how many different flavors you’ll find available for download. From the [Manjaro download page][16], you can grab the following flavors:
-
- * GNOME
-
- * XFCE
-
- * KDE
-
- * OpenBox
-
- * Cinnamon
-
- * I3
-
- * Awesome
-
- * Budgie
-
- * Mate
-
- * Xfce Developer Preview
-
- * KDE Developer Preview
-
- * GNOME Developer Preview
-
- * Architect
-
- * Deepin
-
-
-
-
-Of note are the developer editions (which are geared toward testers and developers), the Architect edition (which is for users who want to build Manjaro from the ground up), and the Awesome edition (Figure 5 - which is for developers dealing with everyday tasks). The one caveat to using Manjaro is that, like any rolling release, the code you develop today may not work tomorrow. Because of this, you need to think with a certain level of agility. Of course, if you’re not developing for Manjaro (or Arch), and you’re doing more generic (or web) development, that will only affect you if the tools you use are updated and no longer work for you. Chances of that happening, however, are slim. And like with most Linux distributions, you’ll find a ton of developer tools available for Manjaro.
-
-![Manjaro][18]
-
-Figure 5: The Manjaro Awesome Edition is great for developers.
-
-[Used with permission][4]
-
-Manjaro also supports the Arch User Repository (a community-driven repository for Arch users), which includes cutting edge software and libraries, as well as proprietary applications like [Unity Editor][19] or yEd. A word of warning, however, about the Arch User Repository: It was discovered that the AUR contained software considered to be malicious. So, if you opt to work with that repository, do so carefully and at your own risk.
-
-### Any Linux Will Do
-
-Truth be told, if you’re a developer, just about any Linux distribution will work. This is especially true if you do most of your development from the command line. But if you prefer a good GUI running on top of a reliable desktop, give one of these distributions a try, they will not disappoint.
-
-Learn more about Linux through the free ["Introduction to Linux" ][20]course from The Linux Foundation and edX.
-
---------------------------------------------------------------------------------
-
-via: https://www.linux.com/blog/2019/1/top-5-linux-distributions-development-2019
-
-作者:[Jack Wallen][a]
-选题:[lujun9972][b]
-译者:[译者ID](https://github.com/译者ID)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]: https://www.linux.com/users/jlwallen
-[b]: https://github.com/lujun9972
-[1]: https://aws.amazon.com/
-[2]: https://www.linux.com/files/images/dev1jpg
-[3]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/dev_1.jpg?itok=7QJQWBKi (Ubuntu)
-[4]: https://www.linux.com/licenses/category/used-permission
-[5]: https://en.opensuse.org/Portal:Tumbleweed
-[6]: https://en.opensuse.org/Portal:Leap
-[7]: https://software.opensuse.org/distributions/tumbleweed
-[8]: /files/images/dev2jpg
-[9]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/dev_2.jpg?itok=1GJmpr1t (openSUSE)
-[10]: /files/images/dev3jpg
-[11]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/dev_3.jpg?itok=_6Ki4EOo (GNOME)
-[12]: https://spins.fedoraproject.org/
-[13]: https://system76.com/
-[14]: /files/images/dev4jpg
-[15]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/dev_4.jpg?itok=nNG2Ax24 (Pop!_OS)
-[16]: https://manjaro.org/download/
-[17]: /files/images/dev5jpg
-[18]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/dev_5.jpg?itok=RGfF2UEi (Manjaro)
-[19]: https://unity3d.com/unity/editor
-[20]: https://training.linuxfoundation.org/linux-courses/system-administration-training/introduction-to-linux
diff --git a/sources/tech/20190126 Get started with Tint2, an open source taskbar for Linux.md b/sources/tech/20190126 Get started with Tint2, an open source taskbar for Linux.md
deleted file mode 100644
index e8afdbb417..0000000000
--- a/sources/tech/20190126 Get started with Tint2, an open source taskbar for Linux.md
+++ /dev/null
@@ -1,59 +0,0 @@
-[#]: collector: (lujun9972)
-[#]: translator: (geekpi)
-[#]: reviewer: ( )
-[#]: publisher: ( )
-[#]: url: ( )
-[#]: subject: (Get started with Tint2, an open source taskbar for Linux)
-[#]: via: (https://opensource.com/article/19/1/productivity-tool-tint2)
-[#]: author: (Kevin Sonney https://opensource.com/users/ksonney (Kevin Sonney))
-
-Get started with Tint2, an open source taskbar for Linux
-======
-
-Tint2, the 14th in our series on open source tools that will make you more productive in 2019, offers a consistent user experience with any window manager.
-
-
-
-There seems to be a mad rush at the beginning of every year to find ways to be more productive. New Year's resolutions, the itch to start the year off right, and of course, an "out with the old, in with the new" attitude all contribute to this. And the usual round of recommendations is heavily biased towards closed source and proprietary software. It doesn't have to be that way.
-
-Here's the 14th of my picks for 19 new (or new-to-you) open source tools to help you be more productive in 2019.
-
-### Tint2
-
-One of the best ways for me to be more productive is to use a clean interface with as little distraction as possible. As a Linux user, this means using a minimal window manager like [Openbox][1], [i3][2], or [Awesome][3]. Each has customization options that make me more efficient. The one thing that slows me down is that none has a consistent configuration, so I have to tweak and re-tune my window manager constantly.
-
-
-
-[Tint2][4] is a lightweight panel and taskbar that provides a consistent experience with any window manager. It is included with most distributions, so it is as easy to install as any other package.
-
-It includes two programs, Tint2 and Tint2conf. At first launch, Tint2 starts with its default layout and theme. The default configuration includes multiple web browsers, the tint2conf program, a taskbar, and a system tray.
-
-
-
-Launching the configuration tool allows you to select from the included themes and customize the top, bottom, and sides of the screen. I recommend starting with the theme that is closest to what you want and customizing from there.
-
-
-
-Within the themes, you can customize where panel items are placed as well as background and font options for every item on the panel. You can also add and remove items from the launcher.
-
-
-
-Tint2 is a lightweight taskbar that helps you get to the tools you need quickly and efficiently. It is highly customizable, unobtrusive (unless the user wants it not to be), and compatible with almost any window manager on a Linux desktop.
-
---------------------------------------------------------------------------------
-
-via: https://opensource.com/article/19/1/productivity-tool-tint2
-
-作者:[Kevin Sonney][a]
-选题:[lujun9972][b]
-译者:[译者ID](https://github.com/译者ID)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]: https://opensource.com/users/ksonney (Kevin Sonney)
-[b]: https://github.com/lujun9972
-[1]: http://openbox.org/wiki/Main_Page
-[2]: https://i3wm.org/
-[3]: https://awesomewm.org/
-[4]: https://gitlab.com/o9000/tint2
diff --git a/sources/tech/20190127 Get started with eDEX-UI, a Tron-influenced terminal program for tablets and desktops.md b/sources/tech/20190127 Get started with eDEX-UI, a Tron-influenced terminal program for tablets and desktops.md
deleted file mode 100644
index 78f31a6b94..0000000000
--- a/sources/tech/20190127 Get started with eDEX-UI, a Tron-influenced terminal program for tablets and desktops.md
+++ /dev/null
@@ -1,55 +0,0 @@
-[#]: collector: (lujun9972)
-[#]: translator: (geekpi)
-[#]: reviewer: ( )
-[#]: publisher: ( )
-[#]: url: ( )
-[#]: subject: (Get started with eDEX-UI, a Tron-influenced terminal program for tablets and desktops)
-[#]: via: (https://opensource.com/article/19/1/productivity-tool-edex-ui)
-[#]: author: (Kevin Sonney https://opensource.com/users/ksonney (Kevin Sonney))
-
-Get started with eDEX-UI, a Tron-influenced terminal program for tablets and desktops
-======
-Make work more fun with eDEX-UI, the 15th in our series on open source tools that will make you more productive in 2019.
-
-
-There seems to be a mad rush at the beginning of every year to find ways to be more productive. New Year's resolutions, the itch to start the year off right, and of course, an "out with the old, in with the new" attitude all contribute to this. And the usual round of recommendations is heavily biased towards closed source and proprietary software. It doesn't have to be that way.
-
-Here's the 15th of my picks for 19 new (or new-to-you) open source tools to help you be more productive in 2019.
-
-### eDEX-UI
-
-I was 11 years old when [Tron][1] was in movie theaters. I cannot deny that, despite the fantastical nature of the film, it had an impact on my career choice later in life.
-
-
-
-[eDEX-UI][2] is a cross-platform terminal program designed for tablets and desktops that was inspired by the user interface in Tron. It has five terminals in a tabbed interface, so it is easy to switch between tasks, as well as useful displays of system information.
-
-At launch, eDEX-UI goes through a boot sequence with information about the ElectronJS system it is based on. After the boot, eDEX-UI shows system information, a file browser, a keyboard (for tablets), and the main terminal tab. The other four tabs (labeled EMPTY) don't have anything loaded and will start a shell when you click on one. The default shell in eDEX-UI is Bash (if you are on Windows, you will likely have to change it to either PowerShell or cmd.exe).
-
-
-
-Changing directories in the file browser will change directories in the active terminal and vice-versa. The file browser does everything you'd expect, including opening associated applications when you click on a file. The one exception is eDEX-UI's settings.json file (in .config/eDEX-UI by default), which opens the configuration editor instead. This allows you to set the shell command for the terminals, change the theme, and modify several other settings for the user interface. Themes are also stored in the configuration directory and, since they are also JSON files, creating a custom theme is pretty straightforward.
-
-
-
-eDEX-UI allows you to run five terminals with full emulation. The default terminal type is xterm-color, meaning it has full-color support. One thing to be aware of is that the keys light up on the keyboard while you type, so if you're using eDEX-UI on a tablet, the keyboard could present a security risk in environments where people can see the screen. It is better to use a theme without the keyboard on those devices, although it does look pretty cool when you are typing.
-
-
-
-While eDEX-UI supports only five terminal windows, that has been more than enough for me. On a tablet, eDEX-UI gives me that cyberspace feel without impacting my productivity. On a desktop, eDEX-UI allows all of that and lets me look cool in front of my co-workers.
-
---------------------------------------------------------------------------------
-
-via: https://opensource.com/article/19/1/productivity-tool-edex-ui
-
-作者:[Kevin Sonney][a]
-选题:[lujun9972][b]
-译者:[译者ID](https://github.com/译者ID)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]: https://opensource.com/users/ksonney (Kevin Sonney)
-[b]: https://github.com/lujun9972
-[1]: https://en.wikipedia.org/wiki/Tron
-[2]: https://github.com/GitSquared/edex-ui
diff --git a/sources/tech/20190128 3 simple and useful GNOME Shell extensions.md b/sources/tech/20190128 3 simple and useful GNOME Shell extensions.md
deleted file mode 100644
index c22feddf01..0000000000
--- a/sources/tech/20190128 3 simple and useful GNOME Shell extensions.md
+++ /dev/null
@@ -1,73 +0,0 @@
-[#]: collector: (lujun9972)
-[#]: translator: ( )
-[#]: reviewer: ( )
-[#]: publisher: ( )
-[#]: url: ( )
-[#]: subject: (3 simple and useful GNOME Shell extensions)
-[#]: via: (https://fedoramagazine.org/3-simple-and-useful-gnome-shell-extensions/)
-[#]: author: (Ryan Lerch https://fedoramagazine.org/introducing-flatpak/)
-
-3 simple and useful GNOME Shell extensions
-======
-
-
-
-The default desktop of Fedora Workstation — GNOME Shell — is known and loved by many users for its minimal, clutter-free user interface. It is also known for the ability to add to the stock interface using extensions. In this article, we cover 3 simple, and useful extensions for GNOME Shell. These three extensions provide a simple extra behaviour to your desktop; simple tasks that you might do every day.
-
-
-### Installing Extensions
-
-The quickest and easiest way to install GNOME Shell extensions is with the Software Application. Check out the previous post here on the Magazine for more details:
-
-
-
-### Removable Drive Menu
-
-![][1]
-Removable Drive Menu extension on Fedora 29
-
-First up is the [Removable Drive Menu][2] extension. It is a simple tool that adds a small widget in the system tray if you have a removable drive inserted into your computer. This allows you easy access to open Files for your removable drive, or quickly and easily eject the drive for safe removal of the device.
-
-![][3]
-Removable Drive Menu in the Software application
-
-### Extensions Extension.
-
-![][4]
-
-The [Extensions][5] extension is super useful if you are always installing and trying out new extensions. It provides a list of all the installed extensions, allowing you to enable or disable them. Additionally, if an extension has settings, it allows quick access to the settings dialog for each one.
-
-![][6]
-the Extensions extension in the Software application
-
-### Frippery Move Clock
-
-![][7]
-
-Finally, there is the simplest extension in the list. [Frippery Move Clock][8], simply moves the position of the clock from the center of the top bar to the right, next to the status area.
-
-![][9]
-
-
---------------------------------------------------------------------------------
-
-via: https://fedoramagazine.org/3-simple-and-useful-gnome-shell-extensions/
-
-作者:[Ryan Lerch][a]
-选题:[lujun9972][b]
-译者:[译者ID](https://github.com/译者ID)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]: https://fedoramagazine.org/introducing-flatpak/
-[b]: https://github.com/lujun9972
-[1]: https://fedoramagazine.org/wp-content/uploads/2019/01/removable-disk-1024x459.jpg
-[2]: https://extensions.gnome.org/extension/7/removable-drive-menu/
-[3]: https://fedoramagazine.org/wp-content/uploads/2019/01/removable-software-1024x723.png
-[4]: https://fedoramagazine.org/wp-content/uploads/2019/01/extensions-extension-1024x459.jpg
-[5]: https://extensions.gnome.org/extension/1036/extensions/
-[6]: https://fedoramagazine.org/wp-content/uploads/2019/01/extensions-software-1024x723.png
-[7]: https://fedoramagazine.org/wp-content/uploads/2019/01/move_clock-1024x189.jpg
-[8]: https://extensions.gnome.org/extension/2/move-clock/
-[9]: https://fedoramagazine.org/wp-content/uploads/2019/01/Screenshot-from-2019-01-28-21-53-18-1024x723.png
diff --git a/sources/tech/20190128 Top Hex Editors for Linux.md b/sources/tech/20190128 Top Hex Editors for Linux.md
deleted file mode 100644
index 5cd47704b4..0000000000
--- a/sources/tech/20190128 Top Hex Editors for Linux.md
+++ /dev/null
@@ -1,146 +0,0 @@
-[#]: collector: (lujun9972)
-[#]: translator: ( )
-[#]: reviewer: ( )
-[#]: publisher: ( )
-[#]: url: ( )
-[#]: subject: (Top Hex Editors for Linux)
-[#]: via: (https://itsfoss.com/hex-editors-linux)
-[#]: author: (Ankush Das https://itsfoss.com/author/ankush/)
-
-Top Hex Editors for Linux
-======
-
-Hex editor lets you view/edit the binary data of a file – which is in the form of “hexadecimal” values and hence the name “Hex” editor. Let’s be frank, not everyone needs it. Only a specific group of users who have to deal with the binary data use it.
-
-If you have no idea, what it is, let me give you an example. Suppose, you have the configuration files of a game, you can open them using a hex editor and change certain values to have more ammo/score and so on. To know more about Hex editors, you should start with the [Wikipedia page][1].
-
-In case you already know what’s it used for – let us take a look at the best Hex editors available for Linux.
-
-### 5 Best Hex Editors Available
-
-![Best Hex Editors for Linux][2]
-
-**Note:** The hex editors mentioned are in no particular order of ranking.
-
-#### 1\. Bless Hex Editor
-
-![bless hex editor][3]
-
-**Key Features** :
-
- * Raw disk editing
- * Multilevel undo/redo operations.
- * Multiple tabs
- * Conversion table
- * Plugin support to extend the functionality
-
-
-
-Bless is one of the most popular Hex editor available for Linux. You can find it listed in your AppCenter or Software Center. If that is not the case, you can check out their [GitHub page][4] for the build and the instructions associated.
-
-It can easily handle editing big files without slowing down – so it’s a fast hex editor.
-
-#### 2\. GNOME Hex Editor
-
-![gnome hex editor][5]
-
-**Key Features:**
-
- * View/Edit in either Hex/Ascii
-
- * Edit large files
-
- *
-
-
-Yet another amazing Hex editor – specifically tailored for GNOME. Well, I personally use Elementary OS, so I find it listed in the App Center. You should find it in the Software Center as well. If not, refer to the [GitHub page][6] for the source.
-
-You can use this editor to view/edit in either hex or ASCII. The user interface is quite simple – as you can see in the image above.
-
-#### 3\. Okteta
-
-![okteta][7]
-
-**Key Features:**
-
- * Customizable data views
- * Multiple tabs
- * Character encodings: All 8-bit encodings as supplied by Qt, EBCDIC
- * Decoding table listing common simple data types.
-
-
-
-Okteta is a simple hex editor with not so fancy features. Although it can handle most of the tasks. There’s a separate module of it which you can use to embed this in other programs to view/edit files.
-
-Similar to all the above-mentioned editors, you can find this listed on your AppCenter and Software center as well.
-
-#### 4\. wxHexEditor
-
-![wxhexeditor][8]
-
-**Key Features:**
-
- * Easily handle big files
- * Has x86 disassembly support
- * **** Sector Indication **** on Disk devices
- * Supports customizable hex panel formatting and colors.
-
-
-
-This is something interesting. It is primarily a Hex editor but you can also use it as a low level disk editor. For example, if you have a problem with your HDD, you can use this editor to edit the the sectors in raw hex and fix it.
-
-You can find it listed on your App Center and Software Center. If not, [Sourceforge][9] is the way to go.
-
-#### 5\. Hexedit (Command Line)
-
-![hexedit][10]
-
-**Key Features** :
-
- * Works via terminal
- * It’s fast and simple
-
-
-
-If you want something to work on your terminal, you can go ahead and install Hexedit via the console. It’s my favorite Linux hex editor in command line.
-
-When you launch it, you will have to specify the location of the file, and it’ll then open it for you.
-
-To install it, just type in:
-
-```
-sudo apt install hexedit
-```
-
-### Wrapping Up
-
-Hex editors could come in handy to experiment and learn. If you are someone experienced, you should opt for the one with more feature – with a GUI. Although, it all comes down to personal preferences.
-
-What do you think about the usefulness of Hex editors? Which one do you use? Did we miss listing your favorite? Let us know in the comments!
-
-![][11]
-
---------------------------------------------------------------------------------
-
-via: https://itsfoss.com/hex-editors-linux
-
-作者:[Ankush Das][a]
-选题:[lujun9972][b]
-译者:[译者ID](https://github.com/译者ID)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]: https://itsfoss.com/author/ankush/
-[b]: https://github.com/lujun9972
-[1]: https://en.wikipedia.org/wiki/Hex_editor
-[2]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/01/Linux-hex-editors-800x450.jpeg?resize=800%2C450&ssl=1
-[3]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/01/bless-hex-editor.jpg?ssl=1
-[4]: https://github.com/bwrsandman/Bless
-[5]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/01/ghex-hex-editor.jpg?ssl=1
-[6]: https://github.com/GNOME/ghex
-[7]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/01/okteta-hex-editor-800x466.jpg?resize=800%2C466&ssl=1
-[8]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/01/wxhexeditor.jpg?ssl=1
-[9]: https://sourceforge.net/projects/wxhexeditor/
-[10]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/01/hexedit-console.jpg?resize=800%2C566&ssl=1
-[11]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/01/Linux-hex-editors.jpeg?fit=800%2C450&ssl=1
diff --git a/sources/tech/20190128 fdisk - Easy Way To Manage Disk Partitions In Linux.md b/sources/tech/20190128 fdisk - Easy Way To Manage Disk Partitions In Linux.md
deleted file mode 100644
index cc89e8c7f1..0000000000
--- a/sources/tech/20190128 fdisk - Easy Way To Manage Disk Partitions In Linux.md
+++ /dev/null
@@ -1,524 +0,0 @@
-[#]: collector: (lujun9972)
-[#]: translator: ( )
-[#]: reviewer: ( )
-[#]: publisher: ( )
-[#]: url: ( )
-[#]: subject: (fdisk – Easy Way To Manage Disk Partitions In Linux)
-[#]: via: (https://www.2daygeek.com/linux-fdisk-command-to-manage-disk-partitions/)
-[#]: author: (Magesh Maruthamuthu https://www.2daygeek.com/author/magesh/)
-
-fdisk – Easy Way To Manage Disk Partitions In Linux
-======
-
-Hard disks can be divided into one or more logical disks called partitions.
-
-This division is described in the partition table (MBR or GPT) found in sector 0 of the disk.
-
-Linux needs at least one partition, namely for its root file system and we can’t install Linux OS without partitions.
-
-Once created, a partition must be formatted with an appropriate file system before files can be written to it.
-
-To do so, we need some utility to perform this in Linux.
-
-There are many utilities are available for that in Linux. We had written about **[Parted Command][1]** in the past and today we are going to discuss about fdisk.
-
-fdisk command is one of the the best tool to manage disk partitions in Linux.
-
-It supports maximum `2 TB`, and everyone prefer to go with fdisk.
-
-This tool is used by vast of Linux admin because we don’t use more than 2TB now a days due to LVM and SAN. It’s used in most of the infra structure around the world.
-
-Still if you want to create a large partitions, like more than 2TB then you have to go either **Parted Command** or **cfdisk Command**.
-
-Disk partition and file system creations is one of the routine task for Linux admin.
-
-If you are working on vast environment then you have to perform this task multiple times in a day.
-
-### How Linux Kernel Understand Hard Disks?
-
-As a human we can easily understand things but computer needs the proper naming conversion to understand each and everything.
-
-In Linux, devices are located on `/dev` partition and Kernel understand the hard disk in the following format.
-
- * **`/dev/hdX[a-z]:`** IDE Disk is named hdX in Linux
- * **`/dev/sdX[a-z]:`** SCSI Disk is named sdX in Linux
- * **`/dev/xdX[a-z]:`** XT Disk is named sdX in Linux
- * **`/dev/vdX[a-z]:`** Virtual Hard Disk is named vdX in Linux
- * **`/dev/fdN:`** Floppy Drive is named fdN in Linux
- * **`/dev/scdN or /dev/srN:`** CD-ROM is named /dev/scdN or /dev/srN in Linux
-
-
-
-### What Is fdisk Command?
-
-fdisk stands for fixed disk or format disk is a cli utility that allow users to perform following actions on disks. It allows us to view, create, resize, delete, move and copy the partitions.
-
-It understands MBR, Sun, SGI and BSD partition tables and it doesn’t understand GUID Partition Table (GPT) and it is not designed for large partitions.
-
-fdisk allows us to create a maximum of four primary partitions per disk. One of these may be an extended partition and it holds multiple logical partitions.
-
-1-4 is reserved for four primary partitions and Logical partitions start numbering from 5.
-![][3]
-
-### How To Install fdisk On Linux
-
-You don’t need to install fdisk in Linux system because it has installed by default as part of core utility.
-
-### How To List Available Disks Using fdisk Command
-
-First we have to know what are the disks were added in the system before performing any action. To list all available disks on your system run the following command.
-
-It lists possible information about the disks such as disk name, how many partitions are created in it, Disk Size, Disklabel type, Disk Identifier, Partition ID and Partition Type.
-
-```
-$ sudo fdisk -l
-Disk /dev/sda: 30 GiB, 32212254720 bytes, 62914560 sectors
-Units: sectors of 1 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated 512 = 512 bytes
-Sector size (logical/physical): 512 bytes / 512 bytes
-I/O size (minimum/optimal): 512 bytes / 512 bytes
-Disklabel type: dos
-Disk identifier: 0xeab59449
-
-Device Boot Start End Sectors Size Id Type
-/dev/sda1 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated 20973568 62914559 41940992 20G 83 Linux
-
-
-Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 sectors
-Units: sectors of 1 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated 512 = 512 bytes
-Sector size (logical/physical): 512 bytes / 512 bytes
-I/O size (minimum/optimal): 512 bytes / 512 bytes
-
-
-Disk /dev/sdc: 10 GiB, 10737418240 bytes, 20971520 sectors
-Units: sectors of 1 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated 512 = 512 bytes
-Sector size (logical/physical): 512 bytes / 512 bytes
-I/O size (minimum/optimal): 512 bytes / 512 bytes
-
-
-Disk /dev/sdd: 10 GiB, 10737418240 bytes, 20971520 sectors
-Units: sectors of 1 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated 512 = 512 bytes
-Sector size (logical/physical): 512 bytes / 512 bytes
-I/O size (minimum/optimal): 512 bytes / 512 bytes
-
-
-Disk /dev/sde: 10 GiB, 10737418240 bytes, 20971520 sectors
-Units: sectors of 1 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated 512 = 512 bytes
-Sector size (logical/physical): 512 bytes / 512 bytes
-I/O size (minimum/optimal): 512 bytes / 512 bytes
-```
-
-### How To List A Specific Disk Partitions Using fdisk Command
-
-If you would like to see a specific disk and it’s partitions, use the following format.
-
-```
-$ sudo fdisk -l /dev/sda
-Disk /dev/sda: 30 GiB, 32212254720 bytes, 62914560 sectors
-Units: sectors of 1 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated 512 = 512 bytes
-Sector size (logical/physical): 512 bytes / 512 bytes
-I/O size (minimum/optimal): 512 bytes / 512 bytes
-Disklabel type: dos
-Disk identifier: 0xeab59449
-
-Device Boot Start End Sectors Size Id Type
-/dev/sda1 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated 20973568 62914559 41940992 20G 83 Linux
-```
-
-### How To List Available Actions For fdisk Command
-
-When you hit `m` in the fdisk command that will show you available actions for fdisk command.
-
-```
-$ sudo fdisk /dev/sdc
-
-Welcome to fdisk (util-linux 2.30.1).
-Changes will remain in memory only, until you decide to write them.
-Be careful before using the write command.
-
-Device does not contain a recognized partition table.
-Created a new DOS disklabel with disk identifier 0xe944b373.
-
-Command (m for help): m
-
-Help:
-
- DOS (MBR)
- a toggle a bootable flag
- b edit nested BSD disklabel
- c toggle the dos compatibility flag
-
- Generic
- d delete a partition
- F list free unpartitioned space
- l list known partition types
- n add a new partition
- p print the partition table
- t change a partition type
- v verify the partition table
- i print information about a partition
-
- Misc
- m print this menu
- u change display/entry units
- x extra functionality (experts only)
-
- Script
- I load disk layout from sfdisk script file
- O dump disk layout to sfdisk script file
-
- Save & Exit
- w write table to disk and exit
- q quit without saving changes
-
- Create a new label
- g create a new empty GPT partition table
- G create a new empty SGI (IRIX) partition table
- o create a new empty DOS partition table
- s create a new empty Sun partition table
-```
-
-### How To List Partitions Types Using fdisk Command
-
-When you hit `l` in the fdisk command that will show you an available partitions type for fdisk command.
-
-```
-$ sudo fdisk /dev/sdc
-
-Welcome to fdisk (util-linux 2.30.1).
-Changes will remain in memory only, until you decide to write them.
-Be careful before using the write command.
-
-Device does not contain a recognized partition table.
-Created a new DOS disklabel with disk identifier 0x9ffd00db.
-
-Command (m for help): l
-
- 0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris
- 1 FAT12 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT-
- 2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-
- 3 XENIX usr 3c PartitionMagic 84 OS/2 hidden or c6 DRDOS/sec (FAT-
- 4 FAT16 <32M 40 Venix 80286 85 Linux extended c7 Syrinx
- 5 Extended 41 PPC PReP Boot 86 NTFS volume set da Non-FS data
- 6 FAT16 42 SFS 87 NTFS volume set db CP/M / CTOS / .
- 7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux plaintext de Dell Utility
- 8 AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt
- 9 AIX bootable 4f QNX4.x 3rd part 93 Amoeba e1 DOS access
- a OS/2 Boot Manag 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O
- b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
- c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad hi ea Rufus alignment
- e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD eb BeOS fs
- f W95 Ext'd (LBA) 54 OnTrackDM6 a6 OpenBSD ee GPT
-10 OPUS 55 EZ-Drive a7 NeXTSTEP ef EFI (FAT-12/16/
-11 Hidden FAT12 56 Golden Bow a8 Darwin UFS f0 Linux/PA-RISC b
-12 Compaq diagnost 5c Priam Edisk a9 NetBSD f1 SpeedStor
-14 Hidden FAT16 <3 61 SpeedStor ab Darwin boot f4 SpeedStor
-16 Hidden FAT16 63 GNU HURD or Sys af HFS / HFS+ f2 DOS secondary
-17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fb VMware VMFS
-18 AST SmartSleep 65 Novell Netware b8 BSDI swap fc VMware VMKCORE
-1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fd Linux raid auto
-1c Hidden W95 FAT3 75 PC/IX bc Acronis FAT32 L fe LANstep
-1e Hidden W95 FAT1 80 Old Minix be Solaris boot ff BBT
-```
-
-### How To Create A Disk Partition Using fdisk Command
-
-If you would like to create a new partition use the following steps. In my case, i'm going to create 4 partitions (3 Primary and 1 Extended) on `/dev/sdc` disk. To the same for other partitions too.
-
-As this takes value from partition table so, hit `Enter` for first sector. Enter the size which you want to set for the partition (We can add a partition size using KB,MB,G and TB) for last sector.
-
-For example, if you would like to add 1GB partition then the last sector value should be `+1G`. Once you have created 3 partitions, it will automatically change the partition type to extended as a default. If you still want to create a fourth primary partitions then hit `p` instead of default value `e`.
-
-```
-$ sudo fdisk /dev/sdc
-
-Welcome to fdisk (util-linux 2.30.1).
-Changes will remain in memory only, until you decide to write them.
-Be careful before using the write command.
-
-
-Command (m for help): n
-Partition type
- p primary (0 primary, 0 extended, 4 free)
- e extended (container for logical partitions)
-Select (default p): Enter
-
-Using default response p.
-Partition number (1-4, default 1): Enter
-First sector (2048-20971519, default 2048): Enter
-Last sector, +sectors or +size{K,M,G,T,P} (2048-20971519, default 20971519): +1G
-
-Created a new partition 1 of type 'Linux' and of size 1 GiB.
-
-Command (m for help): p
-Disk /dev/sdc: 10 GiB, 10737418240 bytes, 20971520 sectors
-Units: sectors of 1 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated 512 = 512 bytes
-Sector size (logical/physical): 512 bytes / 512 bytes
-I/O size (minimum/optimal): 512 bytes / 512 bytes
-Disklabel type: dos
-Disk identifier: 0x8cc8f9e5
-
-Device Boot Start End Sectors Size Id Type
-/dev/sdc1 2048 2099199 2097152 1G 83 Linux
-
-Command (m for help): w
-The partition table has been altered.
-Calling ioctl() to re-read partition table.
-Syncing disks.
-```
-
-### How To Create A Extended Disk Partition Using fdisk Command
-
-Make a note, you have to use remaining all space when you create a extended partition because again you can able to create multiple logical partition in that.
-
-```
-$ sudo fdisk /dev/sdc
-
-Welcome to fdisk (util-linux 2.30.1).
-Changes will remain in memory only, until you decide to write them.
-Be careful before using the write command.
-
-
-Command (m for help): n
-Partition type
- p primary (3 primary, 0 extended, 1 free)
- e extended (container for logical partitions)
-Select (default e): Enter
-
-Using default response e.
-Selected partition 4
-First sector (6293504-20971519, default 6293504): Enter
-Last sector, +sectors or +size{K,M,G,T,P} (6293504-20971519, default 20971519): Enter
-
-Created a new partition 4 of type 'Extended' and of size 7 GiB.
-
-Command (m for help): p
-Disk /dev/sdc: 10 GiB, 10737418240 bytes, 20971520 sectors
-Units: sectors of 1 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated 512 = 512 bytes
-Sector size (logical/physical): 512 bytes / 512 bytes
-I/O size (minimum/optimal): 512 bytes / 512 bytes
-Disklabel type: dos
-Disk identifier: 0x8cc8f9e5
-
-Device Boot Start End Sectors Size Id Type
-/dev/sdc1 2048 2099199 2097152 1G 83 Linux
-/dev/sdc2 2099200 4196351 2097152 1G 83 Linux
-/dev/sdc3 4196352 6293503 2097152 1G 83 Linux
-/dev/sdc4 6293504 20971519 14678016 7G 5 Extended
-
-Command (m for help): w
-The partition table has been altered.
-Calling ioctl() to re-read partition table.
-Syncing disks.
-```
-
-### How To View Unpartitioned Disk Space Using fdisk Command
-
-As described in the above section, we have totally created 4 partitions (3 Primary and 1 Extended). Extended partition disk space will show unpartitioned until you create a logical partitions in that.
-
-Use the following command to view the unpartitioned space for a disk. As per the below output we have `7GB` unpartitioned disk.
-
-```
-$ sudo fdisk /dev/sdc
-
-Welcome to fdisk (util-linux 2.30.1).
-Changes will remain in memory only, until you decide to write them.
-Be careful before using the write command.
-
-
-Command (m for help): F
-Unpartitioned space /dev/sdc: 7 GiB, 7515144192 bytes, 14678016 sectors
-Units: sectors of 1 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated 512 = 512 bytes
-Sector size (logical/physical): 512 bytes / 512 bytes
-
- Start End Sectors Size
-6293504 20971519 14678016 7G
-
-Command (m for help): q
-```
-
-### How To Create A Logical Partition Using fdisk Command
-
-Follow the same above procedure to create a logical partition once you have created the extended partition.
-Here, i have created `1GB` of logical partition called `/dev/sdc5`, you can double confirm this by checking the partition table value.
-
-```
-$ sudo fdisk /dev/sdc
-
-Welcome to fdisk (util-linux 2.30.1).
-Changes will remain in memory only, until you decide to write them.
-Be careful before using the write command.
-
-Command (m for help): n
-All primary partitions are in use.
-Adding logical partition 5
-First sector (6295552-20971519, default 6295552): Enter
-Last sector, +sectors or +size{K,M,G,T,P} (6295552-20971519, default 20971519): +1G
-
-Created a new partition 5 of type 'Linux' and of size 1 GiB.
-
-Command (m for help): p
-Disk /dev/sdc: 10 GiB, 10737418240 bytes, 20971520 sectors
-Units: sectors of 1 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated 512 = 512 bytes
-Sector size (logical/physical): 512 bytes / 512 bytes
-I/O size (minimum/optimal): 512 bytes / 512 bytes
-Disklabel type: dos
-Disk identifier: 0x8cc8f9e5
-
-Device Boot Start End Sectors Size Id Type
-/dev/sdc1 2048 2099199 2097152 1G 83 Linux
-/dev/sdc2 2099200 4196351 2097152 1G 83 Linux
-/dev/sdc3 4196352 6293503 2097152 1G 83 Linux
-/dev/sdc4 6293504 20971519 14678016 7G 5 Extended
-/dev/sdc5 6295552 8392703 2097152 1G 83 Linux
-
-Command (m for help): w
-The partition table has been altered.
-Calling ioctl() to re-read partition table.
-Syncing disks.
-```
-
-### How To Delete A Partition Using fdisk Command
-
-If the partition is no more used in the system than we can remove it by using the below steps.
-
-Make sure you have to enter the correct partition number to delete it. In this case, i'm going to remove `/dev/sdc2` partition.
-
-```
-$ sudo fdisk /dev/sdc
-
-Welcome to fdisk (util-linux 2.30.1).
-Changes will remain in memory only, until you decide to write them.
-Be careful before using the write command.
-
-
-Command (m for help): d
-Partition number (1-5, default 5): 2
-
-Partition 2 has been deleted.
-
-Command (m for help): p
-Disk /dev/sdc: 10 GiB, 10737418240 bytes, 20971520 sectors
-Units: sectors of 1 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated 512 = 512 bytes
-Sector size (logical/physical): 512 bytes / 512 bytes
-I/O size (minimum/optimal): 512 bytes / 512 bytes
-Disklabel type: dos
-Disk identifier: 0x8cc8f9e5
-
-Device Boot Start End Sectors Size Id Type
-/dev/sdc1 2048 2099199 2097152 1G 83 Linux
-/dev/sdc3 4196352 6293503 2097152 1G 83 Linux
-/dev/sdc4 6293504 20971519 14678016 7G 5 Extended
-/dev/sdc5 6295552 8392703 2097152 1G 83 Linux
-
-Command (m for help): w
-The partition table has been altered.
-Calling ioctl() to re-read partition table.
-Syncing disks.
-```
-
-### How To Format A Partition Or Create A FileSystem On The Partition
-
-In computing, a file system or filesystem controls how data is stored and retrieved through inode tables.
-
-Without a file system, the system can't find where the information is stored on the partition. Filesystem can be created in three ways. Here, i'm going to create a filesystem on `/dev/sdc1` partition.
-
-```
-$ sudo mkfs.ext4 /dev/sdc1
-or
-$ sudo mkfs -t ext4 /dev/sdc1
-or
-$ sudo mke2fs /dev/sdc1
-
-mke2fs 1.43.5 (04-Aug-2017)
-Creating filesystem with 262144 4k blocks and 65536 inodes
-Filesystem UUID: c0a99b51-2b61-4f6a-b960-eb60915faab0
-Superblock backups stored on blocks:
- 32768, 98304, 163840, 229376
-
-Allocating group tables: done
-Writing inode tables: done
-Creating journal (8192 blocks): done
-Writing superblocks and filesystem accounting information: done
-```
-
-When you creating a filesystem on tha partition that will create the following important things on it.
-
- * **`Filesystem UUID:`** UUID stands for Universally Unique Identifier, UUIDs are used to identify block devices in Linux. It's 128 bit long numbers represented by 32 hexadecimal digits.
- * **`Superblock:`** Superblock stores metadata of the file system. If the superblock of a file system is corrupted, then the filesystem cannot be mounted and thus files cannot be accessed.
- * **`Inode:`** An inode is a data structure on a filesystem on a Unix-like operating system that stores all the information about a file except its name and its actual data.
- * **`Journal:`** A journaling filesystem is a filesystem that maintains a special file called a journal that is used to repair any inconsistencies that occur as the result of an improper shutdown of a computer.
-
-
-
-### How To Mount A Partition In Linux
-
-Once you have created the partition and filesystem then we need to mount the partition to use.
-
-To do so, we need to create a mountpoint to mount the partition. Use mkdir command to create a mountpoint.
-
-```
-$ sudo mkdir -p /mnt/2g-new
-```
-
-For temporary mount, use the following command. You will be lose this mountpoint after rebooting your system.
-
-```
-$ sudo mount /dev/sdc1 /mnt/2g-new
-```
-
-For permanent mount, add the partition details in the fstab file. It can be done in two ways either adding device name or UUID value.
-
-Permanent mount using Device Name:
-
-```
-# vi /etc/fstab
-
-/dev/sdc1 /mnt/2g-new ext4 defaults 0 0
-```
-
-Permanent mount using UUID Value. To get a UUID of the partition use blkid command.
-
-```
-$ sudo blkid
-/dev/sdc1: UUID="d17e3c31-e2c9-4f11-809c-94a549bc43b7" TYPE="ext2" PARTUUID="8cc8f9e5-01"
-/dev/sda1: UUID="d92fa769-e00f-4fd7-b6ed-ecf7224af7fa" TYPE="ext4" PARTUUID="eab59449-01"
-/dev/sdc3: UUID="ca307aa4-0866-49b1-8184-004025789e63" TYPE="ext4" PARTUUID="8cc8f9e5-03"
-/dev/sdc5: PARTUUID="8cc8f9e5-05"
-
-# vi /etc/fstab
-
-UUID=d17e3c31-e2c9-4f11-809c-94a549bc43b7 /mnt/2g-new ext4 defaults 0 0
-```
-
-The same has been verified using df Command.
-
-```
-$ df -h
-Filesystem Size Used Avail Use% Mounted on
-udev 969M 0 969M 0% /dev
-tmpfs 200M 7.0M 193M 4% /run
-/dev/sda1 20G 16G 3.0G 85% /
-tmpfs 997M 0 997M 0% /dev/shm
-tmpfs 5.0M 4.0K 5.0M 1% /run/lock
-tmpfs 997M 0 997M 0% /sys/fs/cgroup
-tmpfs 200M 28K 200M 1% /run/user/121
-tmpfs 200M 25M 176M 13% /run/user/1000
-/dev/sdc1 1008M 1.3M 956M 1% /mnt/2g-new
-```
-
---------------------------------------------------------------------------------
-
-via: https://www.2daygeek.com/linux-fdisk-command-to-manage-disk-partitions/
-
-作者:[Magesh Maruthamuthu][a]
-选题:[lujun9972][b]
-译者:[译者ID](https://github.com/译者ID)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]: https://www.2daygeek.com/author/magesh/
-[b]: https://github.com/lujun9972
-[1]: https://www.2daygeek.com/how-to-manage-disk-partitions-using-parted-command/
-[2]: data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7
-[3]: https://www.2daygeek.com/wp-content/uploads/2019/01/linux-fdisk-command-to-manage-disk-partitions-1a.png
diff --git a/sources/tech/20190129 7 Methods To Identify Disk Partition-FileSystem UUID On Linux.md b/sources/tech/20190129 7 Methods To Identify Disk Partition-FileSystem UUID On Linux.md
deleted file mode 100644
index 366e75846d..0000000000
--- a/sources/tech/20190129 7 Methods To Identify Disk Partition-FileSystem UUID On Linux.md
+++ /dev/null
@@ -1,159 +0,0 @@
-[#]: collector: (lujun9972)
-[#]: translator: ( )
-[#]: reviewer: ( )
-[#]: publisher: ( )
-[#]: url: ( )
-[#]: subject: (7 Methods To Identify Disk Partition/FileSystem UUID On Linux)
-[#]: via: (https://www.2daygeek.com/check-partitions-uuid-filesystem-uuid-universally-unique-identifier-linux/)
-[#]: author: (Magesh Maruthamuthu https://www.2daygeek.com/author/magesh/)
-
-7 Methods To Identify Disk Partition/FileSystem UUID On Linux
-======
-
-As a Linux administrator you should aware of that how do you check partition UUID or filesystem UUID.
-
-Because most of the Linux systems are mount the partitions with UUID. The same has been verified in the `/etc/fstab` file.
-
-There are many utilities are available to check UUID. In this article we will show you how to check UUID in many ways and you can choose the one which is suitable for you.
-
-### What Is UUID?
-
-UUID stands for Universally Unique Identifier which helps Linux system to identify a hard drives partition instead of block device file.
-
-libuuid is part of the util-linux-ng package since kernel version 2.15.1 and it’s installed by default in Linux system.
-
-The UUIDs generated by this library can be reasonably expected to be unique within a system, and unique across all systems.
-
-It’s a 128 bit number used to identify information in computer systems. UUIDs were originally used in the Apollo Network Computing System (NCS) and later UUIDs are standardized by the Open Software Foundation (OSF) as part of the Distributed Computing Environment (DCE).
-
-UUIDs are represented as 32 hexadecimal (base 16) digits, displayed in five groups separated by hyphens, in the form 8-4-4-4-12 for a total of 36 characters (32 alphanumeric characters and four hyphens).
-
-For example: d92fa769-e00f-4fd7-b6ed-ecf7224af7fa
-
-Sample of my /etc/fstab file.
-
-```
-# 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
-```
-
-We can check this using the following seven commands.
-
- * **`blkid Command:`** locate/print block device attributes.
- * **`lsblk Command:`** lsblk lists information about all available or the specified block devices.
- * **`hwinfo Command:`** hwinfo stands for hardware information tool is another great utility that used to probe for the hardware present in the system.
- * **`udevadm Command:`** udev management tool.
- * **`tune2fs Command:`** adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems.
- * **`dumpe2fs Command:`** dump ext2/ext3/ext4 filesystem information.
- * **`Using by-uuid Path:`** The directory contains UUID and real block device files, UUIDs were symlink with real block device files.
-
-
-
-### How To Check Disk Partition/FileSystem UUID In Linux Uusing blkid Command?
-
-blkid is a command-line utility to locate/print block device attributes. It uses libblkid library to get disk partition UUID in Linux system.
-
-```
-# 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"
-```
-
-### How To Check Disk Partition/FileSystem UUID In Linux Uusing lsblk Command?
-
-lsblk lists information about all available or the specified block devices. The lsblk command reads the sysfs filesystem and udev db to gather information.
-
-If the udev db is not available or lsblk is compiled without udev support than it tries to read LABELs, UUIDs and filesystem types from the block device. In this case root permissions are necessary. The command prints all block devices (except RAM disks) in a tree-like format by default.
-
-```
-# 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
-```
-
-### How To Check Disk Partition/FileSystem UUID In Linux Uusing by-uuid path?
-
-The directory contains UUID and real block device files, UUIDs were symlink with real block device files.
-
-```
-# 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
-```
-
-### How To Check Disk Partition/FileSystem UUID In Linux Uusing hwinfo Command?
-
-**[hwinfo][1]** stands for hardware information tool is another great utility that used to probe for the hardware present in the system and display detailed information about varies hardware components in human readable format.
-
-```
-# 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
-```
-
-### How To Check Disk Partition/FileSystem UUID In Linux Uusing udevadm Command?
-
-udevadm expects a command and command specific options. It controls the runtime behavior of systemd-udevd, requests kernel events, manages the event queue, and provides simple debugging mechanisms.
-
-```
-udevadm info -q all -n /dev/sdc1 | grep -i by-uuid | head -1
-S: disk/by-uuid/d17e3c31-e2c9-4f11-809c-94a549bc43b7
-```
-
-### How To Check Disk Partition/FileSystem UUID In Linux Uusing tune2fs Command?
-
-tune2fs allows the system administrator to adjust various tunable filesystem parameters on Linux ext2, ext3, or ext4 filesystems. The current values of these options can be displayed by using the -l option.
-
-```
-# tune2fs -l /dev/sdc1 | grep UUID
-Filesystem UUID: d17e3c31-e2c9-4f11-809c-94a549bc43b7
-```
-
-### How To Check Disk Partition/FileSystem UUID In Linux Uusing dumpe2fs Command?
-
-dumpe2fs prints the super block and blocks group information for the filesystem present on device.
-
-```
-# 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][a]
-选题:[lujun9972][b]
-译者:[译者ID](https://github.com/译者ID)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]: https://www.2daygeek.com/author/magesh/
-[b]: https://github.com/lujun9972
-[1]: https://www.2daygeek.com/hwinfo-check-display-detect-system-hardware-information-linux/
diff --git a/sources/tech/20190129 A small notebook for a system administrator.md b/sources/tech/20190129 A small notebook for a system administrator.md
new file mode 100644
index 0000000000..45d6ba50eb
--- /dev/null
+++ b/sources/tech/20190129 A small notebook for a system administrator.md
@@ -0,0 +1,552 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (A small notebook for a system administrator)
+[#]: via: (https://habr.com/en/post/437912/)
+[#]: author: (sukhe https://habr.com/en/users/sukhe/)
+
+A small notebook for a system administrator
+======
+
+I am a system administrator, and I need a small, lightweight notebook for every day carrying. Of course, not just to carry it, but for use it to work.
+
+I already have a ThinkPad x200, but it’s heavier than I would like. And among the lightweight notebooks, I did not find anything suitable. All of them imitate the MacBook Air: thin, shiny, glamorous, and they all critically lack ports. Such notebook is suitable for posting photos on Instagram, but not for work. At least not for mine.
+
+After not finding anything suitable, I thought about how a notebook would turn out if it were developed not with design, but the needs of real users in mind. System administrators, for example. Or people serving telecommunications equipment in hard-to-reach places — on roofs, masts, in the woods, literally in the middle of nowhere.
+
+The results of my thoughts are presented in this article.
+
+
+[![Figure to attract attention][1]][2]
+
+Of course, your understanding of the admin notebook does not have to coincide with mine. But I hope you will find a couple of interesting thoughts here.
+
+Just keep in mind that «system administrator» is just the name of my position. And in fact, I have to work as a network engineer, and installer, and perform a significant part of other work related to hardware. Our company is tiny, we are far from large settlements, so all of us have to be universal specialist.
+
+In order not to constantly clarify «this notebook», later in the article I will call it the “adminbook”. Although it can be useful not only to administrators, but also to all who need a small, lightweight notebook with a lot of connectors. In fact, even large laptops don’t have as many connectors.
+
+So let's get started…
+
+### 1\. Dimensions and weight
+
+Of course, you want it smaller and more lightweight, but the keyboard with the screen should not be too small. And there has to be space for connectors, too.
+
+In my opinion, a suitable option is a notebook half the size of an x200. That is, approximately the size of a sheet of A5 paper (210x148mm). In addition, the side pockets of many bags and backpacks are designed for this size. This means that the adminbook doesn’t even have to be carried in the main compartment.
+
+Though I couldn’t fit everything I wanted into 210mm. To make a comfortable keyboard, the width had to be increased to 230mm.
+
+In the illustrations the adminbook may seem too thick. But that’s only an optical illusion. In fact, its thickness is 25mm (28mm taking the rubber feet into account).
+
+Its size is close to the usual hardcover book, 300-350 pages thick.
+
+It’s lightweight, too — about 800 grams (half the weight of the ThinkPad).
+
+The case of the adminbook is made of mithril aluminum. It’s a lightweight, durable metal with good thermal conductivity.
+
+### 2\. Keyboard and trackpoint
+
+A quality keyboard is very important for me. “Quality” there means the fastest possible typing and hotkey speed. It needs to be so “matter-of-fact” I don’t have to think about it at all, as if it types seemingly by force of thought.
+
+This is possible if the keys are normal size and in their typical positions. But the adminbook is too small for that. In width, it is even smaller than the main block of keys of a desktop keyboard. So, you have to work around that somehow.
+
+After a long search and numerous tests, I came up with what you see in the picture:
+
+
+Fig.2.1 — Adminbook keyboard
+
+This keyboard has the same vertical key distance as on a regular keyboard. A horizontal distance decreased just only 2mm (17 instead of 19).
+
+You can even type blindly on this keyboard! To do this, some keys have small bumps for tactile orientation.
+
+However, if you do not sit at a table, the main input method will be to press the keys “at a glance”. And here the muscle memory does not help — you have to look at the keys with your eyes.
+
+To hit the buttons faster, different key colors are used.
+
+For example, the numeric row is specifically colored gray to visually separate it from the QWERTY row, and NumLock is mapped to the “6” key, colored black to stand out.
+
+To the right of NumLock, gray indicates the area of the numeric keypad. These (and neighboring) buttons work like a numeric keypad in NumLock mode or when you press Fn. I must say, this is a useful feature for the admin computer — some users come up with passwords on the numpad in the form of a “cross”, “snake”, “spiral”, etc. I want to be able to type them that way too.
+
+As for the function keys. I don’t know about you, but it annoys me when, in a 15-inch laptop, this row is half-height and only accessible through pressing Fn. Given that there’s a lot free space around the keyboard!
+
+The adminbook doesn’t have free space at all. But the function keys can be pressed without Fn. These are separate keys that are even divided into groups of 4 using color coding and location.
+
+By the way, have you seen which key is to the right of AltGr on modern ThinkPads? I don’t know what they were thinking, but now they have PrintScreen there!
+
+Where? Where, I ask, is the context menu key that I use every day? It’s not there.
+
+So the adminbook has it. Two, even! You can put it up by pressing Fn + Alt. Sorry, I couldn’t map it to a separate key due to lack of space. Just in case, I added the “Right Win” key as Fn + CtrlR. Maybe some people use it for something.
+
+However, the adminbook allows you to customize the keyboard to your liking. The keyboard is fully reprogrammable. You can assign the scan codes you need to the keys. Setting the keyboard parameters is done via the “KEY” button (Fn + F3).
+
+Of course, the adminbook has a keyboard backlight. It is turned on with Fn + B (below the trackpoint, you can even find it in the dark). The backlight here is similar to the ThinkPad ThinkLight. That is, it’s an LED above the display, illuminating the keyboard from the top. In this case, it is better than a backlight from below, because it allows you to distinguish the color of the keys. In addition, keys have several characters printed on them, while only English letters are usually made translucent to the backlight.
+
+Since we’re on the topic of characters… Red letters are Ukrainian and Russian. I specifically drew them to show that keys have space for several alphabets: after all, English is not a native language for most of humanity.
+
+Since there isn’t enough space for a full touchpad, the trackpoint is used as the positioning device. If you have no experience working with it — don’t worry, it’s actually quite handy. The mouse cursor moves with slight inclines of the trackpoint, like an analog joystick, and its three buttons (under the spacebar) work the same as on the mouse.
+
+To the left of the trackpoint keys is a fingerprint scanner. That makes it possible to login by fingerprint. It’s very convenient in most cases.
+
+The space bar has an NFC antenna location mark. You can simply read data from devices equipped with NFC, and you can make it to lock the system while not in use. For example, if you wear an NFC-equipped ring, it looks like this: when you remove hands from the keyboard, the computer locks after a certain time, and unlocks when you put hands on the keyboard again.
+
+And now the unexpected part. The keyboard and the trackpoint can work as a USB keyboard and mouse for an external computer! For this, there are USB Type C and MicroUSB connectors on the back, labeled «OTG». You can connect to an external computer using a standard USB cable from a phone (which is usually always with you).
+
+
+Fig.2.2 — On the right: the power connector 5.5x2.5mm, the main LAN connector, POE indicator, USB 3.0 Type A, USB Type C (with alternate HDMI mode), microSD card reader and two «magic» buttons
+
+Switching to the external keyboard mode is done with the «K» button on the right side of the adminbook. And there are actually three modes, since the keyboard+trackpoint combo can also work as a Bluetooth keyboard/mouse!
+
+Moreover: to save energy, the keyboard and trackpoint can work autonomously from the rest of the adminbook. When the adminbook is turned off, pressing «K» can turn on only the keyboard and trackpoint to use them by connecting to another computer.
+
+Of course, the keyboard is water-resistant. Excess water is drained down through the drainage holes.
+
+### 3\. Video subsystem
+
+There are some devices that normally do not need a monitor and keyboard. For example, industrial computers, servers or DVRs. And since the monitor is «not needed», it is, in most cases, absent.
+
+And when there is a need to configure such a device from the console, it can be a big surprise that the entire office is working on laptops and there is not a single stationary monitor within reach. Therefore, in some cases you have to take a monitor with you.
+
+But you don’t need to worry about this if you have the adminbook.
+
+The fact is that the video outputs of the adminbook can switch «in the opposite direction» and work as video inputs by displaying the incoming image on the built-in screen. So, the adminbook can also replace the monitor (in addition to replace the mouse and keyboard).
+
+
+Fig.3.1 — On the left side of the adminbook, there are Mini DisplayPort, USB Type C (with alternate DisplayPort mode), SD card reader, USB 3.0 Type A connectors, HDMI, four audio connectors, VGA and power button
+
+Switching modes between input and output is done by pressing the «M» button on the right side of the adminbook.
+
+The video subsystem, as well as the keyboard, can work autonomously — that is, when used as a monitor, the other parts of the adminbook remain disabled. To turn on to this mode also uses the «M» button.
+
+Detailed screen adjustment (contrast, geometry, video input selection, etc.) is performed using the menu, brought up with the «SCR» button (Fn + F4).
+
+The adminbook has HDMI, MiniDP, VGA and USB Type C connectors (with DisplayPort and HDMI alternate mode) for video input / output. The integrated GPU can display the image simultaneously in three directions (including the integrated display).
+
+The adminbook display is FullHD (1920x1080), 9.5’’, matte screen. The brightness is sufficient for working outside during the day. And to do it better, the set includes folding blinds for protection from sunlight.
+
+
+Fig.3.2 — Blinds to protect from sunlight
+
+In addition to video output via these connectors, the adminbook can use wireless transmission via WiDi or Miracast protocols.
+
+### 4\. Emulation of external drives
+
+One of the options for installing the operating system is to install it from a CD / DVD, but now very few computers have optical drives. USB connectors are everywhere, though. Therefore, the adminbook can pretend to be an external optical drive connected via USB.
+
+That allows connecting it to any computer to install an operating system on it, while also running boot discs with test programs or antiviruses.
+
+To connect, it uses the same USB cable that’s used for connecting it to a desktop as an external keyboard/mouse.
+
+The “CD” button (Fn + F2) controls the drive emulation — select a disc image (in an .iso file) and mount / unmount it.
+
+If you need to copy data from a computer or to it, the adminbook can emulate an external hard drive connected via the same USB cable. HDD emulation is also enabled by the “CD” button.
+
+This button also turns on the emulation of bootable USB flash drives. They are now used to install operating systems almost more often than CDs. Therefore, the adminbook can pretend to be a bootable flash drive.
+
+The .iso files are located on a separate partition of the hard disk. This allows you to use them regardless of the operating system. Moreover, in the emulation menu you can connect a virtual drive to one of the USB interfaces of the adminbook. This makes it possible to install an operating system on the adminbook using itself as an installation disc drive.
+
+By the way, the adminbook is designed to work under Windows 10 and Debian / Kali / Ubuntu. The menu system called via function buttons with Fn works autonomously on a separate microcontroller.
+
+### 5\. Rear connectors
+
+First, a classic DB-9 connector for RS-232. Any admin notebook simply has to have it. We have it here, too, and galvanically isolated from the rest of the notebook.
+
+In addition to RS-232, RS-485 widely used in industrial automation is supported. It has a two-wire and four-wire version, with a terminating resistor and without, with the ability to enable a protective offset. It can also work in RS-422 and UART modes.
+
+All these protocols are configured in the on-screen menu, called by the «COM» button (Fn + F8).
+
+Since there are multiple protocols, it is possible to accidentally connect the equipment to a wrong connector and break it.
+
+To prevent this from happening, when you turn off the computer (or go into sleep mode, or close the display lid), the COM port switches to the default mode. This may be a “port disabled” state, or enabling one of the protocols.
+
+
+Fig.5.1 — The rear connectors: DB-9, SATA + SATA Power, HD Mini SAS, the second wired LAN connector, two USB 3.0 Type A connectors, two USB 2.0 MicroB connectors, three USB Type C connectors, a USIM card tray, a PBD-12 pin connector (jack)
+
+The adminbook has one more serial port. But if the first one uses the hardware UART chipset, the second one is connected to the USB 2.0 line through the FT232H converter.
+
+Thanks to this, via COM2, you can exchange data via I2C, SMBus, SPI, JTAG, UART protocols or use it as 8 outputs for Bit-bang / GPIO. These protocols are used when working with microcontrollers, flashing firmware on routers and debugging any other electronics. For this purpose, pin connectors are usually used with a 2.54mm pitch. Therefore, COM2 is made to look like one of these connectors.
+
+
+Fig.5.2 — USB to UART adapter replaced by COM2 port
+
+There is also a secondary LAN interface at the back. Like the main one, it is gigabit-capable, with support for VLAN. Both interfaces are able to test the integrity of the cable (for pair length and short circuits), the presence of connected devices, available communication speeds, the presence of POE voltage. With the using a wiremap adapter on the other side (see chapter 17) it is possible to determine how the cable is connected to crimps.
+
+The network interface menu is called with the “LAN” button (Fn + F6).
+
+The adminbook has a combined SATA + SATA Power connector, connected directly to the chipset. That makes it possible to perform low-level tests of hard drives that do not work through USB-SATA adapters. Previously, you had to do it through ExpressCards-type adapters, but the adminbook can do without them because it has a true SATA output.
+
+
+Fig.5.3 — USB to SATA/IDE and ExpressCard to SATA adapters
+
+The adminbook also has a connector that no other laptops have — HD Mini SAS (SFF-8643). PCIe x4 is routed outside through this connector. Thus, it's possible to connect an external U.2 (directly) or M.2 type (through an adapter) drives. Or even a typical desktop PCIe expansion card (like a graphics card).
+
+
+Fig.5.4 — HD Mini SAS (SFF-8643) to U.2 cable
+
+
+Fig.5.5 — U.2 drive
+
+
+Fig.5.6 — U.2 to M.2 adapter
+
+
+Fig.5.7 — Combined adapter from U.2 to M.2 and PCIe (sample M.2 22110 drive is installed)
+
+Unfortunately, the limitations of the chipset don’t allow arbitrary use of PCIe lanes. In addition, the processor uses the same data lanes for PCIe and SATA. Therefore, the rear connectors can only work in two ways:
+— all four PCIe lanes go to the Mini SAS connector (the second network interface and SATA don’t work)
+— two PCIe lanes go to the Mini SAS, and two lanes to the second network interface and SATA connector
+
+On the back there are also two USB connectors (usual and Type C), which are constantly powered. That allows you to charge other devices from your notebook, even when the notebook is turned off.
+
+### 6\. Power Supply
+
+The adminbook is designed to work in difficult and unpredictable conditions, therefore, it is able to receive power in various ways.
+
+**Method number one** is Power Delivery. The power supply cable can be connected to any USB Type C connector (except the one marked “OTG”).
+
+**The second option** is from a normal 5V phone charger with a microUSB or USB Type C connector. At the same time, if you connect to the ports labeled QC 3.0, the QuickCharge fast charging standard will be supported.
+
+**The third option** — from any source of 12-60V DC power. To connect, use a coaxial ( also known as “barrel”) 5.5x2.5mm power connector, often found in laptop power supplies.
+
+For greater safety, the 12-60V power supply is galvanically isolated from the rest of the notebook. In addition, there’s reverse polarity protection. In fact, the adminbook can receive energy even if positive and negative ends are mismatched.
+
+
+Fig.6.1 — The cable, connecting the power supply to the adminbook (terminated with 5.5x2.5mm connectors)
+
+Adapters for a car cigarette lighter and crocodile clips are included in the box.
+
+
+Fig.6.2 — Adapter from 5.5x2.5mm coaxial connector to crocodile clips
+
+
+Fig.6.3 — Adapter to a car cigarette lighter
+
+**The fourth option** — Power Over Ethernet (POE) through the main network adapter. Supported options are 802.3af, 802.3at and Passive POE. Input voltage from 12 to 60V. This method is convenient if you have to work on the roof or on the tower, setting up Wi-Fi antennas. Power to them comes through Ethernet cables, and there is no other electricity on the tower.
+
+POE electricity can be used in three ways:
+
+ * power the notebook only
+ * forward to a second network adapter and power the notebook from batteries
+ * power the notebook and the antenna at the same time
+
+
+
+To prevent equipment damage, if one of the Ethernet cables is disconnected, the power to the second network interface is terminated. The power can only be turned on manually through the corresponding menu item.
+
+When using the 802.3af / at protocols, you can set the power class that the adminbook will request from the power supply device. This and other POE properties are configured from the menu called with the “LAN” button (Fn + F6).
+
+By the way, you can remotely reset Ubiquity access points (which is done by closing certain wires in the cable) with the second network interface.
+
+The indicator next to the main network interface shows the presence and type of POE: green — 802.3af / at, red — Passive POE.
+
+**The last, fifth** power supply is the battery. Here it’s a LiPol, 42W/hour battery.
+
+In case the external power supply does not provide sufficient power, the missing power can be drawn from the battery. Thus, it can draw power from the battery and external sources at the same time.
+
+### 7\. Display unit
+
+The display can tilt 180 degrees, and it’s locked with latches while closed (opens with a button on the front side). When the display is closed, adminbook doesn’t react to pressing any external buttons.
+
+In addition to the screen, the notebook lid contains:
+
+ * front and rear cameras with lights, microphones, activity LEDs and mechanical curtains
+ * LED of the upper backlight of the keyboard (similar to ThinkLight)
+ * LED indicators for Wi-Fi, Bluetooth, HDD and others
+ * wireless protocol antennas (in the blue plastic insert)
+ * photo sensors and LEDs for the infrared remote
+ * gyroscope, accelerometer, magnetometer
+
+
+
+The plastic insert for the antennas does not reach the corners of the display lid. This is done because in the «traveling» notebooks the corners are most affected by impacts, and it's desirable that they be made of metal.
+
+### 8\. Webcams
+
+The notebook has 2 webcams. The front-facing one is 8MP (4K / UltraHD), while the “selfie” one is 2MP (FullHD). Both cameras have a backlight controlled by separate buttons (Fn + G and Fn + H). Each camera has a mechanical curtain and an activity LED. The shifted mechanical curtain also turns off the microphones of the corresponding side (configurable).
+
+The external camera has two quick launch buttons — Fn + 1 takes an instant photo, Fn + 2 turns on video recording. The internal camera has a combination of Fn + Q and Fn + W.
+
+You can configure cameras and microphones from the menu called up by the “CAM” button (Fn + F10).
+
+### 9\. Indicator row
+
+It has the following indicators: Microphone, NumLock, ScrollLock, hard drive access, battery charge, external power connection, sleep mode, mobile connection, WiFi, Bluetooth.
+
+Three indicators are made to shine through the back side of the display lid, so that they can be seen while the lid is closed: external power connection, battery charge, sleep mode.
+
+Indicators are color-coded.
+
+Microphone — lights up red when all microphones are muted
+
+Battery charge: more than 60% is green, 30-60% is yellow, less than 30% is red, less than 10% is blinking red.
+
+External power: green — power is supplied, the battery is charged; yellow — power is supplied, the battery is charging; red — there is not enough external power to operate, the battery is drained
+
+Mobile: 4G (LTE) — green, 3G — yellow, EDGE / GPRS — red, blinking red — on, but no connection
+
+Wi-Fi: green — connected to 5 GHz, yellow — to 2.4 GHz, red — on, but not connected
+
+You can configure the indication with the “IND” button (Fn + F9)
+
+### 10\. Infrared remote control
+
+Near the indicators (on the front and back of the display lid) there are infrared photo sensors and LEDs to recording and playback commands from IR remotes. You can set it up, as well as emulate a remote control by pressing the “IR” button (Fn + F5).
+
+### 11\. Wireless interfaces
+
+WiFi — dual-band, 802.11a/b/g/n/ac with support for Wireless Direct, Intel WI-Di / Miracast, Wake On Wireless LAN.
+
+You ask, why is Miracast here? Because is already embedded in many WiFi chips, so its presence does not lead to additional costs. But you can transfer the image wirelessly to TVs, projectors and TV set-top boxes, that already have Miracast built in.
+
+Regarding Bluetooth, there’s nothing special. It’s version 4.2 or newest. By the way, the keyboard and trackpoint have a separate Bluetooth module. This is much easier than connect them to the system-wide module.
+
+Of course, the adminbook has a built-in cellular modem for 4G (LTE) / 3G / EDGE / GPRS, as well as a GPS / GLONASS / Galileo / Beidou receiver. This receiver also doesn’t cost much, because it’s already built into the 4G modem.
+
+There is also an NFC communication module, with the antenna under the spacebar. Antennas of all other wireless interfaces are in a plastic insert above the display.
+
+You can configure wireless interfaces with the «WRLS» button (Fn + F7).
+
+### 12\. USB connectors
+
+In total, four USB 3.0 Type A connectors and four USB 3.1 Type C connectors are built into the adminbook. Peripherals are connected to the adminbook through these.
+
+One more Type C and MicroUSB are allocated only for keyboard / mouse / drive emulation (denoted as “OTG”).
+
+«QC 3.0» labeled MicroUSB connector can not only be used for power, but it can switch to normal USB 2.0 port mode, except using MicroB instead of normal Type A. Why is it necessary? Because to flash some electronics you sometimes need non-standard USB A to USB A cables.
+
+In order to not make adapters outselves, you can use a regular phone charging cable by plugging it into this Micro B connector. Or use an USB A to USB Type C cable (if you have one).
+
+
+Fig.12.1 — Homemade USB A to USB A cable
+
+Since USB Type C supports alternate modes, it makes sense to use it. Alternate modes are when the connector works as HDMI or DisplayPort video outputs. Though you’ll need adapters to connect it to a TV or monitor. Or appropriate cables that have Type C on one end and HDMI / DP on the other. However, USB Type C to USB Type C cables might soon become the most common video transfer cable.
+
+The Type C connector on the left side of the adminbook supports an alternate Display Port mode, and on the right side, HDMI. Like the other video outputs of the adminbook, they can work as both input and output.
+
+The one thing left to say is that Type C is bidirectional in regard to power delivery — it can both take in power as well as output it.
+
+### 13\. Other
+
+On the left side there are four audio connectors: Line In, Line Out, Microphone and the combo headset jack (headphones + microphone). Supports simple stereo, quad and 5.1 mode output.
+
+Audio outputs are specially placed next to the video connectors, so that when connected to any equipment, the wires are on one side.
+
+Built-in speakers are on the sides. Outside, they are covered with grills and acoustic fabric with water-repellent impregnation.
+
+There are also two slots for memory cards — full-size SD and MicroSD. If you think that the first slot is needed only for copying photos from the camera — you are mistaken. Now, both single-board computers like Raspberry Pi and even rack-mount servers are loaded from SD cards. MicroSD cards are also commonly found outside of phones. In general, you need both card slots.
+
+Sensors more familiar to phones — a gyroscope, an accelerometer and a magnetometer — are built into the lid of the notebook. Thanks to this, one can determine where the notebook cameras are directed and use this for augmented reality, as well as navigation. Sensors are controlled via the menu using the “SNSR” button (Fn + F11).
+
+Among the function buttons with Fn, F1 (“MAN”) and F12 (“ETC”) I haven’t described yet. The first is a built-in guide on connectors, modes and how to use the adminbook. The second is the settings of non-standard subsystems that have not separate buttons.
+
+### 14\. What's inside
+
+The adminbook is based on the Core i5-7Y57 CPU (Kaby Lake architecture). Although it’s less of a CPU, but more of a real SOC (System On a Chip). That is, almost the entire computer (without peripherals) fits in one chip the size of a thumb nail (2x1.6 cm).
+
+It emits from 3.5W to 7W of heat (depends on the frequency). So, a passive cooling system is adequate in this case.
+
+8GB of RAM are installed by default, expandable up to 16GB.
+
+A 256GB M.2 2280 SSD, connected with two PCIe lanes, is used as the hard drive.
+
+Wi-Fi + Bluetooth and WWAN + GNSS adapters are also designed as M.2 modules.
+
+RAM, the hard drive and wireless adapters are located on the top of the motherboard and can be replaced by the user — just unscrew and lift the keyboard.
+
+The battery is assembled from four LP545590 cells and can also be replaced.
+
+SOC and other irreplaceable hardware are located on the bottom of the motherboard. The heating components for cooling are pressed directly against the case.
+
+External connectors are located on daughter boards connected to the motherboard via ribbon cables. That allows to release different versions of the adminbook based on the same motherboard.
+
+For example, one of the possible version:
+
+
+Fig.14.1 — Adminbook A4 (front view)
+
+
+Fig.14.2 — Adminbook A4 (back view)
+
+
+Fig.14.3 — Adminbook A4 (keyboard)
+
+This is an adminbook with a 12.5” display, its overall dimensions are 210x297mm (A4 paper format). The keyboard is full-size, with a standard key size (only the top row is a bit narrower). All the standard keys are there, except for the numpad and the Right Win, available with Fn keys. And trackpad added.
+
+### 15\. The underside of the adminbook
+
+Not expecting anything interesting from the bottom? But there is!
+
+First I will say a few words about the rubber feet. On my ThinkPad, they sometimes fall away and lost. I don't know if it's a bad glue, or a backpack is not suitable for a notebook, but it happens.
+
+Therefore, in the adminbook, the rubber feet are screwed in (the screws are slightly buried in rubber, so as not to scratch the tables). The feet are sufficiently streamlined so that they cling less to other objects.
+
+On the bottom there are visible drainage holes marked with a water drop.
+
+And the four threaded holes for connecting the adminbook with fasteners.
+
+
+Fig.15.1 — The underside of the adminbook
+
+Large hole in the center has a tripod thread.
+
+
+Fig.15.2 — Camera clamp mount
+
+Why is it necessary? Because sometimes you have to hang on high, holding the mast with one hand, holding the notebook with the second, and typing something on the third… Unfortunately, I am not Shiva, so these tricks are not easy for me. And you can just screw the adminbook by a camera mount to any protruding part of the structure and free your hands!
+
+No protruding parts? No problem. A plate with neodymium magnets is screwed to three other holes and the adminbook is magnetised to any steel surface — even vertical! As you see, opening the display by 180° is pretty useful.
+
+
+Fig.15.3 — Fastening with magnets and shaped holes for nails / screws
+
+And if there is no metal? For example, working on the roof, and next to only a wooden wall. Then you can screw 1-2 screws in the wall and hang the adminbook on them. To do this, there are special slots in the mount, plus an eyelet on the handle.
+
+For especially difficult cases, there’s an arm mount. This is not very convenient, but better than nothing. Besides, it allows you to navigate even with a working notebook.
+
+
+Fig.15.4 — Arm mount
+
+In general, these three holes use a regular metric thread, specifically so that you can make some DIY fastening and fasten it with ordinary screws.
+
+Except fasteners, an additional radiator can be screwed to these holes, so that you can work for a long time under high load or at high ambient temperature.
+
+
+Fig.15.5 — Adminbook with additional radiator
+
+### 16\. Accessories
+
+The adminbook has some unique features, and some of them are implemented using equipment designed specifically for the adminbook. Therefore, these accessories are immediately included. However, non-unique accessories are also available immediately.
+
+Here is a complete list of both:
+
+ * fasteners with magnets
+ * arm mount
+ * heatsink
+ * screen blinds covering it from sunlight
+ * HD Mini SAS to U.2 cable
+ * combined adapter from U.2 to M.2 and PCIe
+ * power cable, terminated by coaxial 5.5x2.5mm connectors
+ * adapter from power cable to cigarette lighter
+ * adapter from power cable to crocodile clips
+ * different adapters from the power cable to coaxial connectors
+ * universal power supply and power cord from it into the outlet
+
+
+
+### 17\. Power supply
+
+Since this is a power supply for a system administrator's notebook, it would be nice to make it universal, capable of powering various electronic devices. Fortunately, the vast majority of devices are connected via coaxial connectors or USB. I mean devices with external power supplies: routers, switches, notebooks, nettops, single-board computers, DVRs, IPTV set top boxes, satellite tuners and more.
+
+
+Fig.17.1 — Adapters from 5.5x2.5mm coaxial connector to other types of connectors
+
+There aren’t many connector types, which allows to get by with an adjustable-voltage PSU and adapters for the necessary connectors. It also needs to support various power delivery standards.
+
+In our case, the power supply supports the following modes:
+
+ * Power Delivery — displayed as **[pd]**
+ * Quick Charge **[qc]**
+ * 802.3af/at **[at]**
+ * voltage from 5 to 54 volts in 0.5V increments (displayed voltage)
+
+
+
+
+Fig.17.2 — Mode display on the 7-segment indicator (1.9. = 19.5V)
+
+
+Fig.17.3 — Front and top sides of power supply
+
+USB outputs on the power supply (5V 2A) are always on. On the other outputs the voltage is applied by pressing the ON/OFF button.
+
+The desired mode is selected with the MODE button and this selection is remembered even when the power is turned off. The modes are listed like this: pd, qc, at, then a series of voltages.
+
+Voltage increases by pressing and holding the MODE button, decreases by short pressing. Step to the right — 1 Volt, step to the left — 0.5 Volt. Half a volt is needed because some equipment requires, for example, 19.5 volts. These half volts are displayed on the display with decimal points (19V -> **[19]** , 19.5V -> **[1.9.]** ).
+
+When power is on, the green LED is on. When a short-circuit or overcurrent protection is triggered, **[SH]** is displayed, and the LED lights up red.
+
+In the Power Delivery and Quick Charge modes, voltage is applied to the USB outputs (Type A and Type C). Only one of them can be used at one time.
+
+In 802.3af/at modes, the power supply acts as an injector, combining the supply voltage with data from the LAN connector and supplying it to the POE connector. Power is supplied only if a device with 802.3af or 802.3at support is plugged into the POE connector.
+
+But in the simple voltage supply mode, electricity throu the POE connector is issued immediately, without any checks. This is the so-called Passive POE — positive charge goes to conductors 4 and 5, and negative charge to conductors 7 and 8. At the same time, the voltage is applied to the coaxial connector. Adapters for various types of connectors are used in this mode.
+
+The power supply unit has a built-in button to remotely reset Ubiquity access points. This is a very useful feature that allows you to reset the antenna to factory settings without having to climb on the mast. I don’t know — is any other manufacturers support a feature like this?
+
+The power supply also has the passive wiremap adapter, which allows you to determine the correct Ethernet cable crimping. The active part is located in the Ethernet ports of the adminbook.
+
+
+Fig.17.4 — Back side and wiremap adapter
+
+Of course, the network cable tester built into the adminbook will not replace a professional OTDR, but for most tasks it will be enough.
+
+To prevent overheating, part of the PSU’s body acts as an aluminum heatsink. Power supply power — 65 watts, size 10x5x4cm.
+
+### 18\. Afterword
+
+“It won’t fit into such a small case!” — the sceptics will probably say. To be frank, I also sometimes think that way when re-reading what I wrote above.
+
+And then I open the 3D model and see, that all parts fits. Of course, I am not an electronic engineer, and for sure I miss some important things. But, I hope that if there are mistakes, they are “overcorrections”. That is, real engineers would fit all of that into a case even smaller.
+
+By and large, the adminbook can be divided into 5 functional parts:
+
+ * the usual part, as in all notebooks — processor, memory, hard drive, etc.
+ * keyboard and trackpoint that can work separately
+ * autonomous video subsystem
+ * subsystem for managing non-standard features (enable / disable POE, infrared remote control, PCIe mode switching, LAN testing, etc.)
+ * power subsystem
+
+
+
+If we consider them separately, then everything looks quite feasible.
+
+The **SOC Kaby Lake** contains a CPU, a graphics accelerator, a memory controller, PCIe, SATA controller, USB controller for 6 USB3 and 10 USB2 outputs, Gigabit Ethernet controller, 4 lanes to connect webcams, integrated audio and etc.
+
+All that remains is to trace the lanes to connectors and supply power to it.
+
+**Keyboard and trackpoint** is a separate module that connects via USB to the adminbook or to an external connector. Nothing complicated here: USB and Bluetooth keyboards are very widespread. In our case, in addition, needs to make a rewritable table of scan codes and transfer non-standard keys over a separate interface other than USB.
+
+**The video subsystem** receives the video signal from the adminbook or from external connectors. In fact, this is a regular monitor with a video switchboard plus a couple of VGA converters.
+
+**Non-standard features** are managed independently of the operating system. The easiest way to do it with via a separate microcontroller which receives codes for pressing non-standard keys (those that are pressed with Fn) and performs the corresponding actions.
+
+Since you have to display a menu to change the settings, the microcontroller has a video output, connected to the adminbook for the duration of the setup.
+
+**The internal PSU** is galvanically isolated from the rest of the system. Why not? On habr.com there was an article about making a 100W, 9.6mm thickness planar transformer! And it only costs $0.5.
+
+So the electronic part of the adminbook is quite feasible. There is the programming part, and I don’t know which part will harder.
+
+This concludes my fairly long article. It long, even though I simplified, shortened and threw out minor details.
+
+The ideal end of the article was a link to an online store where you can buy an adminbook. But it's not yet designed and released. Since this requires money.
+
+Unfortunately, I have no experience with Kickstarter or Indigogo. Maybe you have this experience? Let's do it together!
+
+### Update
+
+Many people asked for a simplified version. Ok. Done. Sorry — just a 3d model, without render.
+
+Deleted: second LAN adapter, micro SD card reader, one USB port Type C, second camera, camera lights and camera curtines, display latch, unnecessary audio connectors.
+
+Also in this version there will be no infrared remote control, a reprogrammable keyboard, QC 3.0 charging standard, and getting power by POE.
+
+
+
+
+
+
+--------------------------------------------------------------------------------
+
+via: https://habr.com/en/post/437912/
+
+作者:[sukhe][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://habr.com/en/users/sukhe/
+[b]: https://github.com/lujun9972
+[1]: https://habrastorage.org/webt/_1/mp/vl/_1mpvlyujldpnad0cvvzvbci50y.jpeg
+[2]: https://habrastorage.org/webt/mr/m6/d3/mrm6d3szvghhpghfchsl_-lzgb4.jpeg
diff --git a/sources/tech/20190129 Create an online store with this Java-based framework.md b/sources/tech/20190129 Create an online store with this Java-based framework.md
new file mode 100644
index 0000000000..b72a8551de
--- /dev/null
+++ b/sources/tech/20190129 Create an online store with this Java-based framework.md
@@ -0,0 +1,235 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Create an online store with this Java-based framework)
+[#]: via: (https://opensource.com/article/19/1/scipio-erp)
+[#]: author: (Paul Piper https://opensource.com/users/madppiper)
+
+Create an online store with this Java-based framework
+======
+Scipio ERP comes with a large range of applications and functionality.
+
+
+So you want to sell products or services online, but either can't find a fitting software or think customization would be too costly? [Scipio ERP][1] may just be what you are looking for.
+
+Scipio ERP is a Java-based open source e-commerce framework that comes with a large range of applications and functionality. The project was forked from [Apache OFBiz][2] in 2014 with a clear focus on better customization and a more modern appeal. The e-commerce component is quite extensive and works in a multi-store setup, internationally, and with a wide range of product configurations, and it's also compatible with modern HTML frameworks. The software also provides standard applications for many other business cases, such as accounting, warehouse management, or sales force automation. It's all highly standardized and therefore easy to customize, which is great if you are looking for more than a virtual cart.
+
+The system makes it very easy to keep up with modern web standards, too. All screens are constructed using the system's "[templating toolkit][3]," an easy-to-learn macro set that separates HTML from all applications. Because of it, every application is already standardized to the core. Sounds confusing? It really isn't—it all looks a lot like HTML, but you write a lot less of it.
+
+### Initial setup
+
+Before you get started, make sure you have Java 1.8 (or greater) SDK and a Git client installed. Got it? Great! Next, check out the master branch from GitHub:
+
+```
+git clone https://github.com/ilscipio/scipio-erp.git
+cd scipio-erp
+git checkout master
+```
+
+To set up the system, simply run **./install.sh** and select either option from the command line. Throughout development, it is best to stick to an **installation for development** (Option 1), which will also install a range of demo data. For professional installations, you can modify the initial config data ("seed data") so it will automatically set up the company and catalog data for you. By default, the system will run with an internal database, but it [can also be configured][4] with a wide range of relational databases such as PostgreSQL and MariaDB.
+
+![Setup wizard][6]
+
+Follow the setup wizard to complete your initial configuration,
+
+Start the system with **./start.sh** and head over to **** to complete the configuration. If you installed with demo data, you can log in with username **admin** and password **scipio**. During the setup wizard, you can set up a company profile, accounting, a warehouse, your product catalog, your online store, and additional user profiles. Keep the website entries on the product store configuration screen for now. The system allows you to run multiple webstores with different underlying code; unless you want to do that, it is easiest to stick to the defaults.
+
+Congratulations, you just installed Scipio ERP! Play around with the screens for a minute or two to get a feel for the functionality.
+
+### Shortcuts
+
+Before you jump into the customization, here are a few handy commands that will help you along the way:
+
+ * Create a shop-override: **./ant create-component-shop-override**
+ * Create a new component: **./ant create-component**
+ * Create a new theme component: **./ant create-theme**
+ * Create admin user: **./ant create-admin-user-login**
+ * Various other utility functions: **./ant -p**
+ * Utility to install & update add-ons: **./git-addons help**
+
+
+
+Also, make a mental note of the following locations:
+
+ * Scripts to run Scipio as a service: **/tools/scripts/**
+ * Log output directory: **/runtime/logs**
+ * Admin application: ****
+ * E-commerce application: ****
+
+
+
+Last, Scipio ERP structures all code in the following five major directories:
+
+ * Framework: framework-related sources, the application server, generic screens, and configurations
+ * Applications: core applications
+ * Addons: third-party extensions
+ * Themes: modifies the look and feel
+ * Hot-deploy: your own components
+
+
+
+Aside from a few configurations, you will be working within the hot-deploy and themes directories.
+
+### Webstore customizations
+
+To really make the system your own, start thinking about [components][7]. Components are a modular approach to override, extend, and add to the system. Think of components as self-contained web modules that capture information on databases ([entity][8]), functions ([services][9]), screens ([views][10]), [events and actions][11], and web applications. Thanks to components, you can add your own code while remaining compatible with the original sources.
+
+Run **./ant create-component-shop-override** and follow the steps to create your webstore component. A new directory will be created inside of the hot-deploy directory, which extends and overrides the original e-commerce application.
+
+![component directory structure][13]
+
+A typical component directory structure.
+
+Your component will have the following directory structure:
+
+ * config: configurations
+ * data: seed data
+ * entitydef: database table definitions
+ * script: Groovy script location
+ * servicedef: service definitions
+ * src: Java classes
+ * webapp: your web application
+ * widget: screen definitions
+
+
+
+Additionally, the **ivy.xml** file allows you to add Maven libraries to the build process and the **ofbiz-component.xml** file defines the overall component and web application structure. Apart from the obvious, you will also find a **controller.xml** file inside the web apps' **WEB-INF** directory. This allows you to define request entries and connect them to events and screens. For screens alone, you can also use the built-in CMS functionality, but stick to the core mechanics first. Familiarize yourself with **/applications/shop/** before introducing changes.
+
+#### Adding custom screens
+
+Remember the [templating toolkit][3]? You will find it used on every screen. Think of it as a set of easy-to-learn macros that structure all content. Here's an example:
+
+```
+<@section title="Title">
+ <@heading id="slider">Slider@heading>
+ <@row>
+ <@cell columns=6>
+ <@slider id="" class="" controls=true indicator=true>
+ <@slide link="#" image="https://placehold.it/800x300">Just some content…@slide>
+ <@slide title="This is a title" link="#" image="https://placehold.it/800x300">@slide>
+ @slider>
+ @cell>
+ <@cell columns=6>Second column@cell>
+ @row>
+@section>
+```
+
+Not too difficult, right? Meanwhile, themes contain the HTML definitions and styles. This hands the power over to your front-end developers, who can define the output of each macro and otherwise stick to their own build tools for development.
+
+Let's give it a quick try. First, define a request on your own webstore. You will modify the code for this. A built-in CMS is also available at **** , which allows you to create new templates and screens in a much more efficient way. It is fully compatible with the templating toolkit and comes with example templates that can be adopted to your preferences. But since we are trying to understand the system here, let's go with the more complicated way first.
+
+Open the **[controller.xml][14]** file inside of your shop's webapp directory. The controller keeps track of request events and performs actions accordingly. The following will create a new request under **/shop/test** :
+
+```
+
+
+
+
+
+```
+
+You can define multiple responses and, if you want, you could use an event or a service call inside the request to determine which response you may want to use. I opted for a response of type "view." A view is a rendered response; other types are request-redirects, forwards, and alike. The system comes with various renderers and allows you to determine the output later; to do so, add the following:
+
+```
+
+
+```
+
+Replace **my-component** with your own component name. Then you can define your very first screen by adding the following inside the tags within the **widget/CommonScreens.xml** file:
+
+```
+
+
+
+```
+
+Screens are actually quite modular and consist of multiple elements ([widgets, actions, and decorators][15]). For the sake of simplicity, leave this as it is for now, and complete the new webpage by adding your very first templating toolkit file. For that, create a new **webapp/mycomponent/test/test.ftl** file and add the following:
+
+```
+<@alert type="info">Success!@alert>
+```
+
+![Custom screen][17]
+
+A custom screen.
+
+Open **** and marvel at your own accomplishments.
+
+#### Custom themes
+
+Modify the look and feel of the shop by creating your very own theme. All themes can be found as components inside of the themes folder. Run **./ant create-theme** to add your own.
+
+![theme component layout][19]
+
+A typical theme component layout.
+
+Here's a list of the most important directories and files:
+
+ * Theme configuration: **data/*ThemeData.xml**
+ * Theme-specific wrapping HTML: **includes/*.ftl**
+ * Templating Toolkit HTML definition: **includes/themeTemplate.ftl**
+ * CSS class definition: **includes/themeStyles.ftl**
+ * CSS framework: **webapp/theme-title/***
+
+
+
+Take a quick look at the Metro theme in the toolkit; it uses the Foundation CSS framework and makes use of all the things above. Afterwards, set up your own theme inside your newly constructed **webapp/theme-title** directory and start developing. The Foundation-shop theme is a very simple shop-specific theme implementation that you can use as a basis for your own work.
+
+Voila! You have set up your own online store and are ready to customize!
+
+![Finished Scipio ERP shop][21]
+
+A finished shop based on Scipio ERP.
+
+### What's next?
+
+Scipio ERP is a powerful framework that simplifies the development of complex e-commerce applications. For a more complete understanding, check out the project [documentation][7], try the [online demo][22], or [join the community][23].
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/1/scipio-erp
+
+作者:[Paul Piper][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/madppiper
+[b]: https://github.com/lujun9972
+[1]: https://www.scipioerp.com
+[2]: https://ofbiz.apache.org/
+[3]: https://www.scipioerp.com/community/developer/freemarker-macros/
+[4]: https://www.scipioerp.com/community/developer/installation-configuration/configuration/#database-configuration
+[5]: /file/419711
+[6]: https://opensource.com/sites/default/files/uploads/setup_step5_sm.jpg (Setup wizard)
+[7]: https://www.scipioerp.com/community/developer/architecture/components/
+[8]: https://www.scipioerp.com/community/developer/entities/
+[9]: https://www.scipioerp.com/community/developer/services/
+[10]: https://www.scipioerp.com/community/developer/views-requests/
+[11]: https://www.scipioerp.com/community/developer/events-actions/
+[12]: /file/419716
+[13]: https://opensource.com/sites/default/files/uploads/component_structure.jpg (component directory structure)
+[14]: https://www.scipioerp.com/community/developer/views-requests/request-controller/
+[15]: https://www.scipioerp.com/community/developer/views-requests/screen-widgets-decorators/
+[16]: /file/419721
+[17]: https://opensource.com/sites/default/files/uploads/success_screen_sm.jpg (Custom screen)
+[18]: /file/419726
+[19]: https://opensource.com/sites/default/files/uploads/theme_structure.jpg (theme component layout)
+[20]: /file/419731
+[21]: https://opensource.com/sites/default/files/uploads/finished_shop_1_sm.jpg (Finished Scipio ERP shop)
+[22]: https://www.scipioerp.com/demo/
+[23]: https://forum.scipioerp.com/
diff --git a/sources/tech/20190131 VA Linux- The Linux Company That Once Ruled NASDAQ.md b/sources/tech/20190131 VA Linux- The Linux Company That Once Ruled NASDAQ.md
new file mode 100644
index 0000000000..78e0d0ecfd
--- /dev/null
+++ b/sources/tech/20190131 VA Linux- The Linux Company That Once Ruled NASDAQ.md
@@ -0,0 +1,147 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (VA Linux: The Linux Company That Once Ruled NASDAQ)
+[#]: via: (https://itsfoss.com/story-of-va-linux/)
+[#]: author: (Avimanyu Bandyopadhyay https://itsfoss.com/author/avimanyu/)
+
+VA Linux: The Linux Company That Once Ruled NASDAQ
+======
+
+This is our first article in the Linux and open source history series. We will be covering more trivia, anecdotes and other nostalgic events from the past.
+
+At its time, _VA Linux_ was indeed a crusade to free the world from Microsoft’s domination.
+
+On a historical incident in December 1999, the shares of a private firm skyrocketed from just $30 to a whopping $239 within just a day of its [IPO][1]! It was a record-breaking development that day.
+
+The company was _VA Linux_ , a firm with only 200 employees that was based on the idea of deploying Intel Hardware with Linux and FOSS, had begun a fantastic journey [on the likes of Sun and Dell][2].
+
+It traded with a symbol LNUX and gained around 700 percent on its first day of trading. But hardly one year later, the [LNUX stocks were selling below $9 per share][3].
+
+How come a successful Linux based company become a subsidiary of [Gamestop][4], a gaming company?
+
+Let us look back into the highs and lows of this record-breaking Linux corporation by knowing their history in brief.
+
+### How did it all actually begin?
+
+In the year 1993, a graduate student at Stanford University wanted to own a powerful workstation but could not afford to buy expensive [Sun][5] Workstations, which used to be sold at extremely high prices of $7,000 per system at that time.
+
+So, he decided to do build one on his own ([DIY][6] [FTW][7]!). Using an Intel 486-chip running at just 33 megahertz, he installed Linux and finally had a machine that was twice as fast as Sun’s but at a much lower price tag: $2,000.
+
+That student was none other than _VA Research_ founder [Larry Augustin][8], whose idea was loved by many at that exciting time in the Stanford campus. People started buying machines with similar configurations from him and his friend and co-founder, James Vera. This is how _VA Research_ was formed.
+
+![VA Linux founder, Larry Augustin][9]
+
+> Once software goes into the GPL, you can’t take it back. People can stop contributing, but the code that exists, people can continue to develop on it.
+>
+> Without a doubt, a futuristic quote from VA Linux founder, Larry Augustin, 10 years ago | Read the whole interview [here][10]
+
+#### Some screenshots of their web domains from the early days
+
+![Linux Powered Machines on sale on varesearch.com | July 15, 1997][11]
+
+![varesearch.com reveals emerging growth | February 16, 1998][12]
+
+![On June 26, 2001, they transitioned from hardware to software | valinux.com as on June 22, 2001][13]
+
+### The spectacular rise and the devastating fall of VA Linux
+
+VA Research had a big year in 1999 and perhaps it was the biggest for them as they acquired many growing companies and competitors at that time, along with starting many innovative initiatives. The next year in 2000, they created a subsidiary in Japan named _VA Linux Systems Japan K.K._ They were at their peak that year.
+
+After they transitioned completely from hardware to software, stock prices started to fall drastically since 2002. It all happened because of slower-than-expected sales growth from new customers in the dot-com sector. In the later years they sold off a few brands and top employees also resigned in 2010.
+
+Gamestop finally [acquired][14] Geeknet Inc. (the new name of VA Linux) for $140 million on June 2, 2015.
+
+In case you’re curious for a detailed chronicle, I have separately created this [timeline][15], highlighting events year-wise.
+
+![Image Credit: Wikipedia][16]
+
+### What happened to VA Linux afterward?
+
+Geeknet owned by Gamestop is now an online retailer for the global geek community as [ThinkGeek][17].
+
+SourceForge and Slashdot were what still kept them linked with Linux and Open Source until _Dice Holdings_ acquired Slashdot, SourceForge, and Freecode.
+
+An [article][18] from 2016 sadly quotes in its final paragraph:
+
+> “Being acquired by a company that caters to gamers and does not have anything in particular to do with open source software may be a lackluster ending for what was once a spectacularly valuable Linux business.”
+
+Did we note Linux and Gamers? Does Linux really not have anything to do with Gaming? Are these two terms really so far apart? What about [Gaming on Linux][19]? What about [Open Source Games][20]?
+
+How could have the stalwarts from _VA Linux_ with years and years of experience in the Linux arena contributed to the Linux Gaming community? What could have happened had [Valve][21] (who are currently so [dedicated][22] towards Linux Gaming) acquired _VA Linux_ instead of Gamestop? Can we ponder?
+
+The seeds of ideas that were planted by _VA Research_ will continue to inspire the Linux and FOSS community because of its significant contributions in the world of Open Source. At _It’s FOSS,_ our heartfelt salute goes out to those noble ideas!
+
+Want to feel the nostalgia? Use the [timeline][15] dates with the [Way Back Machine][23] to check out previously owned _VA_ domains like _valinux.com_ or _varesearch.com_ in the past three decades! You can even check _linux.com_ that was once owned by _VA Linux Systems_.
+
+But wait, are we really done here? What happened to the subsidiary named _VA Linux Systems Japan K.K._? Well, it’s [a different story there][24] and still going strong with the original ideologies of _VA Linux_!
+
+![VA Linux booth circa 2000 | Image Credit: Storem][25]
+
+#### _VA Linux_ Subsidiary Still Operational in Japan!
+
+VA Linux is still operational through its [Japanese subsidiary][26]. It provides the following services:
+
+ * Failure Analysis and Support Services: [_VA Quest_][27]
+ * Entrusted Development Service
+ * Consulting Service
+
+
+
+_VA_ _Quest_ , in particular, continues its services as a failure-analysis solution for tracking down and dealing with kernel bugs which might be getting in its customers’ way since 2005. [Tetsuro Yogo][28] took over as the New President and CEO on April 3, 2017. Check out their timeline [here][29]! They are also [on GitHub][30]!
+
+You can also read about a recent development reported on August 2 last year, on this [translated][31] version of a Japanese IT news page. It’s an update about _VA Linux_ providing technical support service of “[Kubernetes][32]” container management software in Japan.
+
+Its good to know that their 18-year-old subsidiary is still doing well in Japan and the name of _VA Linux_ continues to flourish there even today!
+
+What are your views? Do you want to share anything on _VA Linux_? Please let us know in the comments section below.
+
+I hope you liked this first article in the Linux history series. If you know such interesting facts from the past that you would like us to cover here, please let us know.
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/story-of-va-linux/
+
+作者:[Avimanyu Bandyopadhyay][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/avimanyu/
+[b]: https://github.com/lujun9972
+[1]: https://en.wikipedia.org/wiki/Initial_public_offering
+[2]: https://www.forbes.com/1999/05/03/feat.html
+[3]: https://www.channelfutures.com/open-source/open-source-history-the-spectacular-rise-and-fall-of-va-linux
+[4]: https://www.gamestop.com/
+[5]: http://www.sun.com/
+[6]: https://en.wikipedia.org/wiki/Do_it_yourself
+[7]: https://www.urbandictionary.com/define.php?term=FTW
+[8]: https://www.linkedin.com/in/larryaugustin/
+[9]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2018/09/VA-Linux-Founder-Larry-Augustin.jpg?ssl=1
+[10]: https://www.linuxinsider.com/story/SourceForges-Larry-Augustin-A-Better-Way-to-Build-Web-Apps-62155.html
+[11]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2018/09/VA-Research-com-Snapshot-July-15-1997.jpg?ssl=1
+[12]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2018/09/VA-Research-com-Snapshot-Feb-16-1998.jpg?ssl=1
+[13]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2018/09/VA-Linux-com-Snapshot-June-22-2001.jpg?ssl=1
+[14]: http://geekgirlpenpals.com/geeknet-parent-company-to-thinkgeek-entered-agreement-with-gamestop/
+[15]: https://medium.com/@avimanyu786/a-timeline-of-va-linux-through-the-years-6813e2bd4b13
+[16]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/01/LNUX-stock-fall.png?ssl=1
+[17]: https://www.thinkgeek.com/
+[18]: https://www.channelfutures.com/open-source/open-source-history-spectacular-rise-and-fall-va-linux
+[19]: https://itsfoss.com/linux-gaming-distributions/
+[20]: https://en.wikipedia.org/wiki/Open-source_video_game
+[21]: https://www.valvesoftware.com/
+[22]: https://itsfoss.com/steam-play-proton/
+[23]: https://archive.org/web/web.php
+[24]: https://translate.google.com/translate?sl=auto&tl=en&js=y&prev=_t&hl=en&ie=UTF-8&u=https%3A%2F%2Fwww.valinux.co.jp%2Fcorp%2Fstatement%2F&edit-text=
+[25]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/01/va-linux-team-booth.jpg?resize=800%2C600&ssl=1
+[26]: https://www.valinux.co.jp/english/
+[27]: https://www.linux.com/news/va-linux-announces-linux-failure-analysis-service
+[28]: https://www.linkedin.com/in/yogo45/
+[29]: https://www.valinux.co.jp/english/about/timeline/
+[30]: https://github.com/vaj
+[31]: https://translate.google.com/translate?sl=auto&tl=en&js=y&prev=_t&hl=en&ie=UTF-8&u=https%3A%2F%2Fit.impressbm.co.jp%2Farticles%2F-%2F16499
+[32]: https://en.wikipedia.org/wiki/Kubernetes
diff --git a/sources/tech/20190202 CrossCode is an Awesome 16-bit Sci-Fi RPG Game.md b/sources/tech/20190202 CrossCode is an Awesome 16-bit Sci-Fi RPG Game.md
new file mode 100644
index 0000000000..15349fbf32
--- /dev/null
+++ b/sources/tech/20190202 CrossCode is an Awesome 16-bit Sci-Fi RPG Game.md
@@ -0,0 +1,98 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (CrossCode is an Awesome 16-bit Sci-Fi RPG Game)
+[#]: via: (https://itsfoss.com/crosscode-game/)
+[#]: author: (Phillip Prado https://itsfoss.com/author/phillip/)
+
+CrossCode is an Awesome 16-bit Sci-Fi RPG Game
+======
+
+What starts off as an obvious sci-fi 16-bit 2D action RPG quickly turns into a JRPG inspired pseudo-MMO open-world puzzle platformer. Though at first glance this sounds like a jumbled mess, [CrossCode][1] manages to bundle all of its influences into a seamless gaming experience that feels nothing shy of excellent.
+
+Note: CrossCode is not open source software. We have covered it because it is Linux specific.
+
+![][2]
+
+### Story
+
+You play as Lea, a girl who has forgotten her identity, where she comes from, and how to speak. As you walk through the early parts of the story, you come to find that you are a character in a digital world — a video game. But not just any video game — an MMO. And you, Lea, must venture into the digital world known as CrossWorlds in order to unravel the secrets of your past.
+
+As you progress through the game, you unveil more and more about yourself, learning how you got to this point in the first place. This doesn’t sound too crazy of a story, but the gameplay implementation and appropriately paced storyline make for quite a captivating experience.
+
+The story unfolds at a satisfying speed and the character’s development is genuinely gratifying — both fictionally and mechanically. The only critique I had was that it felt like the introductory segment took a little too long — dragging the tutorial into the gameplay for quite some time, and keeping the player from getting into the real meat of the game.
+
+All-in-all, CrossCode’s story did not leave me wanting, not even in the slightest. It’s deep, fun, heartwarming, intelligent, and all while never sacrificing great character development. Without spoiling anything, I will say that if you are someone that enjoys a good story, you will need to give CrossCode a look.
+
+![][3]
+
+### Gameplay
+
+Yes, the story is great and all, but if there is one place that CrossCode truly shines, it has to be its gameplay. The game’s mechanics are fast-paced, challenging, intuitive, and downright fun!
+
+You start off with a dodge, block, melee, and ranged attack, each slowly developing overtime as the character tree is unlocked. This all-too-familiar mix of combat elements balances skill and hack-n-slash mechanics in a way that doesn’t conflict with one another.
+
+The game utilizes this mix of skills to create some amazing puzzle solving and combat that helps CrossCode’s gameplay truly stand out. Whether you are making your way through one of the four main dungeons, or you are taking a boss head on, you can’t help but periodically stop and think “wow, this game is great!”
+
+Though this has to be the game’s strongest feature, it can also be the game’s biggest downfall. Part of the reason that the story and character progression is so satisfying is because the combat and puzzle mechanics can be incredibly challenging, and that’s putting it lightly.
+
+There are times in which CrossCode’s gameplay feels downright impossible. Bosses take an expert amount of focus, and dungeons require all of the patience you can muster up just to simply finish them.
+
+![][4]
+
+The game requires a type of dexterity I have not quite had to master yet. I mean, sure there are more challenging puzzle games out there, yes there are more difficult platformers, and of course there are more grueling RPGs, but adding all of these elements into one game while spurring the player along with an alluring story requires a level of mechanical balance that I haven’t found in many other games.
+
+And though there were times I felt the gameplay was flat out punishing, I was constantly reminded that this is simply not the case. Death doesn’t cause serious character regression, you can take a break from dungeons when you feel overwhelmed, and there is a plethora of checkpoints throughout the game’s most difficult parts to help the player along.
+
+Where other games fall short by giving the player nothing to lose, this reality redeems CrossCode amid its rigorous gameplay. CrossCode may be one of the only games I know that takes two common flaws in games and holds the tension between them so well that it becomes one of the game’s best strengths.
+
+![][5]
+
+### Design
+
+One of the things that surprised me most about CrossCode was how well it’s world and sound design come together. Right off the bat, from the moment you boot the game up, it is clear the developers meant business when designing CrossCode.
+
+Being in a fictional MMO world, the game’s character ensemble is vibrant and distinctive, each having its own tone and personality. The games sound and motion graphics are tactile and responsive, giving the player a healthy amount of feedback during gameplay. And the soundtrack behind the game is simply beautiful, ebbing and flowing between intense moments of combat to blissful moments of exploration.
+
+If I had to fault CrossCode in this category it would have to be in the size of the map. Yes, the dungeons are long, and yes, the CrossWorlds map looks gigantic, but I still wanted more to explore outside crippling dungeons. The game is beautiful and fluid, but akin to RPG games of yore — aka. Zelda games pre-Breath of the Wild — I wish there was just a little more for me to freely explore.
+
+It is obvious that the developers really cared about this aspect of the game, and you can tell they spent an incredible amount of time developing its design. CrossCode set itself up for success here in its plot and content, and the developers capitalize on the opportunity, knocking another category out of the park.
+
+![][6]
+
+### Conclusion
+
+In the end, it is obvious how I feel about this game. And just in case you haven’t caught on yet…I love it. It holds a near perfect balance between being difficult and rewarding, simple and complex, linear and open, making CrossCode one of [the best Linux games][7] out there.
+
+Developed by [Radical Fish Games][8], CrossCode was officially released for Linux on September 21, 2018, seven years after development began. You can pick up the game over on [Steam][9], [GOG][10], or [Humble Bundle][11].
+
+If you play games regularly, you may want to [subscribe to Humble Monthly][12] ([affiliate][13] link). For $12 per month, you’ll get games worth over $100 (not all for Linux). Over 450,000 gamers worldwide use Humble Monthly.
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/crosscode-game/
+
+作者:[Phillip Prado][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/phillip/
+[b]: https://github.com/lujun9972
+[1]: http://www.cross-code.com/en/home
+[2]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/02/CrossCode-Level-up.png?fit=800%2C451&ssl=1
+[3]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/02/CrossCode-Equpiment.png?fit=800%2C451&ssl=1
+[4]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/02/CrossCode-character-development.png?fit=800%2C451&ssl=1
+[5]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/02/CrossCode-Environment.png?fit=800%2C451&ssl=1
+[6]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/02/CrossCode-dungeon.png?fit=800%2C451&ssl=1
+[7]: https://itsfoss.com/free-linux-games/
+[8]: http://www.radicalfishgames.com/
+[9]: https://store.steampowered.com/app/368340/CrossCode/
+[10]: https://www.gog.com/game/crosscode
+[11]: https://www.humblebundle.com/store/crosscode
+[12]: https://www.humblebundle.com/monthly?partner=itsfoss
+[13]: https://itsfoss.com/affiliate-policy/
diff --git a/sources/tech/20190204 Top 5 open source network monitoring tools.md b/sources/tech/20190204 Top 5 open source network monitoring tools.md
new file mode 100644
index 0000000000..5b6e7f1bfa
--- /dev/null
+++ b/sources/tech/20190204 Top 5 open source network monitoring tools.md
@@ -0,0 +1,125 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Top 5 open source network monitoring tools)
+[#]: via: (https://opensource.com/article/19/2/network-monitoring-tools)
+[#]: author: (Paul Bischoff https://opensource.com/users/paulbischoff)
+
+Top 5 open source network monitoring tools
+======
+Keep an eye on your network to avoid downtime with these monitoring tools.
+
+
+Maintaining a live network is one of a system administrator's most essential tasks, and keeping a watchful eye over connected systems is essential to keeping a network functioning at its best.
+
+There are many different ways to keep tabs on a modern network. Network monitoring tools are designed for the specific purpose of monitoring network traffic and response times, while application performance management solutions use agents to pull performance data from the application stack. If you have a live network, you need network monitoring to make sure you aren't vulnerable to an attacker. Likewise, if you rely on lots of different applications to run your daily operations, you will need an [application performance management][1] solution as well.
+
+This article will focus on open source network monitoring tools. These tools help monitor individual nodes and applications for signs of poor performance. Through one window, you can view the performance of an entire network and even get alerts to keep you in the loop if you're away from your desk.
+
+Before we get into the top five network monitoring tools, let's look more closely at the reasons you need to use one.
+
+### Why do I need a network monitoring tool?
+
+Network monitoring tools are vital to maintaining networks because they allow you to keep an eye on devices connected to the network from a central location. These tools help flag devices with subpar performance so you can step in and run troubleshooting to get to the root of the problem.
+
+Running in-depth troubleshooting can minimize performance problems and prevent security breaches. In practical terms, this keeps the network online and eliminates the risk of falling victim to unnecessary downtime. Regular network maintenance can also help prevent outages that could take thousands of users offline.
+
+A network monitoring tool enables you to:
+
+ * Autodiscover devices connected to your network
+ * View live and historic performance data for a range of devices and applications
+ * Configure alerts to notify you of unusual activity
+ * Generate graphs and reports to analyze network activity in greater depth
+
+### The top 5 open source network monitoring tools
+
+Now, that you know why you need a network monitoring tool, take a look at the top 5 open source tools to see which might best meet your needs.
+
+#### Cacti
+
+
+
+If you know anything about open source network monitoring tools, you've probably heard of [Cacti][2]. It's a graphing solution that acts as an addition to [RRDTool][3] and is used by many network administrators to collect performance data in LANs. Cacti comes with Simple Network Management Protocol (SNMP) support on Windows and Linux to create graphs of traffic data.
+
+Cacti typically works by using data sourced from user-created scripts that ping hosts on a network. The values returned by the scripts are stored in a MySQL database, and this data is used to generate graphs.
+
+This sounds complicated, but Cacti has templates to help speed the process along. You can also create a graph or data source template that can be used for future monitoring activity. If you'd like to try it out, [download Cacti][4] for free on Linux and Windows.
+
+#### Nagios Core
+
+
+
+[Nagios Core][5] is one of the most well-known open source monitoring tools. It provides a network monitoring experience that combines open source extensibility with a top-of-the-line user interface. With Nagios Core, you can auto-discover devices, monitor connected systems, and generate sophisticated performance graphs.
+
+Support for customization is one of the main reasons Nagios Core has become so popular. For example, [Nagios V-Shell][6] was added as a PHP web interface built in AngularJS, searchable tables and a RESTful API designed with CodeIgniter.
+
+If you need more versatility, you can check the Nagios Exchange, which features a range of add-ons that can incorporate additional features into your network monitoring. These range from the strictly cosmetic to monitoring enhancements like [nagiosgraph][7]. You can try it out by [downloading Nagios Core][8] for free.
+
+#### Icinga 2
+
+
+
+[Icinga 2][9] is another widely used open source network monitoring tool. It builds on the groundwork laid by Nagios Core. It has a flexible RESTful API that allows you to enter your own configurations and view live performance data through the dashboard. Dashboards are customizable, so you can choose exactly what information you want to monitor in your network.
+
+Visualization is an area where Icinga 2 performs particularly well. It has native support for Graphite and InfluxDB, which can turn performance data into full-featured graphs for deeper performance analysis.
+
+Icinga2 also allows you to monitor both live and historical performance data. It offers excellent alerts capabilities for live monitoring, and you can configure it to send notifications of performance problems by email or text. You can [download Icinga 2][10] for free for Windows, Debian, DHEL, SLES, Ubuntu, Fedora, and OpenSUSE.
+
+#### Zabbix
+
+
+
+[Zabbix][11] is another industry-leading open source network monitoring tool, used by companies from Dell to Salesforce on account of its malleable network monitoring experience. Zabbix does network, server, cloud, application, and services monitoring very well.
+
+You can track network information such as network bandwidth usage, network health, and configuration changes, and weed out problems that need to be addressed. Performance data in Zabbix is connected through SNMP, Intelligent Platform Management Interface (IPMI), and IPv6.
+
+Zabbix offers a high level of convenience compared to other open source monitoring tools. For instance, you can automatically detect devices connected to your network before using an out-of-the-box template to begin monitoring your network. You can [download Zabbix][12] for free for CentOS, Debian, Oracle Linux, Red Hat Enterprise Linux, Ubuntu, and Raspbian.
+
+#### Prometheus
+
+
+
+[Prometheus][13] is an open source network monitoring tool with a large community following. It was built specifically for monitoring time-series data. You can identify time-series data by metric name or key-value pairs. Time-series data is stored on local disks so that it's easy to access in an emergency.
+
+Prometheus' [Alertmanager][14] allows you to view notifications every time it raises an event. Alertmanager can send notifications via email, PagerDuty, or OpsGenie, and you can silence alerts if necessary.
+
+Prometheus' visual elements are excellent and allow you to switch from the browser to the template language and Grafana integration. You can also integrate various third-party data sources into Prometheus from Docker, StatsD, and JMX to customize your Prometheus experience.
+
+As a network monitoring tool, Prometheus is suitable for organizations of all sizes. The onboard integrations and the easy-to-use Alertmanager make it capable of handling any workload, regardless of its size. You can [download Prometheus][15] for free.
+
+### Which are best?
+
+No matter what industry you're working in, if you rely on a network to do business, you need to implement some form of network monitoring. Network monitoring tools are an invaluable resource that help provide you with the visibility to keep your systems online. Monitoring your systems will give you the best chance to keep your equipment in working order.
+
+As the tools on this list show, you don't need to spend an exorbitant amount of money to reap the rewards of network monitoring. Of the five, I believe Icinga 2 and Zabbix are the best options for providing you with everything you need to start monitoring your network to keep it online. Staying vigilant will help to minimize the change of being caught off-guard by performance issues.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/2/network-monitoring-tools
+
+作者:[Paul Bischoff][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/paulbischoff
+[b]: https://github.com/lujun9972
+[1]: https://www.comparitech.com/net-admin/application-performance-management/
+[2]: https://www.cacti.net/index.php
+[3]: https://en.wikipedia.org/wiki/RRDtool
+[4]: https://www.cacti.net/download_cacti.php
+[5]: https://www.nagios.org/projects/nagios-core/
+[6]: https://exchange.nagios.org/directory/Addons/Frontends-%28GUIs-and-CLIs%29/Web-Interfaces/Nagios-V-2DShell/details
+[7]: https://exchange.nagios.org/directory/Addons/Graphing-and-Trending/nagiosgraph/details#_ga=2.79847774.890594951.1545045715-2010747642.1545045715
+[8]: https://www.nagios.org/downloads/nagios-core/
+[9]: https://icinga.com/products/icinga-2/
+[10]: https://icinga.com/download/
+[11]: https://www.zabbix.com/
+[12]: https://www.zabbix.com/download
+[13]: https://prometheus.io/
+[14]: https://prometheus.io/docs/alerting/alertmanager/
+[15]: https://prometheus.io/download/
diff --git a/sources/tech/20190205 12 Methods To Check The Hard Disk And Hard Drive Partition On Linux.md b/sources/tech/20190205 12 Methods To Check The Hard Disk And Hard Drive Partition On Linux.md
new file mode 100644
index 0000000000..ef8c8dc460
--- /dev/null
+++ b/sources/tech/20190205 12 Methods To Check The Hard Disk And Hard Drive Partition On Linux.md
@@ -0,0 +1,435 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (12 Methods To Check The Hard Disk And Hard Drive Partition On Linux)
+[#]: via: (https://www.2daygeek.com/linux-command-check-hard-disks-partitions/)
+[#]: author: (Vinoth Kumar https://www.2daygeek.com/author/vinoth/)
+
+12 Methods To Check The Hard Disk And Hard Drive Partition On Linux
+======
+
+Usually Linux admins check the available hard disk and it’s partitions whenever they want to add a new disks or additional partition in the system.
+
+We used to check the partition table of our hard disk to view the disk partitions.
+
+This will help you to view how many partitions were already created on the disk. Also, it allow us to verify whether we have any free space or not.
+
+In general hard disks can be divided into one or more logical disks called partitions.
+
+Each partitions can be used as a separate disk with its own file system and partition information is stored in a partition table.
+
+It’s a 64-byte data structure. The partition table is part of the master boot record (MBR), which is a small program that is executed when a computer boots.
+
+The partition information are saved in the 0 the sector of the disk. Make a note, all the partitions must be formatted with an appropriate file system before files can be written to it.
+
+This can be verified using the following 12 methods.
+
+ * **`fdisk:`** manipulate disk partition table
+ * **`sfdisk:`** display or manipulate a disk partition table
+ * **`cfdisk:`** display or manipulate a disk partition table
+ * **`parted:`** a partition manipulation program
+ * **`lsblk:`** lsblk lists information about all available or the specified block devices.
+ * **`blkid:`** locate/print block device attributes.
+ * **`hwinfo:`** hwinfo stands for hardware information tool is another great utility that used to probe for the hardware present in the system.
+ * **`lshw:`** lshw is a small tool to extract detailed information on the hardware configuration of the machine.
+ * **`inxi:`** inxi is a command line system information script built for for console and IRC.
+ * **`lsscsi:`** list SCSI devices (or hosts) and their attributes
+ * **`cat /proc/partitions:`**
+ * **`ls -lh /dev/disk/:`** The directory contains Disk manufacturer name, serial number, partition ID and real block device files, Those were symlink with real block device files.
+
+
+
+### How To Check Hard Disk And Hard Drive Partition In Linux Using fdisk Command?
+
+**[fdisk][1]** stands for fixed disk or format disk is a cli utility that allow users to perform following actions on disks. It allows us to view, create, resize, delete, move and copy the partitions.
+
+```
+# fdisk -l
+
+Disk /dev/sda: 30 GiB, 32212254720 bytes, 62914560 sectors
+Units: sectors of 1 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated 512 = 512 bytes
+Sector size (logical/physical): 512 bytes / 512 bytes
+I/O size (minimum/optimal): 512 bytes / 512 bytes
+Disklabel type: dos
+Disk identifier: 0xeab59449
+
+Device Boot Start End Sectors Size Id Type
+/dev/sda1 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated 20973568 62914559 41940992 20G 83 Linux
+
+
+Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 sectors
+Units: sectors of 1 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated 512 = 512 bytes
+Sector size (logical/physical): 512 bytes / 512 bytes
+I/O size (minimum/optimal): 512 bytes / 512 bytes
+
+
+Disk /dev/sdc: 10 GiB, 10737418240 bytes, 20971520 sectors
+Units: sectors of 1 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated 512 = 512 bytes
+Sector size (logical/physical): 512 bytes / 512 bytes
+I/O size (minimum/optimal): 512 bytes / 512 bytes
+Disklabel type: dos
+Disk identifier: 0x8cc8f9e5
+
+Device Boot Start End Sectors Size Id Type
+/dev/sdc1 2048 2099199 2097152 1G 83 Linux
+/dev/sdc3 4196352 6293503 2097152 1G 83 Linux
+/dev/sdc4 6293504 20971519 14678016 7G 5 Extended
+/dev/sdc5 6295552 8392703 2097152 1G 83 Linux
+
+
+Disk /dev/sdd: 10 GiB, 10737418240 bytes, 20971520 sectors
+Units: sectors of 1 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated 512 = 512 bytes
+Sector size (logical/physical): 512 bytes / 512 bytes
+I/O size (minimum/optimal): 512 bytes / 512 bytes
+
+
+Disk /dev/sde: 10 GiB, 10737418240 bytes, 20971520 sectors
+Units: sectors of 1 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated 512 = 512 bytes
+Sector size (logical/physical): 512 bytes / 512 bytes
+I/O size (minimum/optimal): 512 bytes / 512 bytes
+```
+
+### How To Check Hard Disk And Hard Drive Partition In Linux Using sfdisk Command?
+
+sfdisk is a script-oriented tool for partitioning any block device. sfdisk supports MBR (DOS), GPT, SUN and SGI disk labels, but no longer provides any functionality for CHS (Cylinder-Head-Sector) addressing.
+
+```
+# sfdisk -l
+
+Disk /dev/sda: 30 GiB, 32212254720 bytes, 62914560 sectors
+Units: sectors of 1 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated 512 = 512 bytes
+Sector size (logical/physical): 512 bytes / 512 bytes
+I/O size (minimum/optimal): 512 bytes / 512 bytes
+Disklabel type: dos
+Disk identifier: 0xeab59449
+
+Device Boot Start End Sectors Size Id Type
+/dev/sda1 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated 20973568 62914559 41940992 20G 83 Linux
+
+
+Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 sectors
+Units: sectors of 1 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated 512 = 512 bytes
+Sector size (logical/physical): 512 bytes / 512 bytes
+I/O size (minimum/optimal): 512 bytes / 512 bytes
+
+
+Disk /dev/sdc: 10 GiB, 10737418240 bytes, 20971520 sectors
+Units: sectors of 1 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated 512 = 512 bytes
+Sector size (logical/physical): 512 bytes / 512 bytes
+I/O size (minimum/optimal): 512 bytes / 512 bytes
+Disklabel type: dos
+Disk identifier: 0x8cc8f9e5
+
+Device Boot Start End Sectors Size Id Type
+/dev/sdc1 2048 2099199 2097152 1G 83 Linux
+/dev/sdc3 4196352 6293503 2097152 1G 83 Linux
+/dev/sdc4 6293504 20971519 14678016 7G 5 Extended
+/dev/sdc5 6295552 8392703 2097152 1G 83 Linux
+
+
+Disk /dev/sdd: 10 GiB, 10737418240 bytes, 20971520 sectors
+Units: sectors of 1 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated 512 = 512 bytes
+Sector size (logical/physical): 512 bytes / 512 bytes
+I/O size (minimum/optimal): 512 bytes / 512 bytes
+
+
+Disk /dev/sde: 10 GiB, 10737418240 bytes, 20971520 sectors
+Units: sectors of 1 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated 512 = 512 bytes
+Sector size (logical/physical): 512 bytes / 512 bytes
+I/O size (minimum/optimal): 512 bytes / 512 bytes
+```
+
+### How To Check Hard Disk And Hard Drive Partition In Linux Using cfdisk Command?
+
+cfdisk is a curses-based program for partitioning any block device. The default device is /dev/sda. It provides basic partitioning functionality with a user-friendly interface.
+
+```
+# cfdisk /dev/sdc
+ Disk: /dev/sdc
+ Size: 10 GiB, 10737418240 bytes, 20971520 sectors
+ Label: dos, identifier: 0x8cc8f9e5
+
+ Device Boot Start End Sectors Size Id Type
+>> /dev/sdc1 2048 2099199 2097152 1G 83 Linux
+ Free space 2099200 4196351 2097152 1G
+ /dev/sdc3 4196352 6293503 2097152 1G 83 Linux
+ /dev/sdc4 6293504 20971519 14678016 7G 5 Extended
+ ├─/dev/sdc5 6295552 8392703 2097152 1G 83 Linux
+ └─Free space 8394752 20971519 12576768 6G
+
+
+
+ ┌───────────────────────────────────────────────────────────────────────────────┐
+ │ Partition type: Linux (83) │
+ │Filesystem UUID: d17e3c31-e2c9-4f11-809c-94a549bc43b7 │
+ │ Filesystem: ext2 │
+ │ Mountpoint: /part1 (mounted) │
+ └───────────────────────────────────────────────────────────────────────────────┘
+ [Bootable] [ Delete ] [ Quit ] [ Type ] [ Help ] [ Write ]
+ [ Dump ]
+
+ Quit program without writing changes
+```
+
+### How To Check Hard Disk And Hard Drive Partition In Linux Using parted Command?
+
+**[parted][2]** is a program to manipulate disk partitions. It supports multiple partition table formats, including MS-DOS and GPT. It is useful for creating space for new operating systems, reorganising disk usage, and copying data to new hard disks.
+
+```
+# parted -l
+
+Model: ATA VBOX HARDDISK (scsi)
+Disk /dev/sda: 32.2GB
+Sector size (logical/physical): 512B/512B
+Partition Table: msdos
+Disk Flags:
+
+Number Start End Size Type File system Flags
+ 1 10.7GB 32.2GB 21.5GB primary ext4 boot
+
+
+Model: ATA VBOX HARDDISK (scsi)
+Disk /dev/sdb: 10.7GB
+Sector size (logical/physical): 512B/512B
+Partition Table: msdos
+Disk Flags:
+
+Model: ATA VBOX HARDDISK (scsi)
+Disk /dev/sdc: 10.7GB
+Sector size (logical/physical): 512B/512B
+Partition Table: msdos
+Disk Flags:
+
+Number Start End Size Type File system Flags
+ 1 1049kB 1075MB 1074MB primary ext2
+ 3 2149MB 3222MB 1074MB primary ext4
+ 4 3222MB 10.7GB 7515MB extended
+ 5 3223MB 4297MB 1074MB logical
+
+
+Model: ATA VBOX HARDDISK (scsi)
+Disk /dev/sdd: 10.7GB
+Sector size (logical/physical): 512B/512B
+Partition Table: msdos
+Disk Flags:
+
+Model: ATA VBOX HARDDISK (scsi)
+Disk /dev/sde: 10.7GB
+Sector size (logical/physical): 512B/512B
+Partition Table: msdos
+Disk Flags:
+```
+
+### How To Check Hard Disk And Hard Drive Partition In Linux Using lsblk Command?
+
+lsblk lists information about all available or the specified block devices. The lsblk command reads the sysfs filesystem and udev db to gather information.
+
+If the udev db is not available or lsblk is compiled without udev support than it tries to read LABELs, UUIDs and filesystem types from the block device. In this case root permissions are necessary. The command prints all block devices (except RAM disks) in a tree-like format by default.
+
+```
+# lsblk
+NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
+sda 8:0 0 30G 0 disk
+└─sda1 8:1 0 20G 0 part /
+sdb 8:16 0 10G 0 disk
+sdc 8:32 0 10G 0 disk
+├─sdc1 8:33 0 1G 0 part /part1
+├─sdc3 8:35 0 1G 0 part /part2
+├─sdc4 8:36 0 1K 0 part
+└─sdc5 8:37 0 1G 0 part
+sdd 8:48 0 10G 0 disk
+sde 8:64 0 10G 0 disk
+sr0 11:0 1 1024M 0 rom
+```
+
+### How To Check Hard Disk And Hard Drive Partition In Linux Using blkid Command?
+
+blkid is a command-line utility to locate/print block device attributes. It uses libblkid library to get disk partition UUID in Linux system.
+
+```
+# 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"
+```
+
+### How To Check Hard Disk And Hard Drive Partition In Linux Using hwinfo Command?
+
+**[hwinfo][3]** stands for hardware information tool is another great utility that used to probe for the hardware present in the system and display detailed information about varies hardware components in human readable format.
+
+```
+# hwinfo --block --short
+disk:
+ /dev/sdd VBOX HARDDISK
+ /dev/sdb VBOX HARDDISK
+ /dev/sde VBOX HARDDISK
+ /dev/sdc VBOX HARDDISK
+ /dev/sda VBOX HARDDISK
+partition:
+ /dev/sdc1 Partition
+ /dev/sdc3 Partition
+ /dev/sdc4 Partition
+ /dev/sdc5 Partition
+ /dev/sda1 Partition
+cdrom:
+ /dev/sr0 VBOX CD-ROM
+```
+
+### How To Check Hard Disk And Hard Drive Partition In Linux Using lshw Command?
+
+**[lshw][4]** (stands for Hardware Lister) is a small nifty tool that generates detailed reports about various hardware components on the machine such as memory configuration, firmware version, mainboard configuration, CPU version and speed, cache configuration, usb, network card, graphics cards, multimedia, printers, bus speed, etc.
+
+```
+# lshw -short -class disk -class volume
+H/W path Device Class Description
+===================================================
+/0/3/0.0.0 /dev/cdrom disk CD-ROM
+/0/4/0.0.0 /dev/sda disk 32GB VBOX HARDDISK
+/0/4/0.0.0/1 /dev/sda1 volume 19GiB EXT4 volume
+/0/5/0.0.0 /dev/sdb disk 10GB VBOX HARDDISK
+/0/6/0.0.0 /dev/sdc disk 10GB VBOX HARDDISK
+/0/6/0.0.0/1 /dev/sdc1 volume 1GiB Linux filesystem partition
+/0/6/0.0.0/3 /dev/sdc3 volume 1GiB EXT4 volume
+/0/6/0.0.0/4 /dev/sdc4 volume 7167MiB Extended partition
+/0/6/0.0.0/4/5 /dev/sdc5 volume 1GiB Linux filesystem partition
+/0/7/0.0.0 /dev/sdd disk 10GB VBOX HARDDISK
+/0/8/0.0.0 /dev/sde disk 10GB VBOX HARDDISK
+```
+
+### How To Check Hard Disk And Hard Drive Partition In Linux Using inxi Command?
+
+**[inxi][5]** is a nifty tool to check hardware information on Linux and offers wide range of option to get all the hardware information on Linux system that i never found in any other utility which are available in Linux. It was forked from the ancient and mindbendingly perverse yet ingenius infobash, by locsmif.
+
+```
+# inxi -Dp
+Drives: HDD Total Size: 75.2GB (22.3% used)
+ ID-1: /dev/sda model: VBOX_HARDDISK size: 32.2GB
+ ID-2: /dev/sdb model: VBOX_HARDDISK size: 10.7GB
+ ID-3: /dev/sdc model: VBOX_HARDDISK size: 10.7GB
+ ID-4: /dev/sdd model: VBOX_HARDDISK size: 10.7GB
+ ID-5: /dev/sde model: VBOX_HARDDISK size: 10.7GB
+Partition: ID-1: / size: 20G used: 16G (85%) fs: ext4 dev: /dev/sda1
+ ID-3: /part1 size: 1008M used: 1.3M (1%) fs: ext2 dev: /dev/sdc1
+ ID-4: /part2 size: 976M used: 2.6M (1%) fs: ext4 dev: /dev/sdc3
+```
+
+### How To Check Hard Disk And Hard Drive Partition In Linux Using lsscsi Command?
+
+Uses information in sysfs (Linux kernel series 2.6 and later) to list SCSI devices (or hosts) currently attached to the system. Options can be used to control the amount and form of information provided for each device.
+
+By default in this utility device node names (e.g. “/dev/sda” or “/dev/root_disk”) are obtained by noting the major and minor numbers for the listed device obtained from sysfs
+
+```
+# lsscsi
+[0:0:0:0] cd/dvd VBOX CD-ROM 1.0 /dev/sr0
+[2:0:0:0] disk ATA VBOX HARDDISK 1.0 /dev/sda
+[3:0:0:0] disk ATA VBOX HARDDISK 1.0 /dev/sdb
+[4:0:0:0] disk ATA VBOX HARDDISK 1.0 /dev/sdc
+[5:0:0:0] disk ATA VBOX HARDDISK 1.0 /dev/sdd
+[6:0:0:0] disk ATA VBOX HARDDISK 1.0 /dev/sde
+```
+
+### How To Check Hard Disk And Hard Drive Partition In Linux Using ProcFS?
+
+The proc filesystem (procfs) is a special filesystem in Unix-like operating systems that presents information about processes and other system information.
+
+It’s sometimes referred to as a process information pseudo-file system. It doesn’t contain ‘real’ files but runtime system information (e.g. system memory, devices mounted, hardware configuration, etc).
+
+```
+# cat /proc/partitions
+major minor #blocks name
+
+ 11 0 1048575 sr0
+ 8 0 31457280 sda
+ 8 1 20970496 sda1
+ 8 16 10485760 sdb
+ 8 32 10485760 sdc
+ 8 33 1048576 sdc1
+ 8 35 1048576 sdc3
+ 8 36 1 sdc4
+ 8 37 1048576 sdc5
+ 8 48 10485760 sdd
+ 8 64 10485760 sde
+```
+
+### How To Check Hard Disk And Hard Drive Partition In Linux Using /dev/disk Path?
+
+This directory contains four directories, it’s by-id, by-uuid, by-path and by-partuuid. Each directory contains some useful information and it’s symlinked with real block device files.
+
+```
+# ls -lh /dev/disk/by-id
+total 0
+lrwxrwxrwx 1 root root 9 Feb 2 23:08 ata-VBOX_CD-ROM_VB0-01f003f6 -> ../../sr0
+lrwxrwxrwx 1 root root 9 Feb 3 00:14 ata-VBOX_HARDDISK_VB26e827b5-668ab9f4 -> ../../sda
+lrwxrwxrwx 1 root root 10 Feb 3 00:14 ata-VBOX_HARDDISK_VB26e827b5-668ab9f4-part1 -> ../../sda1
+lrwxrwxrwx 1 root root 9 Feb 2 23:39 ata-VBOX_HARDDISK_VB3774c742-fb2b3e4e -> ../../sdd
+lrwxrwxrwx 1 root root 9 Feb 2 23:39 ata-VBOX_HARDDISK_VBe72672e5-029a918e -> ../../sdc
+lrwxrwxrwx 1 root root 10 Feb 2 23:39 ata-VBOX_HARDDISK_VBe72672e5-029a918e-part1 -> ../../sdc1
+lrwxrwxrwx 1 root root 10 Feb 2 23:39 ata-VBOX_HARDDISK_VBe72672e5-029a918e-part3 -> ../../sdc3
+lrwxrwxrwx 1 root root 10 Feb 2 23:39 ata-VBOX_HARDDISK_VBe72672e5-029a918e-part4 -> ../../sdc4
+lrwxrwxrwx 1 root root 10 Feb 2 23:39 ata-VBOX_HARDDISK_VBe72672e5-029a918e-part5 -> ../../sdc5
+lrwxrwxrwx 1 root root 9 Feb 2 23:39 ata-VBOX_HARDDISK_VBed1cf451-9f51c5f6 -> ../../sdb
+lrwxrwxrwx 1 root root 9 Feb 2 23:39 ata-VBOX_HARDDISK_VBf242dbdd-49a982eb -> ../../sde
+```
+
+Output of by-uuid
+
+```
+# ls -lh /dev/disk/by-uuid
+total 0
+lrwxrwxrwx 1 root root 10 Feb 2 23:39 ca307aa4-0866-49b1-8184-004025789e63 -> ../../sdc3
+lrwxrwxrwx 1 root root 10 Feb 2 23:39 d17e3c31-e2c9-4f11-809c-94a549bc43b7 -> ../../sdc1
+lrwxrwxrwx 1 root root 10 Feb 3 00:14 d92fa769-e00f-4fd7-b6ed-ecf7224af7fa -> ../../sda1
+```
+
+Output of by-path
+
+```
+# ls -lh /dev/disk/by-path
+total 0
+lrwxrwxrwx 1 root root 9 Feb 2 23:08 pci-0000:00:01.1-ata-1 -> ../../sr0
+lrwxrwxrwx 1 root root 9 Feb 3 00:14 pci-0000:00:0d.0-ata-1 -> ../../sda
+lrwxrwxrwx 1 root root 10 Feb 3 00:14 pci-0000:00:0d.0-ata-1-part1 -> ../../sda1
+lrwxrwxrwx 1 root root 9 Feb 2 23:39 pci-0000:00:0d.0-ata-2 -> ../../sdb
+lrwxrwxrwx 1 root root 9 Feb 2 23:39 pci-0000:00:0d.0-ata-3 -> ../../sdc
+lrwxrwxrwx 1 root root 10 Feb 2 23:39 pci-0000:00:0d.0-ata-3-part1 -> ../../sdc1
+lrwxrwxrwx 1 root root 10 Feb 2 23:39 pci-0000:00:0d.0-ata-3-part3 -> ../../sdc3
+lrwxrwxrwx 1 root root 10 Feb 2 23:39 pci-0000:00:0d.0-ata-3-part4 -> ../../sdc4
+lrwxrwxrwx 1 root root 10 Feb 2 23:39 pci-0000:00:0d.0-ata-3-part5 -> ../../sdc5
+lrwxrwxrwx 1 root root 9 Feb 2 23:39 pci-0000:00:0d.0-ata-4 -> ../../sdd
+lrwxrwxrwx 1 root root 9 Feb 2 23:39 pci-0000:00:0d.0-ata-5 -> ../../sde
+```
+
+Output of by-partuuid
+
+```
+# ls -lh /dev/disk/by-partuuid
+total 0
+lrwxrwxrwx 1 root root 10 Feb 2 23:39 8cc8f9e5-01 -> ../../sdc1
+lrwxrwxrwx 1 root root 10 Feb 2 23:39 8cc8f9e5-03 -> ../../sdc3
+lrwxrwxrwx 1 root root 10 Feb 2 23:39 8cc8f9e5-04 -> ../../sdc4
+lrwxrwxrwx 1 root root 10 Feb 2 23:39 8cc8f9e5-05 -> ../../sdc5
+lrwxrwxrwx 1 root root 10 Feb 3 00:14 eab59449-01 -> ../../sda1
+```
+
+--------------------------------------------------------------------------------
+
+via: https://www.2daygeek.com/linux-command-check-hard-disks-partitions/
+
+作者:[Vinoth Kumar][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.2daygeek.com/author/vinoth/
+[b]: https://github.com/lujun9972
+[1]: https://www.2daygeek.com/linux-fdisk-command-to-manage-disk-partitions/
+[2]: https://www.2daygeek.com/how-to-manage-disk-partitions-using-parted-command/
+[3]: https://www.2daygeek.com/hwinfo-check-display-detect-system-hardware-information-linux/
+[4]: https://www.2daygeek.com/lshw-find-check-system-hardware-information-details-linux/
+[5]: https://www.2daygeek.com/inxi-system-hardware-information-on-linux/
diff --git a/sources/tech/20190205 5 Linux GUI Cloud Backup Tools.md b/sources/tech/20190205 5 Linux GUI Cloud Backup Tools.md
new file mode 100644
index 0000000000..45e0bf1342
--- /dev/null
+++ b/sources/tech/20190205 5 Linux GUI Cloud Backup Tools.md
@@ -0,0 +1,251 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (5 Linux GUI Cloud Backup Tools)
+[#]: via: (https://www.linux.com/blog/learn/2019/2/5-linux-gui-cloud-backup-tools)
+[#]: author: (Jack Wallen https://www.linux.com/users/jlwallen)
+
+5 Linux GUI Cloud Backup Tools
+======
+
+
+We have reached a point in time where most every computer user depends upon the cloud … even if only as a storage solution. What makes the cloud really important to users, is when it’s employed as a backup. Why is that such a game changer? By backing up to the cloud, you have access to those files, from any computer you have associated with your cloud account. And because Linux powers the cloud, many services offer Linux tools.
+
+Let’s take a look at five such tools. I will focus on GUI tools, because they offer a much lower barrier to entry to many of the CLI tools. I’ll also be focusing on various, consumer-grade cloud services (e.g., [Google Drive][1], [Dropbox][2], [Wasabi][3], and [pCloud][4]). And, I will be demonstrating on the Elementary OS platform, but all of the tools listed will function on most Linux desktop distributions.
+
+Note: Of the following backup solutions, only Duplicati is licensed as open source. With that said, let’s see what’s available.
+
+### Insync
+
+I must confess, [Insync][5] has been my cloud backup of choice for a very long time. Since Google refuses to release a Linux desktop client for Google Drive (and I depend upon Google Drive daily), I had to turn to a third-party solution. Said solution is Insync. This particular take on syncing the desktop to Drive has not only been seamless, but faultless since I began using the tool.
+
+The cost of Insync is a one-time $29.99 fee (per Google account). Trust me when I say this tool is worth the price of entry. With Insync you not only get an easy-to-use GUI for managing your Google Drive backup and sync, you get a tool (Figure 1) that gives you complete control over what is backed up and how it is backed up. Not only that, but you can also install Nautilus integration (which also allows you to easy add folders outside of the configured Drive sync destination).
+
+![Insync app][7]
+
+Figure 1: The Insync app window on Elementary OS.
+
+[Used with permission][8]
+
+You can download Insync for Ubuntu (or its derivatives), Linux Mint, Debian, and Fedora from the [Insync download page][9]. Once you’ve installed Insync (and associated it with your account), you can then install Nautilus integration with these steps (demonstrating on Elementary OS):
+
+ 1. Open a terminal window and issue the command sudo nano /etc/apt/sources.list.d/insync.list.
+
+ 2. Paste the following into the new file: deb precise non-free contrib.
+
+ 3. Save and close the file.
+
+ 4. Update apt with the command sudo apt-get update.
+
+ 5. Install the necessary package with the command sudo apt-get install insync-nautilus.
+
+
+
+
+Allow the installation to complete. Once finished, restart Nautilus with the command nautilus -q (or log out and back into the desktop). You should now see an Insync entry in the Nautilus right-click context menu (Figure 2).
+
+
+
+Figure 2: Insync/Nautilus integration in action.
+
+[Used with permission][8]
+
+### Dropbox
+
+Although [Dropbox][2] drew the ire of many in the Linux community (by dropping support for all filesystems but unencrypted ext4), it still supports a great deal of Linux desktop deployments. In other words, if your distribution still uses the ext4 file system (and you do not opt to encrypt your full drive), you’re good to go.
+
+The good news is the Dropbox Linux desktop client is quite good. The tool offers a system tray icon that allows you to easily interact with your cloud syncing. Dropbox also includes CLI tools and a Nautilus integration (by way of an additional addon found [here][10]).
+
+The Linux Dropbox desktop sync tool works exactly as you’d expect. From the Dropbox system tray drop-down (Figure 3) you can open the Dropbox folder, launch the Dropbox website, view recently changed files, get more space, pause syncing, open the preferences window, find help, and quite Dropbox.
+
+![Dropbox][12]
+
+Figure 3: The Dropbox system tray drop-down on Elementary OS.
+
+[Used with permission][8]
+
+The Dropbox/Nautilus integration is an important component, as it makes quickly adding to your cloud backup seamless and fast. From the Nautilus file manager, locate and right-click the folder to bad added, and select Dropbox > Move to Dropbox (Figure 4).
+
+The only caveat to the Dropbox/Nautilus integration is that the only option is to move a folder to Dropbox. To some this might not be an option. The developers of this package would be wise to instead have the action create a link (instead of actually moving the folder).
+
+Outside of that one issue, the Dropbox cloud sync/backup solution for Linux is a great route to go.
+
+### pCloud
+
+pCloud might well be one of the finest cloud backup solutions you’ve never heard of. This take on cloud storage/backup includes features like:
+
+ * Encryption (subscription service required for this feature);
+
+ * Mobile apps for Android and iOS;
+
+ * Linux, Mac, and Windows desktop clients;
+
+ * Easy file/folder sharing;
+
+ * Built-in audio/video players;
+
+ * No file size limitation;
+
+ * Sync any folder from the desktop;
+
+ * Panel integration for most desktops; and
+
+ * Automatic file manager integration.
+
+
+
+
+pCloud offers both Linux desktop and CLI tools that function quite well. pCloud offers both a free plan (with 10GB of storage), a Premium Plan (with 500GB of storage for a one-time fee of $175.00), and a Premium Plus Plan (with 2TB of storage for a one-time fee of $350.00). Both non-free plans can also be paid on a yearly basis (instead of the one-time fee).
+
+The pCloud desktop client is quite user-friendly. Once installed, you have access to your account information (Figure 5), the ability to create sync pairs, create shares, enable crypto (which requires an added subscription), and general settings.
+
+![pCloud][14]
+
+Figure 5: The pCloud desktop client is incredibly easy to use.
+
+[Used with permission][8]
+
+The one caveat to pCloud is there’s no file manager integration for Linux. That’s overcome by the Sync folder in the pCloud client.
+
+### CloudBerry
+
+The primary focus for [CloudBerry][15] is for Managed Service Providers. The business side of CloudBerry does have an associated cost (one that is probably well out of the price range for the average user looking for a simple cloud backup solution). However, for home usage, CloudBerry is free.
+
+What makes CloudBerry different than the other tools is that it’s not a backup/storage solution in and of itself. Instead, CloudBerry serves as a link between your desktop and the likes of:
+
+ * AWS
+
+ * Microsoft Azure
+
+ * Google Cloud
+
+ * BackBlaze
+
+ * OpenStack
+
+ * Wasabi
+
+ * Local storage
+
+ * External drives
+
+ * Network Attached Storage
+
+ * Network Shares
+
+ * And more
+
+
+
+
+In other words, you use CloudBerry as the interface between the files/folders you want to share and the destination with which you want send them. This also means you must have an account with one of the many supported solutions.
+Once you’ve installed CloudBerry, you create a new Backup plan for the target storage solution. For that configuration, you’ll need such information as:
+
+ * Access Key
+
+ * Secret Key
+
+ * Bucket
+
+
+
+
+What you’ll need for the configuration will depend on the account you’re connecting to (Figure 6).
+
+![CloudBerry][17]
+
+Figure 6: Setting up a CloudBerry backup for Wasabi.
+
+[Used with permission][8]
+
+The one caveat to CloudBerry is that it does not integrate with any file manager, nor does it include a system tray icon for interaction with the service.
+
+### Duplicati
+
+[Duplicati][18] is another option that allows you to sync your local directories with either locally attached drives, network attached storage, or a number of cloud services. The options supported include:
+
+ * Local folders
+
+ * Attached drives
+
+ * FTP/SFTP
+
+ * OpenStack
+
+ * WebDAV
+
+ * Amazon Cloud Drive
+
+ * Amazon S3
+
+ * Azure Blob
+
+ * Box.com
+
+ * Dropbox
+
+ * Google Cloud Storage
+
+ * Google Drive
+
+ * Microsoft OneDrive
+
+ * And many more
+
+
+
+
+Once you install Duplicati (download the installer for Debian, Ubuntu, Fedora, or RedHat from the [Duplicati downloads page][19]), click on the entry in your desktop menu, which will open a web page to the tool (Figure 7), where you can configure the app settings, create a new backup, restore from a backup, and more.
+
+
+
+To create a backup, click Add backup and walk through the easy-to-use wizard (Figure 8). The backup service you choose will dictate what you need for a successful configuration.
+
+![Duplicati backup][21]
+
+Figure 8: Creating a new Duplicati backup for Google Drive.
+
+[Used with permission][8]
+
+For example, in order to create a backup to Google Drive, you’ll need an AuthID. For that, click the AuthID link in the Destination section of the setup, where you’ll be directed to select the Google Account to associate with the backup. Once you’ve allowed Duplicati access to the account, the AuthID will fill in and you’re ready to continue. Click Test connection and you’ll be asked to okay the creation of a new folder (if necessary). Click Next to complete the setup of the backup.
+
+### More Where That Came From
+
+These five cloud backup tools aren’t the end of this particular rainbow. There are plenty more options where these came from (including CLI-only tools). But any of these backup clients will do a great job of serving your Linux desktop-to-cloud backup needs.
+
+--------------------------------------------------------------------------------
+
+via: https://www.linux.com/blog/learn/2019/2/5-linux-gui-cloud-backup-tools
+
+作者:[Jack Wallen][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.linux.com/users/jlwallen
+[b]: https://github.com/lujun9972
+[1]: https://www.google.com/drive/
+[2]: https://www.dropbox.com/
+[3]: https://wasabi.com/
+[4]: https://www.pcloud.com/
+[5]: https://www.insynchq.com/
+[6]: /files/images/insync1jpg
+[7]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/insync_1.jpg?itok=_SDP77uE (Insync app)
+[8]: /licenses/category/used-permission
+[9]: https://www.insynchq.com/downloads
+[10]: https://www.dropbox.com/install-linux
+[11]: /files/images/dropbox1jpg
+[12]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/dropbox_1.jpg?itok=BYbg-sKB (Dropbox)
+[13]: /files/images/pcloud1jpg
+[14]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/pcloud_1.jpg?itok=cAUz8pya (pCloud)
+[15]: https://www.cloudberrylab.com
+[16]: /files/images/cloudberry1jpg
+[17]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/cloudberry_1.jpg?itok=s0aP5xuN (CloudBerry)
+[18]: https://www.duplicati.com/
+[19]: https://www.duplicati.com/download
+[20]: /files/images/duplicati2jpg
+[21]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/duplicati_2.jpg?itok=Xkn8s3jg (Duplicati backup)
diff --git a/sources/tech/20190205 5 Streaming Audio Players for Linux.md b/sources/tech/20190205 5 Streaming Audio Players for Linux.md
new file mode 100644
index 0000000000..1ddd4552f5
--- /dev/null
+++ b/sources/tech/20190205 5 Streaming Audio Players for Linux.md
@@ -0,0 +1,172 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (5 Streaming Audio Players for Linux)
+[#]: via: (https://www.linux.com/blog/2019/2/5-streaming-audio-players-linux)
+[#]: author: (Jack Wallen https://www.linux.com/users/jlwallen)
+
+5 Streaming Audio Players for Linux
+======
+
+
+As I work, throughout the day, music is always playing in the background. Most often, that music is in the form of vinyl spinning on a turntable. But when I’m not in purist mode, I’ll opt to listen to audio by way of a streaming app. Naturally, I’m on the Linux platform, so the only tools I have at my disposal are those that play well on my operating system of choice. Fortunately, plenty of options exist for those who want to stream audio to their Linux desktops.
+
+In fact, Linux offers a number of solid offerings for music streaming, and I’ll highlight five of my favorite tools for this task. A word of warning, not all of these players are open source. But if you’re okay running a proprietary app on your open source desktop, you have some really powerful options. Let’s take a look at what’s available.
+
+### Spotify
+
+Spotify for Linux isn’t some dumb-downed, half-baked app that crashes every other time you open it, and doesn’t offer the full-range of features found on the macOS and Windows equivalent. In fact, the Linux version of Spotify is exactly the same as you’ll find on other platforms. With the Spotify streaming client you can listen to music and podcasts, create playlists, discover new artists, and so much more. And the Spotify interface (Figure 1) is quite easy to navigate and use.
+
+![Spotify][2]
+
+Figure 1: The Spotify interface makes it easy to find new music and old favorites.
+
+[Used with permission][3]
+
+You can install Spotify either using snap (with the command sudo snap install spotify), or from the official repository, with the following commands:
+
+ * sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 931FF8E79F0876134EDDBDCCA87FF9DF48BF1C90
+
+ * sudo echo deb stable non-free | sudo tee /etc/apt/sources.list.d/spotify.list
+
+ * sudo apt-get update
+
+ * sudo apt-get install spotify-client
+
+
+
+
+Once installed, you’ll want to log into your Spotify account, so you can start streaming all of the great music to help motivate you to get your work done. If you have Spotify installed on other devices (and logged into the same account), you can dictate to which device the music should stream (by clicking the Devices Available icon near the bottom right corner of the Spotify window).
+
+### Clementine
+
+Clementine one of the best music players available to the Linux platform. Clementine not only allows user to play locally stored music, but to connect to numerous streaming audio services, such as:
+
+ * Amazon Cloud Drive
+
+ * Box
+
+ * Dropbox
+
+ * Icecast
+
+ * Jamendo
+
+ * Magnatune
+
+ * RockRadio.com
+
+ * Radiotunes.com
+
+ * SomaFM
+
+ * SoundCloud
+
+ * Spotify
+
+ * Subsonic
+
+ * Vk.com
+
+ * Or internet radio streams
+
+
+
+
+There are two caveats to using Clementine. The first is you must be using the most recent version (as the build available in some repositories is out of date and won’t install the necessary streaming plugins). Second, even with the most recent build, some streaming services won’t function as expected. For example, with Spotify, you’ll only have available to you the Top Tracks (and not your playlist … or the ability to search for songs).
+
+With Clementine Internet radio streaming, you’ll find musicians and bands you’ve never heard of (Figure 2), and plenty of them to tune into.
+
+![Clementine][5]
+
+Figure 2: Clementine Internet radio is a great way to find new music.
+
+[Used with permission][3]
+
+### Odio
+
+Odio is a cross-platform, proprietary app (available for Linux, MacOS, and Windows) that allows you to stream internet music stations of all genres. Radio stations are curated from [www.radio-browser.info][6] and the app itself does an incredible job of presenting the streams for you (Figure 3).
+
+
+![Odio][8]
+
+Figure 3: The Odio interface is one of the best you’ll find.
+
+[Used with permission][3]
+
+Odio makes it very easy to find unique Internet radio stations and even add those you find and enjoy to your library. Currently, the only way to install Odio on Linux is via Snap. If your distribution supports snap packages, install this streaming app with the command:
+
+sudo snap install odio
+
+Once installed, you can open the app and start using it. There is no need to log into (or create) an account. Odio is very limited in its settings. In fact, it only offers the choice between a dark or light theme in the settings window. However, as limited as it might be, Odio is one of your best bets for playing Internet radio on Linux.
+
+Streamtuner2 is an outstanding Internet radio station GUI tool. With it you can stream music from the likes of:
+
+ * Internet radio stations
+
+ * Jameno
+
+ * MyOggRadio
+
+ * Shoutcast.com
+
+ * SurfMusic
+
+ * TuneIn
+
+ * Xiph.org
+
+ * YouTube
+
+
+### StreamTuner2
+
+Streamtuner2 offers a nice (if not slightly outdated) interface, that makes it quite easy to find and stream your favorite music. The one caveat with StreamTuner2 is that it’s really just a GUI for finding the streams you want to hear. When you find a station, double-click on it to open the app associated with the stream. That means you must have the necessary apps installed, in order for the streams to play. If you don’t have the proper apps, you can’t play the streams. Because of this, you’ll spend a good amount of time figuring out what apps to install for certain streams (Figure 4).
+
+![Streamtuner2][10]
+
+Figure 4: Configuring Streamtuner2 isn’t for the faint of heart.
+
+[Used with permission][3]
+
+### VLC
+
+VLC has been, for a very long time, dubbed the best media playback tool for Linux. That’s with good reason, as it can play just about anything you throw at it. Included in that list is streaming radio stations. Although you won’t find VLC connecting to the likes of Spotify, you can head over to Internet-Radio, click on a playlist and have VLC open it without a problem. And considering how many internet radio stations are available at the moment, you won’t have any problem finding music to suit your tastes. VLC also includes tools like visualizers, equalizers (Figure 5), and more.
+
+![VLC ][12]
+
+Figure 5: The VLC visualizer and equalizer features in action.
+
+[Used with permission][3]
+
+The only caveat to VLC is that you do have to have a URL for the Internet Radio you wish you hear, as the tool itself doesn’t curate. But with those links in hand, you won’t find a better media player than VLC.
+
+### Always More Where That Came From
+
+If one of these five tools doesn’t fit your needs, I suggest you open your distribution’s app store and search for one that will. There are plenty of tools to make streaming music, podcasts, and more not only possible on Linux, but easy.
+
+Learn more about Linux through the free ["Introduction to Linux" ][13] course from The Linux Foundation and edX.
+
+--------------------------------------------------------------------------------
+
+via: https://www.linux.com/blog/2019/2/5-streaming-audio-players-linux
+
+作者:[Jack Wallen][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.linux.com/users/jlwallen
+[b]: https://github.com/lujun9972
+[2]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/spotify_0.jpg?itok=8-Ym-R61 (Spotify)
+[3]: https://www.linux.com/licenses/category/used-permission
+[5]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/clementine_0.jpg?itok=5oODJO3b (Clementine)
+[6]: http://www.radio-browser.info
+[8]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/odio.jpg?itok=sNPTSS3c (Odio)
+[10]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/streamtuner2.jpg?itok=1MSbafWj (Streamtuner2)
+[12]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/vlc_0.jpg?itok=QEOsq7Ii (VLC )
+[13]: https://training.linuxfoundation.org/linux-courses/system-administration-training/introduction-to-linux
diff --git a/sources/tech/20190205 CFS- Completely fair process scheduling in Linux.md b/sources/tech/20190205 CFS- Completely fair process scheduling in Linux.md
new file mode 100644
index 0000000000..be44e75fea
--- /dev/null
+++ b/sources/tech/20190205 CFS- Completely fair process scheduling in Linux.md
@@ -0,0 +1,122 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (CFS: Completely fair process scheduling in Linux)
+[#]: via: (https://opensource.com/article/19/2/fair-scheduling-linux)
+[#]: author: (Marty kalin https://opensource.com/users/mkalindepauledu)
+
+CFS: Completely fair process scheduling in Linux
+======
+CFS gives every task a fair share of processor resources in a low-fuss but highly efficient way.
+
+
+Linux takes a modular approach to processor scheduling in that different algorithms can be used to schedule different process types. A scheduling class specifies which scheduling policy applies to which type of process. Completely fair scheduling (CFS), which became part of the Linux 2.6.23 kernel in 2007, is the scheduling class for normal (as opposed to real-time) processes and therefore is named **SCHED_NORMAL**.
+
+CFS is geared for the interactive applications typical in a desktop environment, but it can be configured as **SCHED_BATCH** to favor the batch workloads common, for example, on a high-volume web server. In any case, CFS breaks dramatically with what might be called "classic preemptive scheduling." Also, the "completely fair" claim has to be seen with a technical eye; otherwise, the claim might seem like an empty boast.
+
+Let's dig into the details of what sets CFS apart from—indeed, above—other process schedulers. Let's start with a quick review of some core technical terms.
+
+### Some core concepts
+
+Linux inherits the Unix view of a process as a program in execution. As such, a process must contend with other processes for shared system resources: memory to hold instructions and data, at least one processor to execute instructions, and I/O devices to interact with the external world. Process scheduling is how the operating system (OS) assigns tasks (e.g., crunching some numbers, copying a file) to processors—a running process then performs the task. A process has one or more threads of execution, which are sequences of machine-level instructions. To schedule a process is to schedule one of its threads on a processor.
+
+In a simplifying move, Linux turns process scheduling into thread scheduling by treating a scheduled process as if it were single-threaded. If a process is multi-threaded with N threads, then N scheduling actions would be required to cover the threads. Threads within a multi-threaded process remain related in that they share resources such as memory address space. Linux threads are sometimes described as lightweight processes, with the lightweight underscoring the sharing of resources among the threads within a process.
+
+Although a process can be in various states, two are of particular interest in scheduling. A blocked process is awaiting the completion of some event such as an I/O event. The process can resume execution only after the event completes. A runnable process is one that is not currently blocked.
+
+A process is processor-bound (aka compute-bound) if it consumes mostly processor as opposed to I/O resources, and I/O-bound in the opposite case; hence, a processor-bound process is mostly runnable, whereas an I/O-bound process is mostly blocked. As examples, crunching numbers is processor-bound, and accessing files is I/O-bound. Although an entire process might be characterized as either processor-bound or I/O-bound, a given process may be one or the other during different stages of its execution. Interactive desktop applications, such as browsers, tend to be I/O-bound.
+
+A good process scheduler has to balance the needs of processor-bound and I/O-bound tasks, especially in an operating system such as Linux that thrives on so many hardware platforms: desktop machines, embedded devices, mobile devices, server clusters, supercomputers, and more.
+
+### Classic preemptive scheduling versus CFS
+
+Unix popularized classic preemptive scheduling, which other operating systems including VAX/VMS, Windows NT, and Linux later adopted. At the center of this scheduling model is a fixed timeslice, the amount of time (e.g., 50ms) that a task is allowed to hold a processor until preempted in favor of some other task. If a preempted process has not finished its work, the process must be rescheduled. This model is powerful in that it supports multitasking (concurrency) through processor time-sharing, even on the single-CPU machines of yesteryear.
+
+The classic model typically includes multiple scheduling queues, one per process priority: Every process in a higher-priority queue gets scheduled before any process in a lower-priority queue. As an example, VAX/VMS uses 32 priority queues for scheduling.
+
+CFS dispenses with fixed timeslices and explicit priorities. The amount of time for a given task on a processor is computed dynamically as the scheduling context changes over the system's lifetime. Here is a sketch of the motivating ideas and technical details:
+
+ * Imagine a processor, P, which is idealized in that it can execute multiple tasks simultaneously. For example, tasks T1 and T2 can execute on P at the same time, with each receiving 50% of P's magical processing power. This idealization describes perfect multitasking, which CFS strives to achieve on actual as opposed to idealized processors. CFS is designed to approximate perfect multitasking.
+
+ * The CFS scheduler has a target latency, which is the minimum amount of time—idealized to an infinitely small duration—required for every runnable task to get at least one turn on the processor. If such a duration could be infinitely small, then each runnable task would have had a turn on the processor during any given timespan, however small (e.g., 10ms, 5ns, etc.). Of course, an idealized infinitely small duration must be approximated in the real world, and the default approximation is 20ms. Each runnable task then gets a 1/N slice of the target latency, where N is the number of tasks. For example, if the target latency is 20ms and there are four contending tasks, then each task gets a timeslice of 5ms. By the way, if there is only a single task during a scheduling event, this lucky task gets the entire target latency as its slice. The fair in CFS comes to the fore in the 1/N slice given to each task contending for a processor.
+
+ * The 1/N slice is, indeed, a timeslice—but not a fixed one because such a slice depends on N, the number of tasks currently contending for the processor. The system changes over time. Some processes terminate and new ones are spawned; runnable processes block and blocked processes become runnable. The value of N is dynamic and so, therefore, is the 1/N timeslice computed for each runnable task contending for a processor. The traditional **nice** value is used to weight the 1/N slice: a low-priority **nice** value means that only some fraction of the 1/N slice is given to a task, whereas a high-priority **nice** value means that a proportionately greater fraction of the 1/N slice is given to a task. In summary, **nice** values do not determine the slice, but only modify the 1/N slice that represents fairness among the contending tasks.
+
+ * The operating system incurs overhead whenever a context switch occurs; that is, when one process is preempted in favor of another. To keep this overhead from becoming unduly large, there is a minimum amount of time (with a typical setting of 1ms to 4ms) that any scheduled process must run before being preempted. This minimum is known as the minimum granularity. If many tasks (e.g., 20) are contending for the processor, then the minimum granularity (assume 4ms) might be more than the 1/N slice (in this case, 1ms). If the minimum granularity turns out to be larger than the 1/N slice, the system is overloaded because there are too many tasks contending for the processor—and fairness goes out the window.
+
+ * When does preemption occur? CFS tries to minimize context switches, given their overhead: time spent on a context switch is time unavailable for other tasks. Accordingly, once a task gets the processor, it runs for its entire weighted 1/N slice before being preempted in favor of some other task. Suppose task T1 has run for its weighted 1/N slice, and runnable task T2 currently has the lowest virtual runtime (vruntime) among the tasks contending for the processor. The vruntime records, in nanoseconds, how long a task has run on the processor. In this case, T1 would be preempted in favor of T2.
+
+ * The scheduler tracks the vruntime for all tasks, runnable and blocked. The lower a task's vruntime, the more deserving the task is for time on the processor. CFS accordingly moves low-vruntime tasks towards the front of the scheduling line. Details are forthcoming because the line is implemented as a tree, not a list.
+
+ * How often should the CFS scheduler reschedule? There is a simple way to determine the scheduling period. Suppose that the target latency (TL) is 20ms and the minimum granularity (MG) is 4ms:
+
+`TL / MG = (20 / 4) = 5 ## five or fewer tasks are ok`
+
+In this case, five or fewer tasks would allow each task a turn on the processor during the target latency. For example, if the task number is five, each runnable task has a 1/N slice of 4ms, which happens to equal the minimum granularity; if the task number is three, each task gets a 1/N slice of almost 7ms. In either case, the scheduler would reschedule in 20ms, the duration of the target latency.
+
+Trouble occurs if the number of tasks (e.g., 10) exceeds TL / MG because now each task must get the minimum time of 4ms instead of the computed 1/N slice, which is 2ms. In this case, the scheduler would reschedule in 40ms:
+
+`(number of tasks) core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated MG = (10 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated 4) = 40ms ## period = 40ms`
+
+
+
+
+Linux schedulers that predate CFS use heuristics to promote the fair treatment of interactive tasks with respect to scheduling. CFS takes a quite different approach by letting the vruntime facts speak mostly for themselves, which happens to support sleeper fairness. An interactive task, by its very nature, tends to sleep a lot in the sense that it awaits user inputs and so becomes I/O-bound; hence, such a task tends to have a relatively low vruntime, which tends to move the task towards the front of the scheduling line.
+
+### Special features
+
+CFS supports symmetrical multiprocessing (SMP) in which any process (whether kernel or user) can execute on any processor. Yet configurable scheduling domains can be used to group processors for load balancing or even segregation. If several processors share the same scheduling policy, then load balancing among them is an option; if a particular processor has a scheduling policy different from the others, then this processor would be segregated from the others with respect to scheduling.
+
+Configurable scheduling groups are another CFS feature. As an example, consider the Nginx web server that's running on my desktop machine. At startup, this server has a master process and four worker processes, which act as HTTP request handlers. For any HTTP request, the particular worker that handles the request is irrelevant; it matters only that the request is handled in a timely manner, and so the four workers together provide a pool from which to draw a task-handler as requests come in. It thus seems fair to treat the four Nginx workers as a group rather than as individuals for scheduling purposes, and a scheduling group can be used to do just that. The four Nginx workers could be configured to have a single vruntime among them rather than individual vruntimes. Configuration is done in the traditional Linux way, through files. For vruntime-sharing, a file named **cpu.shares** , with the details given through familiar shell commands, would be created.
+
+As noted earlier, Linux supports scheduling classes so that different scheduling policies, together with their implementing algorithms, can coexist on the same platform. A scheduling class is implemented as a code module in C. CFS, the scheduling class described so far, is **SCHED_NORMAL**. There are also scheduling classes specifically for real-time tasks, **SCHED_FIFO** (first in, first out) and **SCHED_RR** (round robin). Under **SCHED_FIFO** , tasks run to completion; under **SCHED_RR** , tasks run until they exhaust a fixed timeslice and are preempted.
+
+### CFS implementation
+
+CFS requires efficient data structures to track task information and high-performance code to generate the schedules. Let's begin with a central term in scheduling, the runqueue. This is a data structure that represents a timeline for scheduled tasks. Despite the name, the runqueue need not be implemented in the traditional way, as a FIFO list. CFS breaks with tradition by using a time-ordered red-black tree as a runqueue. The data structure is well-suited for the job because it is a self-balancing binary search tree, with efficient **insert** and **remove** operations that execute in **O(log N)** time, where N is the number of nodes in the tree. Also, a tree is an excellent data structure for organizing entities into a hierarchy based on a particular property, in this case a vruntime.
+
+In CFS, the tree's internal nodes represent tasks to be scheduled, and the tree as a whole, like any runqueue, represents a timeline for task execution. Red-black trees are in wide use beyond scheduling; for example, Java uses this data structure to implement its **TreeMap**.
+
+Under CFS, every processor has a specific runqueue of tasks, and no task occurs at the same time in more than one runqueue. Each runqueue is a red-black tree. The tree's internal nodes represent tasks or task groups, and these nodes are indexed by their vruntime values so that (in the tree as a whole or in any subtree) the internal nodes to the left have lower vruntime values than the ones to the right:
+
+```
+ 25 ## 25 is a task vruntime
+ /\
+ 17 29 ## 17 roots the left subtree, 29 the right one
+ /\ ...
+ 5 19 ## and so on
+... \
+ nil ## leaf nodes are nil
+```
+
+In summary, tasks with the lowest vruntime—and, therefore, the greatest need for a processor—reside somewhere in the left subtree; tasks with relatively high vruntimes congregate in the right subtree. A preempted task would go into the right subtree, thus giving other tasks a chance to move leftwards in the tree. A task with the smallest vruntime winds up in the tree's leftmost (internal) node, which is thus the front of the runqueue.
+
+The CFS scheduler has an instance, the C **task_struct** , to track detailed information about each task to be scheduled. This structure embeds a **sched_entity** structure, which in turn has scheduling-specific information, in particular, the vruntime per task or task group:
+
+```
+struct task_struct { /bin /boot /dev /etc /home /lib /lib64 /lost+found /media /mnt /opt /proc /root /run /sbin /srv /sys /tmp /usr /var info on a task **/
+ ...
+ struct sched_entity se; /** vruntime, etc. **/
+ ...
+};
+```
+
+The red-black tree is implemented in familiar C fashion, with a premium on pointers for efficiency. A **cfs_rq** structure instance embeds a **rb_root** field named **tasks_timeline** , which points to the root of a red-black tree. Each of the tree's internal nodes has pointers to the parent and the two child nodes; the leaf nodes have nil as their value.
+
+CFS illustrates how a straightforward idea—give every task a fair share of processor resources—can be implemented in a low-fuss but highly efficient way. It's worth repeating that CFS achieves fair and efficient scheduling without traditional artifacts such as fixed timeslices and explicit task priorities. The pursuit of even better schedulers goes on, of course; for the moment, however, CFS is as good as it gets for general-purpose processor scheduling.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/2/fair-scheduling-linux
+
+作者:[Marty kalin][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/mkalindepauledu
+[b]: https://github.com/lujun9972
diff --git a/sources/tech/20190205 Install Apache, MySQL, PHP (LAMP) Stack On Ubuntu 18.04 LTS.md b/sources/tech/20190205 Install Apache, MySQL, PHP (LAMP) Stack On Ubuntu 18.04 LTS.md
new file mode 100644
index 0000000000..7ce1201c4f
--- /dev/null
+++ b/sources/tech/20190205 Install Apache, MySQL, PHP (LAMP) Stack On Ubuntu 18.04 LTS.md
@@ -0,0 +1,443 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Install Apache, MySQL, PHP (LAMP) Stack On Ubuntu 18.04 LTS)
+[#]: via: (https://www.ostechnix.com/install-apache-mysql-php-lamp-stack-on-ubuntu-18-04-lts/)
+[#]: author: (SK https://www.ostechnix.com/author/sk/)
+
+Install Apache, MySQL, PHP (LAMP) Stack On Ubuntu 18.04 LTS
+======
+
+
+
+**LAMP** stack is a popular, open source web development platform that can be used to run and deploy dynamic websites and web-based applications. Typically, LAMP stack consists of Apache webserver, MariaDB/MySQL databases, PHP/Python/Perl programming languages. LAMP is the acronym of **L** inux, **M** ariaDB/ **M** YSQL, **P** HP/ **P** ython/ **P** erl. This tutorial describes how to install Apache, MySQL, PHP (LAMP stack) in Ubuntu 18.04 LTS server.
+
+### Install Apache, MySQL, PHP (LAMP) Stack On Ubuntu 18.04 LTS
+
+For the purpose of this tutorial, we will be using the following Ubuntu testbox.
+
+ * **Operating System** : Ubuntu 18.04.1 LTS Server Edition
+ * **IP address** : 192.168.225.22/24
+
+
+
+#### 1. Install Apache web server
+
+First of all, update Ubuntu server using commands:
+
+```
+$ sudo apt update
+
+$ sudo apt upgrade
+```
+
+Next, install Apache web server:
+
+```
+$ sudo apt install apache2
+```
+
+Check if Apache web server is running or not:
+
+```
+$ sudo systemctl status apache2
+```
+
+Sample output would be:
+
+```
+● apache2.service - The Apache HTTP Server
+ Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: en
+ Drop-In: /lib/systemd/system/apache2.service.d
+ └─apache2-systemd.conf
+ Active: active (running) since Tue 2019-02-05 10:48:03 UTC; 1min 5s ago
+ Main PID: 2025 (apache2)
+ Tasks: 55 (limit: 2320)
+ CGroup: /system.slice/apache2.service
+ ├─2025 /usr/sbin/apache2 -k start
+ ├─2027 /usr/sbin/apache2 -k start
+ └─2028 /usr/sbin/apache2 -k start
+
+Feb 05 10:48:02 ubuntuserver systemd[1]: Starting The Apache HTTP Server...
+Feb 05 10:48:03 ubuntuserver apachectl[2003]: AH00558: apache2: Could not reliably
+Feb 05 10:48:03 ubuntuserver systemd[1]: Started The Apache HTTP Server.
+```
+
+Congratulations! Apache service is up and running!!
+
+##### 1.1 Adjust firewall to allow Apache web server
+
+By default, the apache web browser can’t be accessed from remote systems if you have enabled the UFW firewall in Ubuntu 18.04 LTS. You must allow the http and https ports by following the below steps.
+
+First, list out the application profiles available on your Ubuntu system using command:
+
+```
+$ sudo ufw app list
+```
+
+Sample output:
+
+```
+Available applications:
+Apache
+Apache Full
+Apache Secure
+OpenSSH
+```
+
+As you can see, Apache and OpenSSH applications have installed UFW profiles. You can list out information about each profile and its included rules using “ **ufw app info “Profile Name”** command.
+
+Let us look into the **“Apache Full”** profile. To do so, run:
+
+```
+$ sudo ufw app info "Apache Full"
+```
+
+Sample output:
+
+```
+Profile: Apache Full
+Title: Web Server (HTTP,HTTPS)
+Description: Apache v2 is the next generation of the omnipresent Apache web
+server.
+
+Ports:
+80,443/tcp
+```
+
+As you see, “Apache Full” profile has included the rules to enable traffic to the ports **80** and **443** :
+
+Now, run the following command to allow incoming HTTP and HTTPS traffic for this profile:
+
+```
+$ sudo ufw allow in "Apache Full"
+Rules updated
+Rules updated (v6)
+```
+
+If you don’t want to allow https traffic, but only http (80) traffic, run:
+
+```
+$ sudo ufw app info "Apache"
+```
+
+##### 1.2 Test Apache Web server
+
+Now, open your web browser and access Apache test page by navigating to **** or ****.
+
+
+
+If you are see a screen something like above, you are good to go. Apache server is working!
+
+#### 2. Install MySQL
+
+To install MySQL On Ubuntu, run:
+
+```
+$ sudo apt install mysql-server
+```
+
+Verify if MySQL service is running or not using command:
+
+```
+$ sudo systemctl status mysql
+```
+
+**Sample output:**
+
+```
+● mysql.service - MySQL Community Server
+Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enab
+Active: active (running) since Tue 2019-02-05 11:07:50 UTC; 17s ago
+Main PID: 3423 (mysqld)
+Tasks: 27 (limit: 2320)
+CGroup: /system.slice/mysql.service
+└─3423 /usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid
+
+Feb 05 11:07:49 ubuntuserver systemd[1]: Starting MySQL Community Server...
+Feb 05 11:07:50 ubuntuserver systemd[1]: Started MySQL Community Server.
+```
+
+Mysql is running!
+
+##### 2.1 Setup database administrative user (root) password
+
+By default, MySQL **root** user password is blank. You need to secure your MySQL server by running the following script:
+
+```
+$ sudo mysql_secure_installation
+```
+
+You will be asked whether you want to setup **VALIDATE PASSWORD plugin** or not. This plugin allows the users to configure strong password for database credentials. If enabled, It will automatically check the strength of the password and enforces the users to set only those passwords which are secure enough. **It is safe to leave this plugin disabled**. However, you must use a strong and unique password for database credentials. If don’t want to enable this plugin, just press any key to skip the password validation part and continue the rest of the steps.
+
+If your answer is **Yes** , you will be asked to choose the level of password validation.
+
+```
+Securing the MySQL server deployment.
+
+Connecting to MySQL using a blank password.
+
+VALIDATE PASSWORD PLUGIN can be used to test passwords
+and improve security. It checks the strength of password
+and allows the users to set only those passwords which are
+secure enough. Would you like to setup VALIDATE PASSWORD plugin?
+
+Press y|Y for Yes, any other key for No y
+```
+
+The available password validations are **low** , **medium** and **strong**. Just enter the appropriate number (0 for low, 1 for medium and 2 for strong password) and hit ENTER key.
+
+```
+There are three levels of password validation policy:
+
+LOW Length >= 8
+MEDIUM Length >= 8, numeric, mixed case, and special characters
+STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
+
+Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG:
+```
+
+Now, enter the password for MySQL root user. Please be mindful that you must use password for mysql root user depending upon the password policy you choose in the previous step. If you didn’t enable the plugin, just use any strong and unique password of your choice.
+
+```
+Please set the password for root here.
+
+New password:
+
+Re-enter new password:
+
+Estimated strength of the password: 50
+Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
+```
+
+Once you entered the password twice, you will see the password strength (In our case it is **50** ). If it is OK for you, press Y to continue with the provided password. If not satisfied with password length, press any other key and set a strong password. I am OK with my current password, so I chose **y**.
+
+For the rest of questions, just type **y** and hit ENTER. This will remove anonymous user, disallow root user login remotely and remove test database.
+
+```
+Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
+Success.
+
+Normally, root should only be allowed to connect from
+'localhost'. This ensures that someone cannot guess at
+the root password from the network.
+
+Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
+Success.
+
+By default, MySQL comes with a database named 'test' that
+anyone can access. This is also intended only for testing,
+and should be removed before moving into a production
+environment.
+
+Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
+- Dropping test database...
+Success.
+
+- Removing privileges on test database...
+Success.
+
+Reloading the privilege tables will ensure that all changes
+made so far will take effect immediately.
+
+Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
+Success.
+
+All done!
+```
+
+That’s it. Password for MySQL root user has been set.
+
+##### 2.2 Change authentication method for MySQL root user
+
+By default, MySQL root user is set to authenticate using the **auth_socket** plugin in MySQL 5.7 and newer versions on Ubuntu. Even though it enhances the security, it will also complicate things when you access your database server using any external programs, for example phpMyAdmin. To fix this issue, you need to change authentication method from **auth_socket** to **mysql_native_password**. To do so, login to your MySQL prompt using command:
+
+```
+$ sudo mysql
+```
+
+Run the following command at the mysql prompt to find the current authentication method for all mysql user accounts:
+
+```
+SELECT user,authentication_string,plugin,host FROM mysql.user;
+```
+
+**Sample output:**
+
+```
++------------------|-------------------------------------------|-----------------------|-----------+
+| user | authentication_string | plugin | host |
++------------------|-------------------------------------------|-----------------------|-----------+
+| root | | auth_socket | localhost |
+| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
+| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
+| debian-sys-maint | *F126737722832701DD3979741508F05FA71E5BA0 | mysql_native_password | localhost |
++------------------|-------------------------------------------|-----------------------|-----------+
+4 rows in set (0.00 sec)
+```
+
+![][2]
+
+As you see, mysql root user uses `auth_socket` plugin for authentication.
+
+To change this authentication to **mysql_native_password** method, run the following command at mysql prompt. Don’t forget to replace **“password”** with a strong and unique password of your choice. If you have enabled VALIDATION plugin, make sure you have used a strong password based on the current policy requirements.
+
+```
+ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
+```
+
+Update the changes using command:
+
+```
+FLUSH PRIVILEGES;
+```
+
+Now check again if the authentication method is changed or not using command:
+
+```
+SELECT user,authentication_string,plugin,host FROM mysql.user;
+```
+
+Sample output:
+
+![][3]
+
+Good! Now the myql root user can authenticate using password to access mysql shell.
+
+Exit from the mysql prompt:
+
+```
+exit
+```
+
+#### 3\. Install PHP
+
+To install PHP, run:
+
+```
+$ sudo apt install php libapache2-mod-php php-mysql
+```
+
+After installing PHP, create **info.php** file in the Apache root document folder. Usually, the apache root document folder will be **/var/www/html/** or **/var/www/** in most Debian based Linux distributions. In Ubuntu 18.04 LTS, it is **/var/www/html/**.
+
+Let us create **info.php** file in the apache root folder:
+
+```
+$ sudo vi /var/www/html/info.php
+```
+
+Add the following lines:
+
+```
+
+```
+
+Press ESC key and type **:wq** to save and quit the file. Restart apache service to take effect the changes.
+
+```
+$ sudo systemctl restart apache2
+```
+
+##### 3.1 Test PHP
+
+Open up your web browser and navigate to **** URL.
+
+You will see the php test page now.
+
+
+
+Usually, when a user requests a directory from the web server, Apache will first look for a file named **index.html**. If you want to change Apache to serve php files rather than others, move **index.php** to first position in the **dir.conf** file as shown below
+
+```
+$ sudo vi /etc/apache2/mods-enabled/dir.conf
+```
+
+Here is the contents of the above file.
+
+```
+
+DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
+
+
+# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
+```
+
+Move the “index.php” file to first. Once you made the changes, your **dir.conf** file will look like below.
+
+```
+
+DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
+
+
+# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
+```
+
+Press **ESC** key and type **:wq** to save and close the file. Restart Apache service to take effect the changes.
+
+```
+$ sudo systemctl restart apache2
+```
+
+##### 3.2 Install PHP modules
+
+To improve the functionality of PHP, you can install some additional PHP modules.
+
+To list the available PHP modules, run:
+
+```
+$ sudo apt-cache search php- | less
+```
+
+**Sample output:**
+
+![][4]
+
+Use the arrow keys to go through the result. To exit, type **q** and hit ENTER key.
+
+To find the details of any particular php module, for example **php-gd** , run:
+
+```
+$ sudo apt-cache show php-gd
+```
+
+To install a php module run:
+
+```
+$ sudo apt install php-gd
+```
+
+To install all modules (not necessary though), run:
+
+```
+$ sudo apt-get install php*
+```
+
+Do not forget to restart Apache service after installing any php module. To check if the module is loaded or not, open info.php file in your browser and check if it is present.
+
+Next, you might want to install any database management tools to easily manage databases via a web browser. If so, install phpMyAdmin as described in the following link.
+
+Congratulations! We have successfully setup LAMP stack in Ubuntu 18.04 LTS server.
+
+
+
+--------------------------------------------------------------------------------
+
+via: https://www.ostechnix.com/install-apache-mysql-php-lamp-stack-on-ubuntu-18-04-lts/
+
+作者:[SK][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.ostechnix.com/author/sk/
+[b]: https://github.com/lujun9972
+[1]: data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7
+[2]: http://www.ostechnix.com/wp-content/uploads/2019/02/mysql-1.png
+[3]: http://www.ostechnix.com/wp-content/uploads/2019/02/mysql-2.png
+[4]: http://www.ostechnix.com/wp-content/uploads/2016/06/php-modules.png
diff --git a/sources/tech/20190205 Installing Kali Linux on VirtualBox- Quickest - Safest Way.md b/sources/tech/20190205 Installing Kali Linux on VirtualBox- Quickest - Safest Way.md
new file mode 100644
index 0000000000..e8722c63cc
--- /dev/null
+++ b/sources/tech/20190205 Installing Kali Linux on VirtualBox- Quickest - Safest Way.md
@@ -0,0 +1,146 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Installing Kali Linux on VirtualBox: Quickest & Safest Way)
+[#]: via: (https://itsfoss.com/install-kali-linux-virtualbox/)
+[#]: author: (Ankush Das https://itsfoss.com/author/ankush/)
+
+Installing Kali Linux on VirtualBox: Quickest & Safest Way
+======
+
+_**This tutorial shows you how to install Kali Linux on Virtual Box in Windows and Linux in the quickest way possible.**_
+
+[Kali Linux][1] is one of the [best Linux distributions for hacking][2] and security enthusiasts.
+
+Since it deals with a sensitive topic like hacking, it’s like a double-edged sword. We have discussed it in the detailed Kali Linux review in the past so I am not going to bore you with the same stuff again.
+
+While you can install Kali Linux by replacing the existing operating system, using it via a virtual machine would be a better and safer option.
+
+With Virtual Box, you can use Kali Linux as a regular application in your Windows/Linux system. It’s almost the same as running VLC or a game in your system.
+
+Using Kali Linux in a virtual machine is also safe. Whatever you do inside Kali Linux will NOT impact your ‘host system’ (i.e. your original Windows or Linux operating system). Your actual operating system will be untouched and your data in the host system will be safe.
+
+![][3]
+
+### How to install Kali Linux on VirtualBox
+
+I’ll be using [VirtualBox][4] here. It is a wonderful open source virtualization solution for just about anyone (professional or personal use). It’s available free of cost.
+
+In this tutorial, we will talk about Kali Linux in particular but you can install almost any other OS whose ISO file exists or a pre-built virtual machine save file is available.
+
+**Note:** _The same steps apply for Windows/Linux running VirtualBox._
+
+As I already mentioned, you can have either Windows or Linux installed as your host. But, in this case, I have Windows 10 installed (don’t hate me!) where I try to install Kali Linux in VirtualBox step by step.
+
+And, the best part is – even if you happen to use a Linux distro as your primary OS, the same steps will be applicable!
+
+Wondering, how? Let’s see…
+
+[Subscribe to Our YouTube Channel for More Linux Videos][5]
+
+### Step by Step Guide to install Kali Linux on VirtualBox
+
+_We are going to use a custom Kali Linux image made for VirtualBox specifically. You can also download the ISO file for Kali Linux and create a new virtual machine – but why do that when you have an easy alternative?_
+
+#### 1\. Download and install VirtualBox
+
+The first thing you need to do is to download and install VirtualBox from Oracle’s official website.
+
+[Download VirtualBox][6]
+
+Once you download the installer, just double click on it to install VirtualBox. It’s the same for [installing VirtualBox on Ubuntu][7]/Fedora Linux as well.
+
+#### 2\. Download ready-to-use virtual image of Kali Linux
+
+After installing it successfully, head to [Offensive Security’s download page][8] to download the VM image for VirtualBox. If you change your mind to utilize [VMware][9], that is available too.
+
+![][10]
+
+As you can see the file size is well over 3 GB, you should either use the torrent option or download it using a [download manager][11].
+
+[Kali Linux Virtual Image][8]
+
+#### 3\. Install Kali Linux on Virtual Box
+
+Once you have installed VirtualBox and downloaded the Kali Linux image, you just need to import it to VirtualBox in order to make it work.
+
+Here’s how to import the VirtualBox image for Kali Linux:
+
+**Step 1** : Launch VirtualBox. You will notice an **Import** button – click on it
+
+![Click on Import button][12]
+
+**Step 2:** Next, browse the file you just downloaded and choose it to be imported (as you can see in the image below). The file name should start with ‘kali linux‘ and end with . **ova** extension.
+
+![Importing Kali Linux image][13]
+
+**S** Once selected, proceed by clicking on **Next**.
+
+**Step 3** : Now, you will be shown the settings for the virtual machine you are about to import. So, you can customize them or not – that is your choice. It is okay if you go with the default settings.
+
+You need to select a path where you have sufficient storage available. I would never recommend the **C:** drive on Windows.
+
+![Import hard drives as VDI][14]
+
+Here, the hard drives as VDI refer to virtually mount the hard drives by allocating the storage space set.
+
+After you are done with the settings, hit **Import** and wait for a while.
+
+**Step 4:** You will now see it listed. So, just hit **Start** to launch it.
+
+You might get an error at first for USB port 2.0 controller support, you can disable it to resolve it or just follow the on-screen instruction of installing an additional package to fix it. And, you are done!
+
+![Kali Linux running in VirtualBox][15]
+
+The default username in Kali Linux is root and the default password is toor. You should be able to login to the system with it.
+
+Do note that you should [update Kali Linux][16] before trying to install a new applications or trying to hack your neighbor’s WiFi.
+
+I hope this guide helps you easily install Kali Linux on Virtual Box. Of course, Kali Linux has a lot of useful tools in it for penetration testing – good luck with that!
+
+**Tip** : Both Kali Linux and Ubuntu are Debian-based. If you face any issues or error with Kali Linux, you may follow the tutorials intended for Ubuntu or Debian on the internet.
+
+### Bonus: Free Kali Linux Guide Book
+
+If you are just starting with Kali Linux, it will be a good idea to know how to use Kali Linux.
+
+Offensive Security, the company behind Kali Linux, has created a guide book that explains the basics of Linux, basics of Kali Linux, configuration, setups. It also has a few chapters on penetration testing and security tools.
+
+Basically, it has everything you need to get started with Kali Linux. And the best thing is that the book is available to download for free.
+
+[Download Kali Linux Revealed for FREE][17]
+
+Let us know in the comments below if you face an issue or simply share your experience with Kali Linux on VirtualBox.
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/install-kali-linux-virtualbox/
+
+作者:[Ankush Das][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/ankush/
+[b]: https://github.com/lujun9972
+[1]: https://www.kali.org/
+[2]: https://itsfoss.com/linux-hacking-penetration-testing/
+[3]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/02/kali-linux-virtual-box.png?resize=800%2C450&ssl=1
+[4]: https://www.virtualbox.org/
+[5]: https://www.youtube.com/c/itsfoss?sub_confirmation=1
+[6]: https://www.virtualbox.org/wiki/Downloads
+[7]: https://itsfoss.com/install-virtualbox-ubuntu/
+[8]: https://www.offensive-security.com/kali-linux-vm-vmware-virtualbox-image-download/
+[9]: https://itsfoss.com/install-vmware-player-ubuntu-1310/
+[10]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/02/kali-linux-virtual-box-image.jpg?resize=800%2C347&ssl=1
+[11]: https://itsfoss.com/4-best-download-managers-for-linux/
+[12]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/02/vmbox-import-kali-linux.jpg?ssl=1
+[13]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/02/vmbox-linux-next.jpg?ssl=1
+[14]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/02/vmbox-kali-linux-settings.jpg?ssl=1
+[15]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/02/kali-linux-on-windows-virtualbox.jpg?resize=800%2C429&ssl=1
+[16]: https://linuxhandbook.com/update-kali-linux/
+[17]: https://kali.training/downloads/Kali-Linux-Revealed-1st-edition.pdf
diff --git a/sources/tech/20190206 Flowblade 2.0 is Here with New Video Editing Tools and a Refreshed UI.md b/sources/tech/20190206 Flowblade 2.0 is Here with New Video Editing Tools and a Refreshed UI.md
new file mode 100644
index 0000000000..603ae570eb
--- /dev/null
+++ b/sources/tech/20190206 Flowblade 2.0 is Here with New Video Editing Tools and a Refreshed UI.md
@@ -0,0 +1,96 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Flowblade 2.0 is Here with New Video Editing Tools and a Refreshed UI)
+[#]: via: (https://itsfoss.com/flowblade-video-editor-release/)
+[#]: author: (Ankush Das https://itsfoss.com/author/ankush/)
+
+Flowblade 2.0 is Here with New Video Editing Tools and a Refreshed UI
+======
+
+[Flowblade][1] is one of the rare [video editors that are only available for Linux][2]. It is not the feature set – but the simplicity, flexibility, and being an open source project that counts.
+
+However, with Flowblade 2.0 – released recently – it is now more powerful and useful. A lot of new tools along with a complete overhaul in the workflow can be seen.
+
+In this article, we shall take a look at what’s new with Flowblade 2.0.
+
+### New Features in Flowblade 2.0
+
+Here are some of the major new changes in the latest release of Flowblade.
+
+#### GUI Updates
+
+![Flowblade 2.0][3]
+
+This was a much needed change. I’m always looking for open source solutions that works as expected along with a great GUI.
+
+So, in this update, you will observe a new custom theme set as the default – which looks good though.
+
+Overall, the panel design, the toolbox and stuff has been taken care of to make it look modern. The overhaul considers small changes like the cursor icon upon tool selection and so on.
+
+#### Workflow Overhaul
+
+No matter what features you get to utilize, the workflow matters to people who regularly edit videos. So, it has to be intuitive.
+
+With the recent release, they have made sure that you can configure and set the workflow as per your preference. Well, that is definitely flexible because not everyone has the same requirement.
+
+#### New Tools
+
+![Flowblade Video Editor Interface][4]
+
+**Keyframe tool** : This enables editing and adjusting the Volume and Brightness [keyframes][5] on timeline.
+
+**Multitrim** : A combination of trill, roll, and slip tool.
+
+**Cut:** Available now as a tool in addition to the traditional cut at the playhead.
+
+**Ripple trim:** It is a mode of Trim tool – not often used by many – now available as a separate tool.
+
+#### More changes?
+
+In addition to these major changes listed above, they have added some keyframe editing updates and compositors ( _AlphaXOR, Alpha Out, and Alpha_ ) to utilize alpha channel data to combine images.
+
+A lot of more tiny little changes have taken place as well – you can check those out in the official [changelog][6] on GitHub.
+
+### Installing Flowblade 2.0
+
+If you use Debian or Ubuntu based Linux distributions, there are .deb binaries available for easily installing Flowblade 2.0.
+
+For the rest, you’ll have to [install it using the source code][7].
+
+All the files are available on it’s GitHub page. You can download it from the page below.
+
+[Download Flowblade 2.0][8]
+
+### Wrapping Up
+
+If you are interested in video editing, perhaps you would like to follow the development of [Olive][9], a new open source video editor in development.
+
+Now that you know about the latest changes and additions. What do you think about Flowblade 2.0 as a video editor? Is it good enough for you?
+
+Let us know your thoughts in the comments below.
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/flowblade-video-editor-release/
+
+作者:[Ankush Das][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/ankush/
+[b]: https://github.com/lujun9972
+[1]: https://github.com/jliljebl/flowblade
+[2]: https://itsfoss.com/best-video-editing-software-linux/
+[3]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/02/flowblade-2.jpg?ssl=1
+[4]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/02/flowblade-2-1.jpg?resize=800%2C450&ssl=1
+[5]: https://en.wikipedia.org/wiki/Key_frame
+[6]: https://github.com/jliljebl/flowblade/blob/master/flowblade-trunk/docs/RELEASE_NOTES.md
+[7]: https://itsfoss.com/install-software-from-source-code/
+[8]: https://github.com/jliljebl/flowblade/releases/tag/v2.0
+[9]: https://itsfoss.com/olive-video-editor/
diff --git a/sources/tech/20190207 Review of Debian System Administrator-s Handbook.md b/sources/tech/20190207 Review of Debian System Administrator-s Handbook.md
new file mode 100644
index 0000000000..7b51459c6b
--- /dev/null
+++ b/sources/tech/20190207 Review of Debian System Administrator-s Handbook.md
@@ -0,0 +1,133 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Review of Debian System Administrator’s Handbook)
+[#]: via: (https://itsfoss.com/debian-administrators-handbook/)
+[#]: author: (Shirish https://itsfoss.com/author/shirish/)
+
+Review of Debian System Administrator’s Handbook
+======
+
+_**Debian System Administrator’s Handbook is a free-to-download book that covers all the essential part of Debian that a sysadmin might need.**_
+
+This has been on my to-do review list for quite some time. The book was started by two French Debian Developers Raphael Hertzog and Roland Mas to increase awareness about the Debian project in France. The book was a huge hit among francophone Linux users. The English translation followed soon after that.
+
+### Debian Administrator’s Handbook
+
+![][1]
+
+[Debian Administrator’s Handbook][2] is targeted from a newbie who may be looking to understand what the [Debian project][3] is all about to somebody who might be running a Debian in a production server.
+
+The latest version of the book covers Debian 8 while the current stable version is Debian 9. But it doesn’t mean that book is outdated and is of no use to Debian 9 users. Most of the part of the book is valid for all Debian and Linux users.
+
+Let me give you a quick summary of what this book covers.
+
+#### Section 1 – Debian Project
+
+The first section sets the tone of the book where it gives a solid foundation to somebody who might be looking into Debian as to what it actually means. Some of it will probably be updated to match the current scenario.
+
+#### Section 2 – Using fictional case studies for different needs
+
+The second section deals with the various case-scenarios as to where Debian could be used. The idea being how Debian can be used in various hierarchical or functional scenarios. One aspect which I felt that should have stressed upon is the culture mindshift and openness which at least should have been mentioned.
+
+#### Section 3 & 4- Setups and Installation
+
+The third section goes into looking in existing setups. I do think it should have stressed more into documenting existing setups, migrating partial services and users before making a full-fledged transition. While all of the above seem minor points, I have seen many of them come and bit me on the back during a transition.
+
+Section Four covers the various ways you could install, how the installation process flows and things to keep in mind before installing a Debian System. Unfortunately, UEFI was not present at that point so it was not talked about.
+
+#### Section 5 & 6 – Packaging System and Updates
+
+Section Five starts on how a binary package is structured and then goes on to tell how a source package is structured as well. It does mention several gotchas or tricky ways in which a sys-admin can be caught.
+
+Section Six is perhaps where most of the sysadmins spend most of the time apart from troubleshooting which is another chapter altogether. While it starts from many of the most often used sysadmin commands, the interesting point which I liked was on page 156 which is on better solver algorithims.
+
+#### Section 7 – Solving Problems and finding Relevant Solutions
+
+Section Seven, on the other hand, speaks of the various problem scenarios and various ways when you find yourself with a problem. In Debian and most GNU/Linux distributions, the keyword is ‘patience’. If you are patient then many problems in Debian are resolved or can be resolved after a good night’s sleep.
+
+#### Section 8 – Basic Configuration, Network, Accounts, Printing
+
+Section Eight introduces you to the basics of networking and having single or multiple user accounts on the workstation. It goes a bit into user and group configuration and practices then gives a brief introduction to the bash shell and gets a brief overview of the [CUPS][4] printing daemon. There is much to explore here.
+
+#### Section 9 – Unix Service
+
+Section 9 starts with the introduction to specific Unix services. While it starts with the much controversial, hated and reviled in many quarters [systemd][5], they also shared System V which is still used by many a sysadmin.
+
+#### Section 10, 11 & 12 – Networking and Adminstration
+
+Section 10 makes you dive into network infrastructure where it goes into the basics of Virtual Private Networks (OpenVPN), OpenSSH, the PKI credentials and some basics of information security. It also gets into basics of DNS, DHCP and IPv6 and ends with some tools which could help in troubleshooting network issues.
+
+Section 11 starts with basic configuration and workflow of mail server and postfix. It tries to a bit into depth as there is much to play with. It then goes into the popular web server Apache, FTP File server, NFS and CIFS with Windows shares via Samba. Again, much to explore therein.
+
+Section 12 starts with Advanced Administration topics such as RAID, LVM, when one is better than the other. Then gets into Virtualization, Xen and give brief about lxc. Again, there is much more to explore than shared herein.
+
+![Author Raphael Hertzog at a Debian booth circa 2013 | Image Credit][6]
+
+#### Section 13 – Workstation
+
+Section 13 shares about having schemas for xserver, display managers, window managers, menu management, the different desktops i.e. GNOME, KDE, XFCE and others. It does mention about lxde in the others. The one omission I felt which probably will be updated in a new release would be [Wayland][7] and [Xwayland][8]. Again much to explore in this section as well. This is rectified in the conclusion
+
+#### Section 14 – Security
+
+Section 14 is somewhat comprehensive on what constitues security and bits of threats analysis but stops short as it shares in the introduction of the chapter itself that it’s a vast topic.
+
+#### Section 15 – Creating a Debian package
+
+Section 15 explains the tools and processes to ‘ _debianize_ ‘ an application so it becomes part of the Debian archive and available for distribution on the 10 odd hardware architectures that Debian supports.
+
+### Pros and Cons
+
+Where Raphael and Roland have excelled is at breaking the visual monotony of the book by using a different style and structure wherever possible from the rest of the reading material. This compels the reader to refresh her eyes while at the same time focus on the important matter at the hand. The different visual style also indicates that this is somewhat more important from the author’s point of view.
+
+One of the drawbacks, if I may call it that, is the absolute absence of humor in the book.
+
+### Final Thoughts
+
+I have been [using Debian][9] for a decade so lots of it was a refresher for myself. Some of it is outdated if I look it from a buster perspective but is invaluable as a historical artifact.
+
+If you are looking to familiarize yourself with Debian or looking to run Debian 8 or 9 as a production server for your business wouldn’t be able to recommend a better book than this.
+
+### Download Debian Administrator’s Handbook
+
+The Debian Handbook has been available in every Debian release after 2012. The [liberation][10] of the Debian Handbook was done in 2012 using [ulule][11].
+
+You can download an electronic version of the Debian Administrator’s Handbook in PDF, ePub or Mobi format from the link below:
+
+[Download Debian Administrator’s Handbook][12]
+
+You can also buy the book paperback edition of the book if you want to support the amazing work of the authors.
+
+[Buy the paperback edition][13]
+
+Lastly, if you want to motivate Raphael, you can reward by donating to his PayPal [account][14].
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/debian-administrators-handbook/
+
+作者:[Shirish][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/shirish/
+[b]: https://github.com/lujun9972
+[1]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/02/Debian-Administrators-Handbook-review.png?resize=800%2C450&ssl=1
+[2]: https://debian-handbook.info/
+[3]: https://www.debian.org/
+[4]: https://www.cups.org
+[5]: https://itsfoss.com/systemd-features/
+[6]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/02/stand-debian-Raphael.jpg?resize=800%2C600&ssl=1
+[7]: https://wayland.freedesktop.org/
+[8]: https://en.wikipedia.org/wiki/X.Org_Server#XWayland
+[9]: https://itsfoss.com/reasons-why-i-love-debian/
+[10]: https://debian-handbook.info/liberation/
+[11]: https://www.ulule.com/debian-handbook/
+[12]: https://debian-handbook.info/get/now/
+[13]: https://debian-handbook.info/get/
+[14]: https://raphaelhertzog.com/
diff --git a/sources/tech/20190208 3 Ways to Install Deb Files on Ubuntu Linux.md b/sources/tech/20190208 3 Ways to Install Deb Files on Ubuntu Linux.md
new file mode 100644
index 0000000000..55c1067d12
--- /dev/null
+++ b/sources/tech/20190208 3 Ways to Install Deb Files on Ubuntu Linux.md
@@ -0,0 +1,185 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (3 Ways to Install Deb Files on Ubuntu Linux)
+[#]: via: (https://itsfoss.com/install-deb-files-ubuntu)
+[#]: author: (Abhishek Prakash https://itsfoss.com/author/abhishek/)
+
+3 Ways to Install Deb Files on Ubuntu Linux
+======
+
+**This beginner article explains how to install deb packages in Ubuntu. It also shows you how to remove those deb packages afterwards.**
+
+This is another article in the Ubuntu beginner series. If you are absolutely new to Ubuntu, you might wonder about [how to install applications][1].
+
+The easiest way is to use the Ubuntu Software Center. Search for an application by its name and install it from there.
+
+Life would be too simple if you could find all the applications in the Software Center. But that does not happen, unfortunately.
+
+Some software are available via DEB packages. These are archived files that end with .deb extension.
+
+You can think of .deb files as the .exe files in Windows. You double click on the .exe file and it starts the installation procedure in Windows. DEB packages are pretty much the same.
+
+You can find these DEB packages from the download section of the software provider’s website. For example, if you want to [install Google Chrome on Ubuntu][2], you can download the DEB package of Chrome from its website.
+
+Now the question arises, how do you install deb files? There are multiple ways of installing DEB packages in Ubuntu. I’ll show them to you one by one in this tutorial.
+
+![Install deb files in Ubuntu][3]
+
+### Installing .deb files in Ubuntu and Debian-based Linux Distributions
+
+You can choose a GUI tool or a command line tool for installing a deb package. The choice is yours.
+
+Let’s go on and see how to install deb files.
+
+#### Method 1: Use the default Software Center
+
+The simplest method is to use the default software center in Ubuntu. You have to do nothing special here. Simply go to the folder where you have downloaded the .deb file (it should be the Downloads folder) and double click on this file.
+
+![Google Chrome deb file on Ubuntu][4]Double click on the downloaded .deb file to start installation
+
+It will open the software center and you should see the option to install the software. All you have to do is to hit the install button and enter your login password.
+
+![Install Google Chrome in Ubuntu Software Center][5]The installation of deb file will be carried out via Software Center
+
+See, it’s even simple than installing from a .exe files on Windows, isn’t it?
+
+#### Method 2: Use Gdebi application for installing deb packages with dependencies
+
+Again, life would be a lot simpler if things always go smooth. But that’s not life as we know it.
+
+Now that you know that .deb files can be easily installed via Software Center, let me tell you about the dependency error that you may encounter with some packages.
+
+What happens is that a program may be dependent on another piece of software (libraries). When the developer is preparing the DEB package for you, he/she may assume that your system already has that piece of software on your system.
+
+But if that’s not the case and your system doesn’t have those required pieces of software, you’ll encounter the infamous ‘dependency error’.
+
+The Software Center cannot handle such errors on its own so you have to use another tool called [gdebi][6].
+
+gdebi is a lightweight GUI application that has the sole purpose of installing deb packages.
+
+It identifies the dependencies and tries to install these dependencies along with installing the .deb files.
+
+![gdebi handling dependency while installing deb package][7]Image Credit: [Xmodulo][8]
+
+Personally, I prefer gdebi over software center for installing deb files. It is a lightweight application so the installation seems quicker. You can read in detail about [using gDebi and making it the default for installing DEB packages][6].
+
+You can install gdebi from the software center or using the command below:
+
+```
+sudo apt install gdebi
+```
+
+#### Method 3: Install .deb files in command line using dpkg
+
+If you want to install deb packages in command lime, you can use either apt command or dpkg command. Apt command actually uses [dpkg command][9] underneath it but apt is more popular and easy to use.
+
+If you want to use the apt command for deb files, use it like this:
+
+```
+sudo apt install path_to_deb_file
+```
+
+If you want to use dpkg command for installing deb packages, here’s how to do it:
+
+```
+sudo dpkg -i path_to_deb_file
+```
+
+In both commands, you should replace the path_to_deb_file with the path and name of the deb file you have downloaded.
+
+![Install deb files using dpkg command in Ubuntu][10]Installing deb files using dpkg command in Ubuntu
+
+If you get a dependency error while installing the deb packages, you may use the following command to fix the dependency issues:
+
+```
+sudo apt install -f
+```
+
+### How to remove deb packages
+
+Removing a deb package is not a big deal as well. And no, you don’t need the original deb file that you had used for installing the program.
+
+#### Method 1: Remove deb packages using apt commands
+
+All you need is the name of the program that you have installed and then you can use apt or dpkg to remove that program.
+
+```
+sudo apt remove program_name
+```
+
+Now the question comes, how do you find the exact program name that you need to use in the remove command? The apt command has a solution for that as well.
+
+You can find the list of all installed files with apt command but manually going through this will be a pain. So you can use the grep command to search for your package.
+
+For example, I installed AppGrid application in the previous section but if I want to know the exact program name, I can use something like this:
+
+```
+sudo apt list --installed | grep grid
+```
+
+This will give me all the packages that have grid in their name and from there, I can get the exact program name.
+
+```
+apt list --installed | grep grid
+WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
+appgrid/now 0.298 all [installed,local]
+```
+
+As you can see, a program called appgrid has been installed. Now you can use this program name with the apt remove command.
+
+#### Method 2: Remove deb packages using dpkg commands
+
+You can use dpkg to find the installed program’s name:
+
+```
+dpkg -l | grep grid
+```
+
+The output will give all the packages installed that has grid in its name.
+
+```
+dpkg -l | grep grid
+
+ii appgrid 0.298 all Discover and install apps for Ubuntu
+```
+
+ii in the above command output means package has been correctly installed.
+
+Now that you have the program name, you can use dpkg command to remove it:
+
+```
+dpkg -r program_name
+```
+
+**Tip: Updating deb packages**
+Some deb packages (like Chrome) provide updates through system updates but for most other programs, you’ll have to remove the existing program and install the newer version.
+
+I hope this beginner guide helped you to install deb packages on Ubuntu. I added the remove part so that you’ll have better control over the programs you installed.
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/install-deb-files-ubuntu
+
+作者:[Abhishek Prakash][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/abhishek/
+[b]: https://github.com/lujun9972
+[1]: https://itsfoss.com/remove-install-software-ubuntu/
+[2]: https://itsfoss.com/install-chrome-ubuntu/
+[3]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/02/deb-packages-ubuntu.png?resize=800%2C450&ssl=1
+[4]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/01/install-google-chrome-ubuntu-4.jpeg?resize=800%2C347&ssl=1
+[5]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/01/install-google-chrome-ubuntu-5.jpeg?resize=800%2C516&ssl=1
+[6]: https://itsfoss.com/gdebi-default-ubuntu-software-center/
+[7]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/01/gdebi-handling-dependency.jpg?ssl=1
+[8]: http://xmodulo.com
+[9]: https://help.ubuntu.com/lts/serverguide/dpkg.html.en
+[10]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/02/install-deb-file-with-dpkg.png?ssl=1
+[11]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/02/deb-packages-ubuntu.png?fit=800%2C450&ssl=1
diff --git a/sources/tech/20190211 How does rootless Podman work.md b/sources/tech/20190211 How does rootless Podman work.md
new file mode 100644
index 0000000000..a085ae9014
--- /dev/null
+++ b/sources/tech/20190211 How does rootless Podman work.md
@@ -0,0 +1,107 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (How does rootless Podman work?)
+[#]: via: (https://opensource.com/article/19/2/how-does-rootless-podman-work)
+[#]: author: (Daniel J Walsh https://opensource.com/users/rhatdan)
+
+How does rootless Podman work?
+======
+Learn how Podman takes advantage of user namespaces to run in rootless mode.
+
+
+In my [previous article][1] on user namespace and [Podman][2], I discussed how you can use Podman commands to launch different containers with different user namespaces giving you better separation between containers. Podman also takes advantage of user namespaces to be able to run in rootless mode. Basically, when a non-privileged user runs Podman, the tool sets up and joins a user namespace. After Podman becomes root inside of the user namespace, Podman is allowed to mount certain filesystems and set up the container. Note there is no privilege escalation here other then additional UIDs available to the user, explained below.
+
+### How does Podman create the user namespace?
+
+#### shadow-utils
+
+Most current Linux distributions include a version of shadow-utils that uses the **/etc/subuid** and **/etc/subgid** files to determine what UIDs and GIDs are available for a user in a user namespace.
+
+```
+$ cat /etc/subuid
+dwalsh:100000:65536
+test:165536:65536
+$ cat /etc/subgid
+dwalsh:100000:65536
+test:165536:65536
+```
+
+The useradd program automatically allocates 65536 UIDs for each user added to the system. If you have existing users on a system, you would need to allocate the UIDs yourself. The format of these files is **username:STARTUID:TOTALUIDS**. Meaning in my case, dwalsh is allocated UIDs 100000 through 165535 along with my default UID, which happens to be 3265 defined in /etc/passwd. You need to be careful when allocating these UID ranges that they don't overlap with any **real** UID on the system. If you had a user listed as UID 100001, now I (dwalsh) would be able to become this UID and potentially read/write/execute files owned by the UID.
+
+Shadow-utils also adds two setuid programs (or setfilecap). On Fedora I have:
+
+```
+$ getcap /usr/bin/newuidmap
+/usr/bin/newuidmap = cap_setuid+ep
+$ getcap /usr/bin/newgidmap
+/usr/bin/newgidmap = cap_setgid+ep
+```
+
+Podman executes these files to set up the user namespace. You can see the mappings by examining /proc/self/uid_map and /proc/self/gid_map from inside of the rootless container.
+
+```
+$ podman run alpine cat /proc/self/uid_map /proc/self/gid_map
+ 0 3267 1
+ 1 100000 65536
+ 0 3267 1
+ 1 100000 65536
+```
+
+As seen above, Podman defaults to mapping root in the container to your current UID (3267) and then maps ranges of allocated UIDs/GIDs in /etc/subuid and /etc/subgid starting at 1. Meaning in my example, UID=1 in the container is UID 100000, UID=2 is UID 100001, all the way up to 65536, which is 165535.
+
+Any item from outside of the user namespace that is owned by a UID or GID that is not mapped into the user namespace appears to belong to the user configured in the **kernel.overflowuid** sysctl, which by default is 35534, which my /etc/passwd file says has the name **nobody**. Since your process can't run as an ID that isn't mapped, the owner and group permissions don't apply, so you can only access these files based on their "other" permissions. This includes all files owned by **real** root on the system running the container, since root is not mapped into the user namespace.
+
+The [Buildah][3] command has a cool feature, [**buildah unshare**][4]. This puts you in the same user namespace that Podman runs in, but without entering the container's filesystem, so you can list the contents of your home directory.
+
+```
+$ ls -ild /home/dwalsh
+8193 drwx--x--x. 290 dwalsh dwalsh 20480 Jan 29 07:58 /home/dwalsh
+$ buildah unshare ls -ld /home/dwalsh
+drwx--x--x. 290 root root 20480 Jan 29 07:58 /home/dwalsh
+```
+
+Notice that when listing the home dir attributes outside the user namespace, the kernel reports the ownership as dwalsh, while inside the user namespace it reports the directory as owned by root. This is because the home directory is owned by 3267, and inside the user namespace we are treating that UID as root.
+
+### What happens next in Podman after the user namespace is set up?
+
+Podman uses [containers/storage][5] to pull the container image, and containers/storage is smart enough to map all files owned by root in the image to the root of the user namespace, and any other files owned by different UIDs to their user namespace UIDs. By default, this content gets written to ~/.local/share/containers/storage. Container storage works in rootless mode with either the vfs mode or with Overlay. Note: Overlay is supported only if the [fuse-overlayfs][6] executable is installed.
+
+The kernel only allows user namespace root to mount certain types of filesystems; at this time it allows mounting of procfs, sysfs, tmpfs, fusefs, and bind mounts (as long as the source and destination are owned by the user running Podman. OverlayFS is not supported yet, although the kernel teams are working on allowing it).
+
+Podman then mounts the container's storage if it is using fuse-overlayfs; if the storage driver is using vfs, then no mounting is required. Podman on vfs requires a lot of space though, since each container copies the entire underlying filesystem.
+
+Podman then mounts /proc and /sys along with a few tmpfs and creates the devices in the container.
+
+In order to use networking other than the host networking, Podman uses the [slirp4netns][7] program to set up **User mode networking for unprivileged network namespace**. Slirp4netns allows Podman to expose ports within the container to the host. Note that the kernel still will not allow a non-privileged process to bind to ports less than 1024. Podman-1.1 or later is required for binding to ports.
+
+Rootless Podman can use user namespace for container separation, but you only have access to the UIDs defined in the /etc/subuid file.
+
+### Conclusion
+
+The Podman tool is enabling people to build and use containers without sacrificing the security of the system; you can give your developers the access they need without giving them root.
+
+And when you put your containers into production, you can take advantage of the extra security provided by the user namespace to keep the workloads isolated from each other.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/2/how-does-rootless-podman-work
+
+作者:[Daniel J Walsh][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/rhatdan
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/article/18/12/podman-and-user-namespaces
+[2]: https://podman.io/
+[3]: https://buildah.io/
+[4]: https://github.com/containers/buildah/blob/master/docs/buildah-unshare.md
+[5]: https://github.com/containers/storage
+[6]: https://github.com/containers/fuse-overlayfs
+[7]: https://github.com/rootless-containers/slirp4netns
diff --git a/sources/tech/20190211 What-s the right amount of swap space for a modern Linux system.md b/sources/tech/20190211 What-s the right amount of swap space for a modern Linux system.md
new file mode 100644
index 0000000000..c04d47e5ca
--- /dev/null
+++ b/sources/tech/20190211 What-s the right amount of swap space for a modern Linux system.md
@@ -0,0 +1,68 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (What's the right amount of swap space for a modern Linux system?)
+[#]: via: (https://opensource.com/article/19/2/swap-space-poll)
+[#]: author: (David Both https://opensource.com/users/dboth)
+
+What's the right amount of swap space for a modern Linux system?
+======
+Complete our survey and voice your opinion on how much swap space to allocate.
+
+
+Swap space is one of those things that everyone seems to have an idea about, and I am no exception. All my sysadmin friends have their opinions, and most distributions make recommendations too.
+
+Many years ago, the rule of thumb for the amount of swap space that should be allocated was 2X the amount of RAM installed in the computer. Of course that was when a typical computer's RAM was measured in KB or MB. So if a computer had 64KB of RAM, a swap partition of 128KB would be an optimum size.
+
+This took into account the fact that RAM memory sizes were typically quite small, and allocating more than 2X RAM for swap space did not improve performance. With more than twice RAM for swap, most systems spent more time thrashing than performing useful work.
+
+RAM memory has become quite inexpensive and many computers now have RAM in the tens of gigabytes. Most of my newer computers have at least 4GB or 8GB of RAM, two have 32GB, and my main workstation has 64GB. When dealing with computers with huge amounts of RAM, the limiting performance factor for swap space is far lower than the 2X multiplier. As a consequence, recommended swap space is considered a function of system memory workload, not system memory.
+
+Table 1 provides the Fedora Project's recommended size for a swap partition, depending on the amount of RAM in your system and whether you want enough memory for your system to hibernate. To allow for hibernation, you need to edit the swap space in the custom partitioning stage. The "recommended" swap partition size is established automatically during a default installation, but I usually find it's either too large or too small for my needs.
+
+The [Fedora 28 Installation Guide][1] defines current thinking about swap space allocation. Note that other versions of Fedora and other Linux distributions may differ slightly, but this is the same table Red Hat Enterprise Linux uses for its recommendations. These recommendations have not changed since Fedora 19.
+
+| Amount of RAM installed in system | Recommended swap space | Recommended swap space with hibernation |
+| --------------------------------- | ---------------------- | --------------------------------------- |
+| ≤ 2GB | 2X RAM | 3X RAM |
+| 2GB – 8GB | = RAM | 2X RAM |
+| 8GB – 64GB | 4G to 0.5X RAM | 1.5X RAM |
+| >64GB | Minimum 4GB | Hibernation not recommended |
+
+Table 1: Recommended system swap space in Fedora 28's documentation.
+
+Table 2 contains my recommendations based on my experiences in multiple environments over the years.
+| Amount of RAM installed in system | Recommended swap space |
+| --------------------------------- | ---------------------- |
+| ≤ 2GB | 2X RAM |
+| 2GB – 8GB | = RAM |
+| > 8GB | 8GB |
+
+Table 2: My recommended system swap space.
+
+It's possible that neither of these tables will work for your environment, but they will give you a place to start. The main consideration is that as the amount of RAM increases, adding more swap space simply leads to thrashing well before the swap space comes close to being filled. If you have too little virtual memory, you should add more RAM, if possible, rather than more swap space.
+
+In order to test the Fedora (and RHEL) swap space recommendations, I used its recommendation of **0.5*RAM** on my two largest systems (the ones with 32GB and 64GB of RAM). Even when running four or five VMs, multiple documents in LibreOffice, Thunderbird, the Chrome web browser, several terminal emulator sessions, the Xfe file manager, and a number of other background applications, the only time I see any use of swap is during backups I have scheduled for every morning at about 2am. Even then, swap usage is no more than 16MB—yes megabytes. These results are for my system with my loads and do not necessarily apply to your real-world environment.
+
+I recently had a conversation about swap space with some of the other Community Moderators here at [Opensource.com][2], and Chris Short, one of my friends in that illustrious and talented group, pointed me to an old [article][3] where he recommended using 1GB for swap space. This article was written in 2003, and he told me later that he now recommends zero swap space.
+
+So, we wondered, what you think? What do you recommend or use on your systems for swap space?
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/2/swap-space-poll
+
+作者:[David Both][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/dboth
+[b]: https://github.com/lujun9972
+[1]: https://docs.fedoraproject.org/en-US/fedora/f28/install-guide/
+[2]: http://Opensource.com
+[3]: https://chrisshort.net/moving-to-linux-partitioning/
diff --git a/sources/tech/20190212 Top 10 Best Linux Media Server Software.md b/sources/tech/20190212 Top 10 Best Linux Media Server Software.md
new file mode 100644
index 0000000000..8fcea6343a
--- /dev/null
+++ b/sources/tech/20190212 Top 10 Best Linux Media Server Software.md
@@ -0,0 +1,229 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Top 10 Best Linux Media Server Software)
+[#]: via: (https://itsfoss.com/best-linux-media-server)
+[#]: author: (Ankush Das https://itsfoss.com/author/ankush/)
+
+Top 10 Best Linux Media Server Software
+======
+
+Did someone tell you that Linux is just for programmers? That is so wrong! You have got a lot of great tools for [digital artists][1], [writers][2] and musicians.
+
+We have covered such tools in the past. Today it’s going to be slightly different. Instead of creating new digital content, let’s talk about consuming it.
+
+You have probably heard of media servers? Basically these software (and sometimes gadgets) allow you to view your local or cloud media (music, videos etc) in an intuitive interface. You can even use it to stream the content to other devices on your network. Sort of your personal Netflix.
+
+In this article, we will talk about the best media software available for Linux that you can use as a media player or as a media server software – as per your requirements.
+
+Some of these applications can also be used with Google’s Chromecast and Amazon’s Firestick.
+
+### Best Media Server Software for Linux
+
+![Best Media Server Software for Linux][3]
+
+The mentioned Linux media server software are in no particular order of ranking.
+
+I have tried to provide installation instructions for Ubuntu and Debian based distributions. It’s not possible to list installation steps for all Linux distributions for all the media servers mentioned here. Please take no offence for that.
+
+A couple of software in this list are not open source. If that’s the case, I have highlighted it appropriately.
+
+### 1\. Kodi
+
+![Kodi Media Server][4]
+
+Kod is one of the most popular media server software and player. Recently, Kodi 18.0 dropped in with a bunch of improvements that includes the support for Digital Rights Management (DRM) decryption, game emulators, ROMs, voice control, and more.
+
+It is a completely free and open source software. An active community for discussions and support exists as well. The user interface for Kodi is beautiful. I haven’t had the chance to use it in its early days – but I was amazed to see such a good UI for a Linux application.
+
+It has got great playback support – so you can add any supported 3rd party media service for the content or manually add the ripped video files to watch.
+
+#### How to install Kodi
+
+Type in the following commands in the terminal to install the latest version of Kodi via its [official PPA][5].
+
+```
+sudo apt-get install software-properties-common
+sudo add-apt-repository ppa:team-xbmc/ppa
+sudo apt-get update
+sudo apt-get install kodi
+```
+
+To know more about installing a development build or upgrading Kodi, refer to the [official installation guide][6].
+
+### 2\. Plex
+
+![Plex Media Server][7]
+
+Plex is yet another impressive media player or could be used as a media server software. It is a great alternative to Kodi for the users who mostly utilize it to create an offline network of their media collection to sync and watch across multiple devices.
+
+Unlike Kodi, **Plex is not entirely open source**. It does offer a free account in order to use it. In addition, it offers premium pricing plans to unlock more features and have a greater control over your media while also being able to get a detailed insight on who/what/how Plex is being used.
+
+If you are an audiophile, you would love the integration of Plex with [TIDAL][8] music streaming service. You can also set up Live TV by adding it to your tuner.
+
+#### How to install Plex
+
+You can simply download the .deb file available on their official webpage and install it directly (or using [GDebi][9])
+
+### 3\. Jellyfin
+
+![Emby media server][10]
+
+Yet another open source media server software with a bunch of features. [Jellyfin][11] is actually a fork of Emby media server. It may be one of the best out there available for ‘free’ but the multi-platform support still isn’t there yet.
+
+You can run it on a browser or utilize Chromecast – however – you will have to wait if you want the Android app or if you want it to support several devices.
+
+#### How to install Jellyfin
+
+Jellyfin provides a [detailed documentation][12] on how to install it from the binary packages/image available for Linux, Docker, and more.
+
+You will also find it easy to install it from the repository via the command line for Debian-based distribution. Check out their [installation guide][13] for more information.
+
+### 4\. LibreELEC
+
+![libreELEC][14]
+
+LibreELEC is an interesting media server software which is based on Kodi v18.0. They have recently released a new version (9.0.0) with a complete overhaul of the core OS support, hardware compatibility and user experience.
+
+Of course, being based on Kodi, it also has the DRM support. In addition, you can utilize its generic Linux builds or the special ones tailored for Raspberry Pi builds, WeTek devices, and more.
+
+#### How to install LibreELEC
+
+You can download the installer from their [official site][15]. For detailed instructions on how to use it, please refer to the [installation guide][16].
+
+### 5\. OpenFLIXR Media Server
+
+![OpenFLIXR Media Server][17]
+
+Want something similar that compliments Plex media server but also compatible with VirtualBox or VMWare? You got it!
+
+OpenFLIXR is an automated media server software which integrates with Plex to provide all the features along with the ability to auto download TV shows and movies from Torrents. It even fetches the subtitles automatically giving you a seamless experience when coupled with Plex media software.
+
+You can also automate your home theater with this installed. In case you do not want to run it on a physical instance, it supports VMware, VirtualBox and Hyper-V as well. The best part is – it is an open source solution and based on Ubuntu Server.
+
+#### How to install OpenFLIXR
+
+The best way to do it is by installing VirtualBox – it will be easier. After you do that, just download it from the [official website][18] and import it.
+
+### 6\. MediaPortal
+
+![MediaPortal][19]
+
+MediaPortal is just another open source simple media server software with a decent user interface. It all depends on your personal preference – event though I would recommend Kodi over this.
+
+You can play DVDs, stream videos on your local network, and listen to music as well. It does not offer a fancy set of features but the ones you will mostly need.
+
+It gives you the option to choose from two different versions (one that is stable and the second which tries to incorporate new features – could be unstable).
+
+#### How to install MediaPotal
+
+Depending on what you want to setup (A TV-server only or a complete server setup), follow the [official setup guide][20] to install it properly.
+
+### 7\. Gerbera
+
+![Gerbera Media Center][21]
+
+A simple implementation for a media server to be able to stream using your local network. It does support transcoding which will convert the media in the format your device supports.
+
+If you have been following the options for media server form a very long time, then you might identify this as the rebranded (and improved) version of MediaTomb. Even though it is not a popular choice among the Linux users – it is still something usable when all fails or for someone who prefers a straightforward and a basic media server.
+
+#### How to install Gerbera
+
+Type in the following commands in the terminal to install it on any Ubuntu-based distro:
+
+```
+sudo apt install gerbera
+```
+
+For other Linux distributions, refer to the [documentation][22].
+
+### 8\. OSMC (Open Source Media Center)
+
+![OSMC Open Source Media Center][23]
+
+It is an elegant-looking media server software originally based on Kodi media center. I was quite impressed with the user interface. It is simple and robust, being a free and open source solution. In a nutshell, all the essential features you would expect in a media server software.
+
+You can also opt in to purchase OSMC’s flagship device. It will play just about anything up to 4K standards with HD audio. In addition, it supports Raspberry Pi builds and 1st-gen Apple TV.
+
+#### How to install OSMC
+
+If your device is compatible, you can just select your operating system and download the device installer from the official [download page][24] and create a bootable image to install.
+
+### 9\. Universal Media Server
+
+![][25]
+
+Yet another simple addition to this list. Universal Media Server does not offer any fancy features but just helps you transcode / stream video and audio without needing much configuration.
+
+It supports Xbox 360, PS 3, and just about any other [DLNA][26]-capable devices.
+
+#### How to install Universal Media Center
+
+You can find all the packages listed on [FossHub][27] but you should follow the [official forum][28] to know more about how to install the package that you downloaded from the website.
+
+### 10\. Red5 Media Server
+
+![Red5 Media Server][29]Image Credit: [Red5 Server][30]
+
+A free and open source media server tailored for enterprise usage. You can use it for live streaming solutions – no matter if it is for entertainment or just video conferencing.
+
+They also offer paid licensing options for mobiles and high scalability.
+
+#### How to install Red5
+
+Even though it is not the quickest installation method, follow the [installation guide on GitHub][31] to get started with the server without needing to tinker around.
+
+### Wrapping Up
+
+Every media server software listed here has its own advantages – you should pick one up and try the one which suits your requirement.
+
+Did we miss any of your favorite media server software? Let us know about it in the comments below!
+
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/best-linux-media-server
+
+作者:[Ankush Das][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/ankush/
+[b]: https://github.com/lujun9972
+[1]: https://itsfoss.com/best-linux-graphic-design-software/
+[2]: https://itsfoss.com/open-source-tools-writers/
+[3]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/02/best-media-server-linux.png?resize=800%2C450&ssl=1
+[4]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/02/kodi-18-media-server.jpg?fit=800%2C450&ssl=1
+[5]: https://itsfoss.com/ppa-guide/
+[6]: https://kodi.wiki/view/HOW-TO:Install_Kodi_for_Linux
+[7]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/02/plex.jpg?fit=800%2C368&ssl=1
+[8]: https://tidal.com/
+[9]: https://itsfoss.com/gdebi-default-ubuntu-software-center/
+[10]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/02/emby-server.jpg?fit=800%2C373&ssl=1
+[11]: https://jellyfin.github.io/
+[12]: https://jellyfin.readthedocs.io/en/latest/
+[13]: https://jellyfin.readthedocs.io/en/latest/administrator-docs/installing/
+[14]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/02/libreelec.jpg?resize=800%2C600&ssl=1
+[15]: https://libreelec.tv/downloads_new/
+[16]: https://libreelec.wiki/libreelec_usb-sd_creator
+[17]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/02/openflixr-media-server.jpg?fit=800%2C449&ssl=1
+[18]: http://www.openflixr.com/#Download
+[19]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/02/mediaportal.jpg?ssl=1
+[20]: https://www.team-mediaportal.com/wiki/display/MediaPortal1/Quick+Setup
+[21]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/02/gerbera-server-softwarei.jpg?fit=800%2C583&ssl=1
+[22]: http://docs.gerbera.io/en/latest/install.html
+[23]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/02/osmc-server.jpg?fit=800%2C450&ssl=1
+[24]: https://osmc.tv/download/
+[25]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/02/universal-media-server.jpg?ssl=1
+[26]: https://en.wikipedia.org/wiki/Digital_Living_Network_Alliance
+[27]: https://www.fosshub.com/Universal-Media-Server.html?dwl=UMS-7.8.0.tgz
+[28]: https://www.universalmediaserver.com/forum/viewtopic.php?t=10275
+[29]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/02/red5.jpg?resize=800%2C364&ssl=1
+[30]: https://www.red5server.com/
+[31]: https://github.com/Red5/red5-server/wiki/Installation-on-Linux
+[32]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/02/best-media-server-linux.png?fit=800%2C450&ssl=1
diff --git a/sources/tech/20190213 How to build a WiFi picture frame with a Raspberry Pi.md b/sources/tech/20190213 How to build a WiFi picture frame with a Raspberry Pi.md
new file mode 100644
index 0000000000..615f7620ed
--- /dev/null
+++ b/sources/tech/20190213 How to build a WiFi picture frame with a Raspberry Pi.md
@@ -0,0 +1,135 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (How to build a WiFi picture frame with a Raspberry Pi)
+[#]: via: (https://opensource.com/article/19/2/wifi-picture-frame-raspberry-pi)
+[#]: author: (Manuel Dewald https://opensource.com/users/ntlx)
+
+How to build a WiFi picture frame with a Raspberry Pi
+======
+DIY a digital photo frame that streams photos from the cloud.
+
+
+
+Digital picture frames are really nice because they let you enjoy your photos without having to print them out. Plus, adding and removing digital files is a lot easier than opening a traditional frame and swapping the picture inside when you want to display a new photo. Even so, it's still a bit of overhead to remove your SD card, USB stick, or other storage from a digital picture frame, plug it into your computer, and copy new pictures onto it.
+
+An easier option is a digital picture frame that gets its pictures over WiFi, for example from a cloud service. Here's how to make one.
+
+### Gather your materials
+
+ * Old [TFT][1] LCD screen
+ * HDMI-to-DVI cable (as the TFT screen supports DVI)
+ * Raspberry Pi 3
+ * Micro SD card
+ * Raspberry Pi power supply
+ * Keyboard
+ * Mouse (optional)
+
+
+
+Connect the Raspberry Pi to the display using the cable and attach the power supply.
+
+### Install Raspbian
+
+**sudo raspi-config**. There I change the hostname (e.g., to **picframe** ) in Network Options and enable SSH to work remotely on the Raspberry Pi in Interfacing Options. Connect to the Raspberry Pi using (for example) .
+
+### Build and install the cloud client
+
+Download and flash Raspbian to the Micro SD card by following these [directions][2] . Plug the Micro SD card into the Raspberry Pi, boot it up, and configure your WiFi. My first action after a new Raspbian installation is usually running. There I change the hostname (e.g., to) in Network Options and enable SSH to work remotely on the Raspberry Pi in Interfacing Options. Connect to the Raspberry Pi using (for example)
+
+I use [Nextcloud][3] to synchronize my pictures, but you could use NFS, [Dropbox][4], or whatever else fits your needs to upload pictures to the frame.
+
+If you use Nextcloud, get a client for Raspbian by following these [instructions][5]. This is handy for placing new pictures on your picture frame and will give you the client application you may be familiar with on a desktop PC. When connecting the client application to your Nextcloud server, make sure to select only the folder where you'll store the images you want to be displayed on the picture frame.
+
+### Set up the slideshow
+
+The easiest way I've found to set up the slideshow is with a [lightweight slideshow project][6] built for exactly this purpose. There are some alternatives, like configuring a screensaver, but this application appears to be the simplest to set up.
+
+On your Raspberry Pi, download the binaries from the latest release, unpack them, and move them to an executable folder:
+
+```
+wget https://github.com/NautiluX/slide/releases/download/v0.9.0/slide_pi_stretch_0.9.0.tar.gz
+tar xf slide_pi_stretch_0.9.0.tar.gz
+mv slide_0.9.0/slide /usr/local/bin/
+```
+
+Install the dependencies:
+
+```
+sudo apt install libexif12 qt5-default
+```
+
+Run the slideshow by executing the command below (don't forget to modify the path to your images). If you access your Raspberry Pi via SSH, set the **DISPLAY** variable to start the slideshow on the display attached to the Raspberry Pi.
+
+```
+DISPLAY=:0.0 slide -p /home/pi/nextcloud/picframe
+```
+
+### Autostart the slideshow
+
+To autostart the slideshow on Raspbian Stretch, create the following folder and add an **autostart** file to it:
+
+```
+mkdir -p /home/pi/.config/lxsession/LXDE/
+vi /home/pi/.config/lxsession/LXDE/autostart
+```
+
+Insert the following commands to autostart your slideshow. The **slide** command can be adjusted to your needs:
+
+```
+@xset s noblank
+@xset s off
+@xset -dpms
+@slide -p -t 60 -o 200 -p /home/pi/nextcloud/picframe
+```
+
+Disable screen blanking, which the Raspberry Pi normally does after 10 minutes, by editing the following file:
+
+```
+vi /etc/lightdm/lightdm.conf
+```
+
+and adding these two lines to the end:
+
+```
+[SeatDefaults]
+xserver-command=X -s 0 -dpms
+```
+
+### Configure a power-on schedule
+
+You can schedule your picture frame to turn on and off at specific times by using two simple cronjobs. For example, say you want it to turn on automatically at 7 am and turn off at 11 pm. Run **crontab -e** and insert the following two lines.
+
+```
+0 23 * * * /opt/vc/bin/tvservice -o
+
+0 7 * * * /opt/vc/bin/tvservice -p && sudo systemctl restart display-manager
+```
+
+Note that this won't turn the Raspberry Pi power's on and off; it will just turn off HDMI, which will turn the screen off. The first line will power off HDMI at 11 pm. The second line will bring the display back up and restart the display manager at 7 am.
+
+### Add a final touch
+
+By following these simple steps, you can create your own WiFi picture frame. If you want to give it a nicer look, build a wooden frame for the display.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/2/wifi-picture-frame-raspberry-pi
+
+作者:[Manuel Dewald][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/ntlx
+[b]: https://github.com/lujun9972
+[1]: https://en.wikipedia.org/wiki/Thin-film-transistor_liquid-crystal_display
+[2]: https://www.raspberrypi.org/documentation/installation/installing-images/README.md
+[3]: https://nextcloud.com/
+[4]: http://dropbox.com/
+[5]: https://github.com/nextcloud/client_theming#building-on-debian
+[6]: https://github.com/NautiluX/slide/releases/tag/v0.9.0
diff --git a/sources/tech/20190214 The Earliest Linux Distros- Before Mainstream Distros Became So Popular.md b/sources/tech/20190214 The Earliest Linux Distros- Before Mainstream Distros Became So Popular.md
new file mode 100644
index 0000000000..3b9af595d6
--- /dev/null
+++ b/sources/tech/20190214 The Earliest Linux Distros- Before Mainstream Distros Became So Popular.md
@@ -0,0 +1,103 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (The Earliest Linux Distros: Before Mainstream Distros Became So Popular)
+[#]: via: (https://itsfoss.com/earliest-linux-distros/)
+[#]: author: (Avimanyu Bandyopadhyay https://itsfoss.com/author/avimanyu/)
+
+The Earliest Linux Distros: Before Mainstream Distros Became So Popular
+======
+
+In this throwback history article, we’ve tried to look back into how some of the earliest Linux distributions evolved and came into being as we know them today.
+
+![][1]
+
+In here we have tried to explore how the idea of popular distros such as Red Hat, Debian, Slackware, SUSE, Ubuntu and many others came into being after the first Linux kernel became available.
+
+As Linux was initially released in the form of a kernel in 1991, the distros we know today was made possible with the help of numerous collaborators throughout the world with the creation of shells, libraries, compilers and related packages to make it a complete Operating System.
+
+### 1\. The first known “distro” by HJ Lu
+
+The way we know Linux distributions today goes back to 1992, when the first known distro-like tools to get access to Linux were released by HJ Lu. It consisted of two 5.25” floppy diskettes:
+
+![Linux 0.12 Boot and Root Disks | Photo Credit][2]
+
+ * **LINUX 0.12 BOOT DISK** : The “boot” disk was used to boot the system first.
+ * **LINUX 0.12 ROOT DISK** : The second “root” disk for getting a command prompt for access to the Linux file system after booting.
+
+
+
+To install 0.12 on a hard drive, one had to use a hex editor to edit its master boot record (MBR) and that was quite a complex process, especially during that era.
+
+Feeling too nostalgic?
+
+You can [install cool-retro-term application][3] that gives you a Linux terminal in the vintage looks of the 90’s computers.
+
+### 2\. MCC Interim Linux
+
+![MCC Linux 0.99.14, 1993 | Image Credit][4]
+
+Initially released in the same year as “LINUX 0.12” by Owen Le Blanc of Manchester Computing Centre in England, MCC Interim Linux was the first Linux distribution for novice users with a menu driven installer and end user/programming tools. Also in the form of a collection of diskettes, it could be installed on a system to provide a basic text-based environment.
+
+MCC Interim Linux was much more user-friendly than 0.12 and the installation process on a hard drive was much easier and similar to modern ways. It did not require using a hex editor to edit the MBR.
+
+Though it was first released in February 1992, it was also available for download through FTP since November that year.
+
+### 3\. TAMU Linux
+
+![TAMU Linux | Image Credit][5]
+
+TAMU Linux was developed by Aggies at Texas A&M with the Texas A&M Unix & Linux Users Group in May 1992 and was called TAMU 1.0A. It was the first Linux distribution to offer the X Window System instead of just a text based operating system.
+
+### 4\. Softlanding Linux System (SLS)
+
+![SLS Linux 1.05, 1994 | Image Credit][6]
+
+“Gentle Touchdowns for DOS Bailouts” was their slogan! SLS was released by Peter McDonald in May 1992. SLS was quite widely used and popular during its time and greatly promoted the idea of Linux. But due to a decision by the developers to change the executable format in the distro, users stopped using it.
+
+Many of the popular distros the present community is most familiar with, evolved via SLS. Two of them are:
+
+ * **Slackware** : One of the earliest Linux distros, Slackware was created by Patrick Volkerding in 1993. Slackware is based on SLS and was one of the very first Linux distributions.
+ * **Debian** : An initiative by Ian Murdock, Debian was also released in 1993 after moving on from the SLS model. The very popular Ubuntu distro we know today is based on Debian.
+
+
+
+### 5\. Yggdrasil
+
+![LGX Yggdrasil Fall 1993 | Image Credit][7]
+
+Released on December 1992, Yggdrasil was the first distro to give birth to the idea of Live Linux CDs. It was developed by Yggdrasil Computing, Inc., founded by Adam J. Richter in Berkeley, California. It could automatically configure itself on system hardware as “Plug-and-Play”, which is a very regular and known feature in today’s time. The later versions of Yggdrasil included a hack for running any proprietary MS-DOS CD-ROM driver within Linux.
+
+![Yggdrasil’s Plug-and-Play Promo | Image Credit][8]
+
+Their motto was “Free Software For The Rest of Us”.
+
+In the late 90s, one very popular distro was [Mandriva][9], first released in 1998, by unifying the French _Mandrake Linux_ distribution with the Brazilian _Conectiva Linux_ distribution. It had a release lifetime of 18 months for updates related to Linux and system software and desktop based updates were released every year. It also had server versions with 5 years of support. Now we have [Open Mandriva][10].
+
+If you have more nostalgic distros to share from the earliest days of Linux release, please share with us in the comments below.
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/earliest-linux-distros/
+
+作者:[Avimanyu Bandyopadhyay][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/avimanyu/
+[b]: https://github.com/lujun9972
+[1]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/02/earliest-linux-distros.png?resize=800%2C450&ssl=1
+[2]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/01/Linux-0.12-Floppies.jpg?ssl=1
+[3]: https://itsfoss.com/cool-retro-term/
+[4]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/01/MCC-Interim-Linux-0.99.14-1993.jpg?fit=800%2C600&ssl=1
+[5]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/01/TAMU-Linux.jpg?ssl=1
+[6]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/01/SLS-1.05-1994.jpg?ssl=1
+[7]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/01/LGX_Yggdrasil_CD_Fall_1993.jpg?fit=781%2C800&ssl=1
+[8]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/01/Yggdrasil-Linux-Summer-1994.jpg?ssl=1
+[9]: https://en.wikipedia.org/wiki/Mandriva_Linux
+[10]: https://www.openmandriva.org/
diff --git a/sources/tech/20190215 Make websites more readable with a shell script.md b/sources/tech/20190215 Make websites more readable with a shell script.md
new file mode 100644
index 0000000000..06b748cfb5
--- /dev/null
+++ b/sources/tech/20190215 Make websites more readable with a shell script.md
@@ -0,0 +1,258 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Make websites more readable with a shell script)
+[#]: via: (https://opensource.com/article/19/2/make-websites-more-readable-shell-script)
+[#]: author: (Jim Hall https://opensource.com/users/jim-hall)
+
+Make websites more readable with a shell script
+======
+Calculate the contrast ratio between your website's text and background to make sure your site is easy to read.
+
+
+
+If you want people to find your website useful, they need to be able to read it. The colors you choose for your text can affect the readability of your site. Unfortunately, a popular trend in web design is to use low-contrast colors when printing text, such as gray text on a white background. Maybe that looks really cool to the web designer, but it is really hard for many of us to read.
+
+The W3C provides Web Content Accessibility Guidelines, which includes guidance to help web designers pick text and background colors that can be easily distinguished from each other. This is called the "contrast ratio." The W3C definition of the contrast ratio requires several calculations: given two colors, you first compute the relative luminance of each, then calculate the contrast ratio. The ratio will fall in the range 1 to 21 (typically written 1:1 to 21:1). The higher the contrast ratio, the more the text will stand out against the background. For example, black text on a white background is highly visible and has a contrast ratio of 21:1. And white text on a white background is unreadable at a contrast ratio of 1:1.
+
+The [W3C says body text][1] should have a contrast ratio of at least 4.5:1 with headings at least 3:1. But that seems to be the bare minimum. The W3C also recommends at least 7:1 for body text and at least 4.5:1 for headings.
+
+Calculating the contrast ratio can be a chore, so it's best to automate it. I've done that with this handy Bash script. In general, the script does these things:
+
+ 1. Gets the text color and background color
+ 2. Computes the relative luminance of each
+ 3. Calculates the contrast ratio
+
+
+
+### Get the colors
+
+You may know that every color on your monitor can be represented by red, green, and blue (R, G, and B). To calculate the relative luminance of a color, my script will need to know the red, green, and blue components of the color. Ideally, my script would read this information as separate R, G, and B values. Web designers might know the specific RGB code for their favorite colors, but most humans don't know RGB values for the different colors. Instead, most people reference colors by names like "red" or "gold" or "maroon."
+
+Fortunately, the GNOME [Zenity][2] tool has a color-picker app that lets you use different methods to select a color, then returns the RGB values in a predictable format of "rgb( **R** , **G** , **B** )". Using Zenity makes it easy to get a color value:
+
+```
+color=$( zenity --title 'Set text color' --color-selection --color='black' )
+```
+
+In case the user (accidentally) clicks the Cancel button, the script assumes a color:
+
+```
+if [ $? -ne 0 ] ; then
+ echo '** color canceled .. assume black'
+ color='rgb(0,0,0)'
+fi
+```
+
+My script does something similar to set the background color value as **$background**.
+
+### Compute the relative luminance
+
+Once you have the foreground color in **$color** and the background color in **$background** , the next step is to compute the relative luminance for each. On its website, the [W3C provides an algorithm][3] to compute the relative luminance of a color.
+
+> For the sRGB colorspace, the relative luminance of a color is defined as
+> **L = 0.2126 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated R + 0.7152 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated G + 0.0722 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated B** where R, G and B are defined as:
+>
+> if RsRGB <= 0.03928 then R = RsRGB/12.92
+> else R = ((RsRGB+0.055)/1.055) ^ 2.4
+>
+> if GsRGB <= 0.03928 then G = GsRGB/12.92
+> else G = ((GsRGB+0.055)/1.055) ^ 2.4
+>
+> if BsRGB <= 0.03928 then B = BsRGB/12.92
+> else B = ((BsRGB+0.055)/1.055) ^ 2.4
+>
+> and RsRGB, GsRGB, and BsRGB are defined as:
+>
+> RsRGB = R8bit/255
+>
+> GsRGB = G8bit/255
+>
+> BsRGB = B8bit/255
+
+Since Zenity returns color values in the format "rgb( **R** , **G** , **B** )," the script can easily pull apart the R, B, and G values to compute the relative luminance. AWK makes this a simple task, using the comma as the field separator ( **-F,** ) and using AWK's **substr()** string function to pick just the text we want from the "rgb( **R** , **G** , **B** )" color value:
+
+```
+R=$( echo $color | awk -F, '{print substr($1,5)}' )
+G=$( echo $color | awk -F, '{print $2}' )
+B=$( echo $color | awk -F, '{n=length($3); print substr($3,1,n-1)}' )
+```
+
+**(For more on extracting and displaying data with AWK,[Get our AWK cheat sheet][4].)**
+
+Calculating the final relative luminance is best done using the BC calculator. BC supports the simple if-then-else needed in the calculation, which makes this part simple. But since BC cannot directly calculate exponentiation using a non-integer exponent, we need to do some extra math using the natural logarithm instead:
+
+```
+echo "scale=4
+rsrgb=$R/255
+gsrgb=$G/255
+bsrgb=$B/255
+if ( rsrgb <= 0.03928 ) r = rsrgb/12.92 else r = e( 2.4 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated l((rsrgb+0.055)/1.055) )
+if ( gsrgb <= 0.03928 ) g = gsrgb/12.92 else g = e( 2.4 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated l((gsrgb+0.055)/1.055) )
+if ( bsrgb <= 0.03928 ) b = bsrgb/12.92 else b = e( 2.4 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated l((bsrgb+0.055)/1.055) )
+0.2126 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated r + 0.7152 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated g + 0.0722 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated b" | bc -l
+```
+
+This passes several instructions to BC, including the if-then-else statements that are part of the relative luminance formula. BC then prints the final value.
+
+### Calculate the contrast ratio
+
+With the relative luminance of the text color and the background color, now the script can calculate the contrast ratio. The [W3C determines the contrast ratio][5] with this formula:
+
+> (L1 + 0.05) / (L2 + 0.05), where
+> L1 is the relative luminance of the lighter of the colors, and
+> L2 is the relative luminance of the darker of the colors
+
+Given two relative luminance values **$r1** and **$r2** , it's easy to calculate the contrast ratio using the BC calculator:
+
+```
+echo "scale=2
+if ( $r1 > $r2 ) { l1=$r1; l2=$r2 } else { l1=$r2; l2=$r1 }
+(l1 + 0.05) / (l2 + 0.05)" | bc
+```
+
+This uses an if-then-else statement to determine which value ( **$r1** or **$r2** ) is the lighter or darker color. BC performs the resulting calculation and prints the result, which the script can store in a variable.
+
+### The final script
+
+With the above, we can pull everything together into a final script. I use Zenity to display the final result in a text box:
+
+```
+#!/bin/sh
+# script to calculate contrast ratio of colors
+
+# read color and background color:
+# zenity returns values like 'rgb(255,140,0)' and 'rgb(255,255,255)'
+
+color=$( zenity --title 'Set text color' --color-selection --color='black' )
+if [ $? -ne 0 ] ; then
+ echo '** color canceled .. assume black'
+ color='rgb(0,0,0)'
+fi
+
+background=$( zenity --title 'Set background color' --color-selection --color='white' )
+if [ $? -ne 0 ] ; then
+ echo '** background canceled .. assume white'
+ background='rgb(255,255,255)'
+fi
+
+# compute relative luminance:
+
+function luminance()
+{
+ R=$( echo $1 | awk -F, '{print substr($1,5)}' )
+ G=$( echo $1 | awk -F, '{print $2}' )
+ B=$( echo $1 | awk -F, '{n=length($3); print substr($3,1,n-1)}' )
+
+ echo "scale=4
+rsrgb=$R/255
+gsrgb=$G/255
+bsrgb=$B/255
+if ( rsrgb <= 0.03928 ) r = rsrgb/12.92 else r = e( 2.4 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated l((rsrgb+0.055)/1.055) )
+if ( gsrgb <= 0.03928 ) g = gsrgb/12.92 else g = e( 2.4 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated l((gsrgb+0.055)/1.055) )
+if ( bsrgb <= 0.03928 ) b = bsrgb/12.92 else b = e( 2.4 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated l((bsrgb+0.055)/1.055) )
+0.2126 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated r + 0.7152 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated g + 0.0722 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated b" | bc -l
+}
+
+lum1=$( luminance $color )
+lum2=$( luminance $background )
+
+# compute contrast
+
+function contrast()
+{
+ echo "scale=2
+if ( $1 > $2 ) { l1=$1; l2=$2 } else { l1=$2; l2=$1 }
+(l1 + 0.05) / (l2 + 0.05)" | bc
+}
+
+rel=$( contrast $lum1 $lum2 )
+
+# print results
+
+( cat<
+```
+
+Alternatively, add the following to the beginning of each of your BATS test scripts:
+
+```
+#!/usr/bin/env ./test/libs/bats/bin/bats
+load 'libs/bats-support/load'
+load 'libs/bats-assert/load'
+```
+
+and **chmod +x **. This will a) make them executable with the BATS installed in **./test/libs/bats** and b) include these helper libraries. BATS test scripts are typically stored in the **test** directory and named for the script being tested, but with the **.bats** extension. For example, a BATS script that tests **bin/build** should be called **test/build.bats**.
+
+You can also run an entire set of BATS test files by passing a regular expression to BATS, e.g., **./test/lib/bats/bin/bats test/*.bats**.
+
+### Organizing libraries and scripts for BATS coverage
+
+Bash scripts and libraries must be organized in a way that efficiently exposes their inner workings to BATS. In general, library functions and shell scripts that run many commands when they are called or executed are not amenable to efficient BATS testing.
+
+For example, [build.sh][4] is a typical script that many people write. It is essentially a big pile of code. Some might even put this pile of code in a function in a library. But it's impossible to run a big pile of code in a BATS test and cover all possible types of failures it can encounter in separate test cases. The only way to test this pile of code with sufficient coverage is to break it into many small, reusable, and, most importantly, independently testable functions.
+
+It's straightforward to add more functions to a library. An added benefit is that some of these functions can become surprisingly useful in their own right. Once you have broken your library function into lots of smaller functions, you can **source** the library in your BATS test and run the functions as you would any other command to test them.
+
+Bash scripts must also be broken down into multiple functions, which the main part of the script should call when the script is executed. In addition, there is a very useful trick to make it much easier to test Bash scripts with BATS: Take all the code that is executed in the main part of the script and move it into a function, called something like **run_main**. Then, add the following to the end of the script:
+
+```
+if [[ "${BASH_SOURCE[0]}" == "${0}" ]]
+then
+ run_main
+fi
+```
+
+This bit of extra code does something special. It makes the script behave differently when it is executed as a script than when it is brought into the environment with **source**. This trick enables the script to be tested the same way a library is tested, by sourcing it and testing the individual functions. For example, here is [build.sh refactored for better BATS testability][5].
+
+### Writing and running tests
+
+As mentioned above, BATS is a TAP-compliant testing framework with a syntax and output that will be familiar to those who have used other TAP-compliant testing suites, such as JUnit, RSpec, or Jest. Its tests are organized into individual test scripts. Test scripts are organized into one or more descriptive **@test** blocks that describe the unit of the application being tested. Each **@test** block will run a series of commands that prepares the test environment, runs the command to be tested, and makes assertions about the exit and output of the tested command. Many assertion functions are imported with the **bats** , **bats-assert** , and **bats-support** libraries, which are loaded into the environment at the beginning of the BATS test script. Here is a typical BATS test block:
+
+```
+@test "requires CI_COMMIT_REF_SLUG environment variable" {
+ unset CI_COMMIT_REF_SLUG
+ assert_empty "${CI_COMMIT_REF_SLUG}"
+ run some_command
+ assert_failure
+ assert_output --partial "CI_COMMIT_REF_SLUG"
+}
+```
+
+If a BATS script includes **setup** and/or **teardown** functions, they are automatically executed by BATS before and after each test block runs. This makes it possible to create environment variables, test files, and do other things needed by one or all tests, then tear them down after each test runs. [**Build.bats**][6] is a full BATS test of our newly formatted **build.sh** script. (The **mock_docker** command in this test will be explained below, in the section on mocking/stubbing.)
+
+When the test script runs, BATS uses **exec** to run each **@test** block as a separate subprocess. This makes it possible to export environment variables and even functions in one **@test** without affecting other **@test** s or polluting your current shell session. The output of a test run is a standard format that can be understood by humans and parsed or manipulated programmatically by TAP consumers. Here is an example of the output for the **CI_COMMIT_REF_SLUG** test block when it fails:
+
+```
+ ✗ requires CI_COMMIT_REF_SLUG environment variable
+ (from function `assert_output' in file test/libs/bats-assert/src/assert.bash, line 231,
+ in test file test/ci_deploy.bats, line 26)
+ `assert_output --partial "CI_COMMIT_REF_SLUG"' failed
+
+ -- output does not contain substring --
+ substring (1 lines):
+ CI_COMMIT_REF_SLUG
+ output (3 lines):
+ ./bin/deploy.sh: join_string_by: command not found
+ oc error
+ Could not login
+ --
+
+ ** Did not delete , as test failed **
+
+1 test, 1 failure
+```
+
+Here is the output of a successful test:
+
+```
+✓ requires CI_COMMIT_REF_SLUG environment variable
+```
+
+### Helpers
+
+Like any shell script or library, BATS test scripts can include helper libraries to share common code across tests or enhance their capabilities. These helper libraries, such as **bats-assert** and **bats-support** , can even be tested with BATS.
+
+Libraries can be placed in the same test directory as the BATS scripts or in the **test/libs** directory if the number of files in the test directory gets unwieldy. BATS provides the **load** function that takes a path to a Bash file relative to the script being tested (e.g., **test** , in our case) and sources that file. Files must end with the prefix **.bash** , but the path to the file passed to the **load** function can't include the prefix. **build.bats** loads the **bats-assert** and **bats-support** libraries, a small **[helpers.bash][7]** library, and a **docker_mock.bash** library (described below) with the following code placed at the beginning of the test script below the interpreter magic line:
+
+```
+load 'libs/bats-support/load'
+load 'libs/bats-assert/load'
+load 'helpers'
+load 'docker_mock'
+```
+
+### Stubbing test input and mocking external calls
+
+The majority of Bash scripts and libraries execute functions and/or executables when they run. Often they are programmed to behave in specific ways based on the exit status or output ( **stdout** , **stderr** ) of these functions or executables. To properly test these scripts, it is often necessary to make fake versions of these commands that are designed to behave in a specific way during a specific test, a process called "stubbing." It may also be necessary to spy on the program being tested to ensure it calls a specific command, or it calls a specific command with specific arguments, a process called "mocking." For more on this, check out this great [discussion of mocking and stubbing][8] in Ruby RSpec, which applies to any testing system.
+
+The Bash shell provides tricks that can be used in your BATS test scripts to do mocking and stubbing. All require the use of the Bash **export** command with the **-f** flag to export a function that overrides the original function or executable. This must be done before the tested program is executed. Here is a simple example that overrides the **cat** executable:
+
+```
+function cat() { echo "THIS WOULD CAT ${*}" }
+export -f cat
+```
+
+This method overrides a function in the same manner. If a test needs to override a function within the script or library being tested, it is important to source the tested script or library before the function is stubbed or mocked. Otherwise, the stub/mock will be replaced with the actual function when the script is sourced. Also, make sure to stub/mock before you run the command you're testing. Here is an example from **build.bats** that mocks the **raise** function described in **build.sh** to ensure a specific error message is raised by the login fuction:
+
+```
+@test ".login raises on oc error" {
+ source ${profile_script}
+ function raise() { echo "${1} raised"; }
+ export -f raise
+ run login
+ assert_failure
+ assert_output -p "Could not login raised"
+}
+```
+
+Normally, it is not necessary to unset a stub/mock function after the test, since **export** only affects the current subprocess during the **exec** of the current **@test** block. However, it is possible to mock/stub commands (e.g. **cat** , **sed** , etc.) that the BATS **assert** * functions use internally. These mock/stub functions must be **unset** before these assert commands are run, or they will not work properly. Here is an example from **build.bats** that mocks **sed** , runs the **build_deployable** function, and unsets **sed** before running any assertions:
+
+```
+@test ".build_deployable prints information, runs docker build on a modified Dockerfile.production and publish_image when its not a dry_run" {
+ local expected_dockerfile='Dockerfile.production'
+ local application='application'
+ local environment='environment'
+ local expected_original_base_image="${application}"
+ local expected_candidate_image="${application}-candidate:${environment}"
+ local expected_deployable_image="${application}:${environment}"
+ source ${profile_script}
+ mock_docker build --build-arg OAUTH_CLIENT_ID --build-arg OAUTH_REDIRECT --build-arg DDS_API_BASE_URL -t "${expected_deployable_image}" -
+ function publish_image() { echo "publish_image ${*}"; }
+ export -f publish_image
+ function sed() {
+ echo "sed ${*}" >&2;
+ echo "FROM application-candidate:environment";
+ }
+ export -f sed
+ run build_deployable "${application}" "${environment}"
+ assert_success
+ unset sed
+ assert_output --regexp "sed.*${expected_dockerfile}"
+ assert_output -p "Building ${expected_original_base_image} deployable ${expected_deployable_image} FROM ${expected_candidate_image}"
+ assert_output -p "FROM ${expected_candidate_image} piped"
+ assert_output -p "build --build-arg OAUTH_CLIENT_ID --build-arg OAUTH_REDIRECT --build-arg DDS_API_BASE_URL -t ${expected_deployable_image} -"
+ assert_output -p "publish_image ${expected_deployable_image}"
+}
+```
+
+Sometimes the same command, e.g. foo, will be invoked multiple times, with different arguments, in the same function being tested. These situations require the creation of a set of functions:
+
+ * mock_foo: takes expected arguments as input, and persists these to a TMP file
+ * foo: the mocked version of the command, which processes each call with the persisted list of expected arguments. This must be exported with export -f.
+ * cleanup_foo: removes the TMP file, for use in teardown functions. This can test to ensure that a @test block was successful before removing.
+
+
+
+Since this functionality is often reused in different tests, it makes sense to create a helper library that can be loaded like other libraries.
+
+A good example is **[docker_mock.bash][9]**. It is loaded into **build.bats** and used in any test block that tests a function that calls the Docker executable. A typical test block using **docker_mock** looks like:
+
+```
+@test ".publish_image fails if docker push fails" {
+ setup_publish
+ local expected_image="image"
+ local expected_publishable_image="${CI_REGISTRY_IMAGE}/${expected_image}"
+ source ${profile_script}
+ mock_docker tag "${expected_image}" "${expected_publishable_image}"
+ mock_docker push "${expected_publishable_image}" and_fail
+ run publish_image "${expected_image}"
+ assert_failure
+ assert_output -p "tagging ${expected_image} as ${expected_publishable_image}"
+ assert_output -p "tag ${expected_image} ${expected_publishable_image}"
+ assert_output -p "pushing image to gitlab registry"
+ assert_output -p "push ${expected_publishable_image}"
+}
+```
+
+This test sets up an expectation that Docker will be called twice with different arguments. With the second call to Docker failing, it runs the tested command, then tests the exit status and expected calls to Docker.
+
+One aspect of BATS introduced by **mock_docker.bash** is the **${BATS_TMPDIR}** environment variable, which BATS sets at the beginning to allow tests and helpers to create and destroy TMP files in a standard location. The **mock_docker.bash** library will not delete its persisted mocks file if a test fails, but it will print where it is located so it can be viewed and deleted. You may need to periodically clean old mock files out of this directory.
+
+One note of caution regarding mocking/stubbing: The **build.bats** test consciously violates a dictum of testing that states: [Don't mock what you don't own!][10] This dictum demands that calls to commands that the test's developer didn't write, like **docker** , **cat** , **sed** , etc., should be wrapped in their own libraries, which should be mocked in tests of scripts that use them. The wrapper libraries should then be tested without mocking the external commands.
+
+This is good advice and ignoring it comes with a cost. If the Docker CLI API changes, the test scripts will not detect this change, resulting in a false positive that won't manifest until the tested **build.sh** script runs in a production setting with the new version of Docker. Test developers must decide how stringently they want to adhere to this standard, but they should understand the tradeoffs involved with their decision.
+
+### Conclusion
+
+Introducing a testing regime to any software development project creates a tradeoff between a) the increase in time and organization required to develop and maintain code and tests and b) the increased confidence developers have in the integrity of the application over its lifetime. Testing regimes may not be appropriate for all scripts and libraries.
+
+In general, scripts and libraries that meet one or more of the following should be tested with BATS:
+
+ * They are worthy of being stored in source control
+ * They are used in critical processes and relied upon to run consistently for a long period of time
+ * They need to be modified periodically to add/remove/modify their function
+ * They are used by others
+
+
+
+Once the decision is made to apply a testing discipline to one or more Bash scripts or libraries, BATS provides the comprehensive testing features that are available in other software development environments.
+
+Acknowledgment: I am indebted to [Darrin Mann][11] for introducing me to BATS testing.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/2/testing-bash-bats
+
+作者:[Darin London][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/dmlond
+[b]: https://github.com/lujun9972
+[1]: https://github.com/sstephenson/bats
+[2]: http://testanything.org/
+[3]: https://git-scm.com/book/en/v2/Git-Tools-Submodules
+[4]: https://github.com/dmlond/how_to_bats/blob/preBats/build.sh
+[5]: https://github.com/dmlond/how_to_bats/blob/master/bin/build.sh
+[6]: https://github.com/dmlond/how_to_bats/blob/master/test/build.bats
+[7]: https://github.com/dmlond/how_to_bats/blob/master/test/helpers.bash
+[8]: https://www.codewithjason.com/rspec-mocks-stubs-plain-english/
+[9]: https://github.com/dmlond/how_to_bats/blob/master/test/docker_mock.bash
+[10]: https://github.com/testdouble/contributing-tests/wiki/Don't-mock-what-you-don't-own
+[11]: https://github.com/dmann
diff --git a/sources/tech/20190222 Q4OS Linux Revives Your Old Laptop with Windows- Looks.md b/sources/tech/20190222 Q4OS Linux Revives Your Old Laptop with Windows- Looks.md
new file mode 100644
index 0000000000..93549ac45b
--- /dev/null
+++ b/sources/tech/20190222 Q4OS Linux Revives Your Old Laptop with Windows- Looks.md
@@ -0,0 +1,192 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Q4OS Linux Revives Your Old Laptop with Windows’ Looks)
+[#]: via: (https://itsfoss.com/q4os-linux-review)
+[#]: author: (John Paul https://itsfoss.com/author/john/)
+
+Q4OS Linux Revives Your Old Laptop with Windows’ Looks
+======
+
+There are quite a few Linux distros available that seek to make new users feel at home by [imitating the look and feel of Windows][1]. Today, we’ll look at a distro that attempts to do this with limited success We’ll be looking at [Q4OS][2].
+
+### Q4OS Linux focuses on performance on low hardware
+
+![Q4OS Linux desktop after first boot][3]Q4OS after first boot
+
+> Q4OS is a fast and powerful operating system based on the latest technologies while offering highly productive desktop environment. We focus on security, reliability, long-term stability and conservative integration of verified new features. System is distinguished by speed and very low hardware requirements, runs great on brand new machines as well as legacy computers. It is also very applicable for virtualization and cloud computing.
+>
+> Q4OS Website
+
+Q4OS currently has two different release branches: 2.# Scorpion and 3.# Centaurus. Scorpion is the Long-Term-Support (LTS) release and will be supported for five years. That support should last until 2022. The most recent version of Scorpion is 2.6, which is based on [Debian][4] 9 Stretch. Centaurus is considered the testing branch and is based on Debian Buster. Centaurus will become the LTS when Debian Buster becomes stable.
+
+Q4OS is one of the few Linux distros that still support both 32-bit and 64-bit. It has also been ported to ARM devices, specifically the Raspberry PI and the PineBook.
+
+The one major thing that separates Q4OS from the majority of Linux distros is their use of the Trinity Desktop Environment as the default desktop environment.
+
+#### The not-so-famous Trinity Desktop Environment
+
+![][5]Trinity Desktop Environment
+
+I’m sure that most people are unfamiliar with the [Trinity Desktop Environment (TDE)][6]. I didn’t know until I discovered Q4OS a couple of years ago. TDE is a fork of [KDE][7], specifically KDE 3.5. TDE was created by Timothy Pearson and the first release took place in April 2010.
+
+From what I read, it sounds like TDE was created for the same reason as [MATE][8]). Early versions of KDE 4 were prone to crash and users were unhappy with the direction the new release was taking, it was decided to fork the previous release. That is where the similarities end. MATE has taken on a life of its own and grew to become an equal among desktop environments. Development of TDE seems to have slowed. There were two years between the last two point releases.
+
+Quick side note: TDE uses its own fork of Qt 3, named TQt.
+
+#### System Requirements
+
+According to the [Q4OS download page][9], the system requirements differ based on the desktop environment you install.
+
+**TDE Version**
+
+ * At least 300MHz CPU
+ * 128 MB of RAM
+ * 3 GB Storage
+
+
+
+**KDE Version**
+
+ * At least 1GHz CPU
+ * 1 GB of RAM
+ * 5 GB Storage
+
+
+
+You can see from the system requirements that Q4OS is a [lightweight Linux distribution suitable for older computers][10].
+
+#### Included apps by default
+
+The following applications are included in the full install of Q4OS:
+
+ * Google Chrome
+ * Thunderbird
+ * LibreOffice
+ * VLC player
+ * Konqueror browser
+ * Dolphin file manager
+ * AisleRiot Solitaire
+ * Konsole
+ * Software Center
+
+
+ * KMines
+ * Ockular
+ * KBounce
+ * DigiKam
+ * Kooka
+ * KolourPaint
+ * KSnapshot
+ * Gwenview
+ * Ark
+
+
+ * KMail
+ * SMPlayer
+ * KRec
+ * Brasero
+ * Amarok player
+ * qpdfview
+ * KOrganizer
+ * KMag
+ * KNotes
+
+
+
+Of course, you can install additional applications through the software center. Since Q4OS is based on Debian, you can also [install applications from deb packages][11].
+
+#### Q4OS can be installed from within Windows
+
+I was able to successfully install TrueOS on my Dell Latitude D630 without any issues. This laptop has an Intel Centrino Duo Core processor running at 2.00 GHz, NVIDIA Quadro NVS 135M graphics chip, and 4 GB of RAM.
+
+You have a couple of options to choose from when installing Q4OS. You can either install Q4OS with a CD (Live or install) or you can install it from inside Window. The Windows installer asks for the drive location you want to install to, how much space you want Q4OS to take up and what login information do you want to use.
+
+![][12]Q4OS Windows installer
+
+Compared to most distros, the Live ISOs are small. The KDE version weighs less than 1GB and the TDE version is just a little north of 500 MB.
+
+### Experiencing Q4OS: Feels like older Windows versions
+
+Please note that while there is a KDE installation ISO, I used the TDE installation ISO. The KDE Live CD is a recent addition, so TDE is more in line with the project’s long term goals.
+
+When you boot into Q4OS for the first time, it feels like you jumped through a time portal and are staring at Windows 2000. The initial app offerings are very slim, you have access to a file manager, a web browser and not much else. There isn’t even a screenshot tool installed.
+
+![][13]Konqueror film manager
+
+When you try to use the TDE browser (Konqueror), a dialog box pops up recommending using the Desktop Profiler to [install Google Chrome][14] or some other recent web browser.
+
+The Desktop Profiler allows you to choose between a bare-bones, basic or full desktop and which desktop environment you wish to use as default. You can also use the Desktop Profiler to install other desktop environments, such as MATE, Xfce, LXQT, LXDE, Cinnamon and GNOME.
+
+![Q4OS Welcome Screen][15]![Q4OS Welcome Screen][15]Q4OS Welcome Screen
+
+Q4OS comes with its own application center. However, the offerings are limited to less than 20 options, including Synaptic, Google Chrome, Chromium, Firefox, LibreOffice, Update Manager, VLC, Multimedia codecs, Thunderbird, LookSwitcher, NVIDIA drivers, Network Manager, Skype, GParted, Wine, Blueman, X2Go server, X2Go Client, and Virtualbox additions.
+
+![][16]Q4OS Software Centre
+
+If you want to install anything else, you need to either use the command line or the [synaptic package manager][17]. Synaptic is a very good package manager and has been very serviceable for many years, but it isn’t quite newbie friendly.
+
+If you install an application from the Software Centre, you are treated to an installer that looks a lot like a Windows installer. I can only imagine that this is for people converting to Linux from Windows.
+
+![][18]Firefox installer
+
+As I mentioned earlier, when you boot into Q4OS’ desktop for the first time it looks like something out of the 1990s. Thankfully, you can install a utility named LookSwitcher to install a different theme. Initially, you are only shown half a dozen themes. There are other themes that are considered works-in-progress. You can also enhance the default theme by picking a more vibrant background and making the bottom panel transparent.
+
+![][19]Q4OS using the Debonair theme
+
+### Final Thoughts on Q4OS
+
+I may have mentioned a few times in this review that Q4OS looks like a dated version of Windows. It is obviously a very conscious decision because great care was taken to make even the control panel and file manager look Windows-eque. The problem is that it reminds me more of [ReactOS][20] than something modern. The Q4OS website says that it is made using the latest technology. The look of the system disagrees and will probably put some new users off.
+
+The fact that the install ISOs are smaller than most means that they are very quick to download. Unfortunately, it also means that if you want to be productive, you’ll have to spend quite a bit of time downloading software, either manually or automatically. You’ll also need an active internet connection. There is a reason why most ISOs are several gigabytes.
+
+I made sure to test the Windows installer. I installed a test copy of Windows 10 and ran the Q4OS installer. The process took a few minutes because the installer, which is less than 10 MB had to download an ISO. When the process was done, I rebooted. I selected Q4OS from the menu, but it looked like I was booting into Windows 10 (got the big blue circle). I thought that the install failed, but I eventually got to Q4OS.
+
+One of the few things that I liked about Q4OS was how easy it was to install the NVIDIA drivers. After I logged in for the first time, a little pop-up told me that there were NVIDIA drivers available and asked me if I wanted to install them.
+
+Using Q4OS was definitely an interesting experience, especially using TDE for the first time and the Windows look and feel. However, the lack of apps in the Software Centre and some of the design choices stop me from recommending this distro.
+
+**Do you like Q4OS?**
+
+Have you ever used Q4OS? What is your favorite Debian-based distro? Please let us know in the comments below.
+
+If you found this article interesting, please take a minute to share it on social media, Hacker News or [Reddit][21].
+
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/q4os-linux-review
+
+作者:[John Paul][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/john/
+[b]: https://github.com/lujun9972
+[1]: https://itsfoss.com/windows-like-linux-distributions/
+[2]: https://q4os.org/
+[3]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/02/q4os1.jpg?resize=800%2C500&ssl=1
+[4]: https://www.debian.org/
+[5]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/02/q4os4.jpg?resize=800%2C412&ssl=1
+[6]: https://www.trinitydesktop.org/
+[7]: https://en.wikipedia.org/wiki/KDE
+[8]: https://en.wikipedia.org/wiki/MATE_(software
+[9]: https://q4os.org/downloads1.html
+[10]: https://itsfoss.com/lightweight-linux-beginners/
+[11]: https://itsfoss.com/list-installed-packages-ubuntu/
+[12]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/02/q4os-windows-installer.jpg?resize=800%2C610&ssl=1
+[13]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/02/q4os2.jpg?resize=800%2C606&ssl=1
+[14]: https://itsfoss.com/install-chrome-ubuntu/
+[15]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/02/q4os10.png?ssl=1
+[16]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/02/q4os3.jpg?resize=800%2C507&ssl=1
+[17]: https://www.nongnu.org/synaptic/
+[18]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/02/q4os5.jpg?resize=800%2C616&ssl=1
+[19]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/02/q4os8Debonaire.jpg?resize=800%2C500&ssl=1
+[20]: https://www.reactos.org/
+[21]: http://reddit.com/r/linuxusersgroup
+[22]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/02/q4os1.jpg?fit=800%2C500&ssl=1
diff --git a/sources/tech/20190225 How To Identify That The Linux Server Is Integrated With Active Directory (AD).md b/sources/tech/20190225 How To Identify That The Linux Server Is Integrated With Active Directory (AD).md
new file mode 100644
index 0000000000..55d30a7910
--- /dev/null
+++ b/sources/tech/20190225 How To Identify That The Linux Server Is Integrated With Active Directory (AD).md
@@ -0,0 +1,177 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (How To Identify That The Linux Server Is Integrated With Active Directory (AD)?)
+[#]: via: (https://www.2daygeek.com/how-to-identify-that-the-linux-server-is-integrated-with-active-directory-ad/)
+[#]: author: (Vinoth Kumar https://www.2daygeek.com/author/vinoth/)
+
+How To Identify That The Linux Server Is Integrated With Active Directory (AD)?
+======
+
+Single Sign On (SSO) Authentication is an implemented in most of the organizations due to multiple applications access.
+
+It allows a user to logs in with a single ID and password to all the applications which is available in the organization.
+
+It uses a centralized authentication system for all the applications.
+
+A while ago we had written an article, **[how to integrate Linux system with AD][1]**.
+
+Today we are going to show you, how to check that the Linux system is integrated with AD using multiple ways.
+
+It can be done in four ways and we will explain one by one.
+
+ * **`ps Command:`** It report a snapshot of the current processes.
+ * **`id Command:`** It prints user identity.
+ * **`/etc/nsswitch.conf file:`** It is Name Service Switch configuration file.
+ * **`/etc/pam.d/system-auth file:`** It is Common configuration file for PAMified services.
+
+
+
+### How To Identify That The Linux Server Is Integrated With AD Using PS Command?
+
+ps command displays information about a selection of the active processes.
+
+To integrate the Linux server with AD, we need to use either `winbind` or `sssd` or `ldap` service.
+
+So, use the ps command to filter these services.
+
+If you found any of these services is running on system then we can decide that the system is currently integrate with AD using “winbind” or “sssd” or “ldap” service.
+
+You might get the output similar to below if the system is integrated with AD using `SSSD` service.
+
+```
+# ps -ef | grep -i "winbind\|sssd"
+
+root 29912 1 0 2017 ? 00:19:09 /usr/sbin/sssd -f -D
+root 29913 29912 0 2017 ? 04:36:59 /usr/libexec/sssd/sssd_be --domain 2daygeek.com --uid 0 --gid 0 --debug-to-files
+root 29914 29912 0 2017 ? 00:29:28 /usr/libexec/sssd/sssd_nss --uid 0 --gid 0 --debug-to-files
+root 29915 29912 0 2017 ? 00:09:19 /usr/libexec/sssd/sssd_pam --uid 0 --gid 0 --debug-to-files
+root 31584 26666 0 13:41 pts/3 00:00:00 grep sssd
+```
+
+You might get the output similer to below if the system is integrated with AD using `winbind` service.
+
+```
+# ps -ef | grep -i "winbind\|sssd"
+
+root 676 21055 0 2017 ? 00:00:22 winbindd
+root 958 21055 0 2017 ? 00:00:35 winbindd
+root 21055 1 0 2017 ? 00:59:07 winbindd
+root 21061 21055 0 2017 ? 11:48:49 winbindd
+root 21062 21055 0 2017 ? 00:01:28 winbindd
+root 21959 4570 0 13:50 pts/2 00:00:00 grep -i winbind\|sssd
+root 27780 21055 0 2017 ? 00:00:21 winbindd
+```
+
+### How To Identify That The Linux Server Is Integrated With AD Using id Command?
+
+It Prints information for given user name, or the current user. It displays the UID, GUID, User Name, Primary Group Name and Secondary Group Name, etc.,
+
+If the Linux system is integrated with AD then you might get the output like below. The GID clearly shows that the user is coming from AD “domain users”.
+
+```
+# id daygeek
+
+uid=1918901106(daygeek) gid=1918900513(domain users) groups=1918900513(domain users)
+```
+
+### How To Identify That The Linux Server Is Integrated With AD Using nsswitch.conf file?
+
+The Name Service Switch (NSS) configuration file, `/etc/nsswitch.conf`, is used by the GNU C Library and certain other applications to determine the sources from which to obtain name-service information in a range of categories, and in what order. Each category of information is identified by a database name.
+
+You might get the output similar to below if the system is integrated with AD using `SSSD` service.
+
+```
+# cat /etc/nsswitch.conf | grep -i "sss\|winbind\|ldap"
+
+passwd: files sss
+shadow: files sss
+group: files sss
+services: files sss
+netgroup: files sss
+automount: files sss
+```
+
+You might get the output similar to below if the system is integrated with AD using `winbind` service.
+
+```
+# cat /etc/nsswitch.conf | grep -i "sss\|winbind\|ldap"
+
+passwd: files [SUCCESS=return] winbind
+shadow: files [SUCCESS=return] winbind
+group: files [SUCCESS=return] winbind
+```
+
+You might get the output similer to below if the system is integrated with AD using `ldap` service.
+
+```
+# cat /etc/nsswitch.conf | grep -i "sss\|winbind\|ldap"
+
+passwd: files ldap
+shadow: files ldap
+group: files ldap
+```
+
+### How To Identify That The Linux Server Is Integrated With AD Using system-auth file?
+
+It is Common configuration file for PAMified services.
+
+PAM stands for Pluggable Authentication Module that provides dynamic authentication support for applications and services in Linux.
+
+system-auth configuration file is provide a common interface for all applications and service daemons calling into the PAM library.
+
+The system-auth configuration file is included from nearly all individual service configuration files with the help of the include directive.
+
+You might get the output similar to below if the system is integrated with AD using `SSSD` service.
+
+```
+# cat /etc/pam.d/system-auth | grep -i "pam_sss.so\|pam_winbind.so\|pam_ldap.so"
+or
+# cat /etc/pam.d/system-auth-ac | grep -i "pam_sss.so\|pam_winbind.so\|pam_ldap.so"
+
+auth sufficient pam_sss.so use_first_pass
+account [default=bad success=ok user_unknown=ignore] pam_sss.so
+password sufficient pam_sss.so use_authtok
+session optional pam_sss.so
+```
+
+You might get the output similar to below if the system is integrated with AD using `winbind` service.
+
+```
+# cat /etc/pam.d/system-auth | grep -i "pam_sss.so\|pam_winbind.so\|pam_ldap.so"
+or
+# cat /etc/pam.d/system-auth-ac | grep -i "pam_sss.so\|pam_winbind.so\|pam_ldap.so"
+
+auth sufficient pam_winbind.so cached_login use_first_pass
+account [default=bad success=ok user_unknown=ignore] pam_winbind.so cached_login
+password sufficient pam_winbind.so cached_login use_authtok
+```
+
+You might get the output similar to below if the system is integrated with AD using `ldap` service.
+
+```
+# cat /etc/pam.d/system-auth | grep -i "pam_sss.so\|pam_winbind.so\|pam_ldap.so"
+or
+# cat /etc/pam.d/system-auth-ac | grep -i "pam_sss.so\|pam_winbind.so\|pam_ldap.so"
+
+auth sufficient pam_ldap.so cached_login use_first_pass
+account [default=bad success=ok user_unknown=ignore] pam_ldap.so cached_login
+password sufficient pam_ldap.so cached_login use_authtok
+```
+
+--------------------------------------------------------------------------------
+
+via: https://www.2daygeek.com/how-to-identify-that-the-linux-server-is-integrated-with-active-directory-ad/
+
+作者:[Vinoth Kumar][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.2daygeek.com/author/vinoth/
+[b]: https://github.com/lujun9972
+[1]: https://www.2daygeek.com/join-integrate-rhel-centos-linux-system-to-windows-active-directory-ad-domain/
diff --git a/sources/tech/20190225 How to Install VirtualBox on Ubuntu -Beginner-s Tutorial.md b/sources/tech/20190225 How to Install VirtualBox on Ubuntu -Beginner-s Tutorial.md
new file mode 100644
index 0000000000..4ba0580ece
--- /dev/null
+++ b/sources/tech/20190225 How to Install VirtualBox on Ubuntu -Beginner-s Tutorial.md
@@ -0,0 +1,156 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (How to Install VirtualBox on Ubuntu [Beginner’s Tutorial])
+[#]: via: (https://itsfoss.com/install-virtualbox-ubuntu)
+[#]: author: (Abhishek Prakash https://itsfoss.com/author/abhishek/)
+
+How to Install VirtualBox on Ubuntu [Beginner’s Tutorial]
+======
+
+**This beginner’s tutorial explains various ways to install VirtualBox on Ubuntu and other Debian-based Linux distributions.**
+
+Oracle’s free and open source offering [VirtualBox][1] is an excellent virtualization tool, specially for desktop operating systems. I prefer using it over [VMWare Workstation in Linux][2], another virtualization tool.
+
+You can use virtualization software like VirtualBox for installing and using another operating system within a virtual machine.
+
+For example, you can [install Linux on VirtualBox inside Windows][3]. Similarly, you can also [install Windows inside Linux using VirtualBox][4].
+
+You can also use VirtualBox for installing another Linux distribution in your current Linux system. Actually, this is what I use it for. If I hear about a nice Linux distribution, instead of installing it on a real system, I test it on a virtual machine. It’s more convenient when you just want to try out a distribution before making a decision about installing it on your actual machine.
+
+![Linux installed inside Linux using VirtualBox][5]Ubuntu 18.10 installed inside Ubuntu 18.04
+
+In this beginner’s tutorial, I’ll show you various ways of installing Oracle VirtualBox on Ubuntu and other Debian-based distributions.
+
+### Installing VirtualBox on Ubuntu and Debian based Linux distributions
+
+The installation methods mentioned here should also work for other Debian and Ubuntu-based Linux distributions such as Linux Mint, elementary OS etc.
+
+#### Method 1: Install VirtualBox from Ubuntu Repository
+
+**Pros** : Easy installation
+
+**Cons** : Installs older version
+
+The easiest way to install VirtualBox on Ubuntu would be to search for it in the Software Center and install it from there.
+
+![VirtualBox in Ubuntu Software Center][6]VirtualBox is available in Ubuntu Software Center
+
+You can also install it from the command line using the command:
+
+```
+sudo apt install virtualbox
+```
+
+However, if you [check the package version before installing it][7], you’ll see that the VirtualBox provided by Ubuntu’s repository is quite old.
+
+For example, the current VirtualBox version at the time of writing this tutorial is 6.0 but the one in Software Center is 5.2. This means you won’t get the newer features introduced in the [latest version of VirtualBox][8].
+
+#### Method 2: Install VirtualBox using Deb file from Oracle’s website
+
+**Pros** : Easily install the latest version
+
+**Cons** : Can’t upgrade to newer version
+
+If you want to use the latest version of VirtualBox on Ubuntu, the easiest way would be to [use the deb file][9].
+
+Oracle provides read to use binary files for VirtualBox releases. If you look at its download page, you’ll see the option to download the deb installer files for Ubuntu and other distributions.
+
+![VirtualBox Linux Download][10]
+
+You just have to download this deb file and double click on it to install it. It’s as simple as that.
+
+However, the problem with this method is that you won’t get automatically updated to the newer VirtualBox releases. The only way is to remove the existing version, download the newer version and install it again. That’s not very convenient, is it?
+
+#### Method 3: Install VirualBox using Oracle’s repository
+
+**Pros** : Automatically updates with system updates
+
+**Cons** : Slightly complicated installation
+
+Now this is the command line method and it may seem complicated to you but it has advantages over the previous two methods. You’ll get the latest version of VirtualBox and it will be automatically updated to the future releases. That’s what you would want, I presume.
+
+To install VirtualBox using command line, you add the Oracle VirtualBox’s repository in your list of repositories. You add its GPG key so that your system trusts this repository. Now when you install VirtualBox, it will be installed from Oracle’s repository instead of Ubuntu’s repository. If there is a new version released, VirtualBox install will be updated along with the system updates. Let’s see how to do that.
+
+First, add the key for the repository. You can download and add the key using this single command.
+
+```
+wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -
+```
+
+```
+Important for Mint users
+
+The next step will work for Ubuntu only. If you are using Linux Mint or some other distribution based on Ubuntu, replace $(lsb_release -cs) in the command with the Ubuntu version your current version is based on. For example, Linux Mint 19 series users should use bionic and Mint 18 series users should use xenial. Something like this
+
+sudo add-apt-repository “deb [arch=amd64] **bionic** contrib“
+```
+
+Now add the Oracle VirtualBox repository in the list of repositories using this command:
+
+```
+sudo add-apt-repository "deb [arch=amd64] http://download.virtualbox.org/virtualbox/debian $(lsb_release -cs) contrib"
+```
+
+If you have read my article on [checking Ubuntu version][11], you probably know that ‘lsb_release -cs’ will print the codename of your Ubuntu system.
+
+**Note** : If you see [add-apt-repository command not found][12] error, you’ll have to install software-properties-common package.
+
+Now that you have the correct repository added, refresh the list of available packages through these repositories and install VirtualBox.
+
+```
+sudo apt update && sudo apt install virtualbox-6.0
+```
+
+**Tip** : A good idea would be to type sudo apt install **virtualbox–** and hit tab to see the various VirtualBox versions available for installation and then select one of them by typing it completely.
+
+![Install VirtualBox via terminal][13]
+
+### How to remove VirtualBox from Ubuntu
+
+Now that you have learned to install VirtualBox, I would also mention the steps to remove it.
+
+If you installed it from the Software Center, the easiest way to remove the application is from the Software Center itself. You just have to find it in the [list of installed applications][14] and click the Remove button.
+
+Another ways is to use the command line.
+
+```
+sudo apt remove virtualbox virtualbox-*
+```
+
+Note that this will not remove the virtual machines and the files associated with the operating systems you installed using VirtualBox. That’s not entirely a bad thing because you may want to keep them safe to use it later or in some other system.
+
+**In the end…**
+
+I hope you were able to pick one of the methods to install VirtualBox. I’ll also write about using it effectively in another article. For the moment, if you have and tips or suggestions or any questions, feel free to leave a comment below.
+
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/install-virtualbox-ubuntu
+
+作者:[Abhishek Prakash][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/abhishek/
+[b]: https://github.com/lujun9972
+[1]: https://www.virtualbox.org
+[2]: https://itsfoss.com/install-vmware-player-ubuntu-1310/
+[3]: https://itsfoss.com/install-linux-in-virtualbox/
+[4]: https://itsfoss.com/install-windows-10-virtualbox-linux/
+[5]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/02/linux-inside-linux-virtualbox.png?resize=800%2C450&ssl=1
+[6]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/02/virtualbox-ubuntu-software-center.jpg?ssl=1
+[7]: https://itsfoss.com/know-program-version-before-install-ubuntu/
+[8]: https://itsfoss.com/oracle-virtualbox-release/
+[9]: https://itsfoss.com/install-deb-files-ubuntu/
+[10]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/02/virtualbox-download.jpg?resize=800%2C433&ssl=1
+[11]: https://itsfoss.com/how-to-know-ubuntu-unity-version/
+[12]: https://itsfoss.com/add-apt-repository-command-not-found/
+[13]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/02/install-virtualbox-ubuntu-terminal.png?resize=800%2C165&ssl=1
+[14]: https://itsfoss.com/list-installed-packages-ubuntu/
diff --git a/sources/tech/20190225 Netboot a Fedora Live CD.md b/sources/tech/20190225 Netboot a Fedora Live CD.md
new file mode 100644
index 0000000000..2767719b8c
--- /dev/null
+++ b/sources/tech/20190225 Netboot a Fedora Live CD.md
@@ -0,0 +1,187 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Netboot a Fedora Live CD)
+[#]: via: (https://fedoramagazine.org/netboot-a-fedora-live-cd/)
+[#]: author: (Gregory Bartholomew https://fedoramagazine.org/author/glb/)
+
+Netboot a Fedora Live CD
+======
+
+
+
+[Live CDs][1] are useful for many tasks such as:
+
+ * installing the operating system to a hard drive
+ * repairing a boot loader or performing other rescue-mode operations
+ * providing a consistent and minimal environment for web browsing
+ * …and [much more][2].
+
+
+
+As an alternative to using DVDs and USB drives to store your Live CD images, you can upload them to an [iSCSI][3] server where they will be less likely to get lost or damaged. This guide shows you how to load your Live CD images onto an iSCSI server and access them with the [iPXE][4] boot loader.
+
+### Download a Live CD Image
+
+```
+$ MY_RLSE=27
+$ MY_LIVE=$(wget -q -O - https://dl.fedoraproject.org/pub/archive/fedora/linux/releases/$MY_RLSE/Workstation/x86_64/iso | perl -ne '/(Fedora[^ ]*?-Live-[^ ]*?\.iso)(?{print $^N})/;')
+$ MY_NAME=fc$MY_RLSE
+$ wget -O $MY_NAME.iso https://dl.fedoraproject.org/pub/archive/fedora/linux/releases/$MY_RLSE/Workstation/x86_64/iso/$MY_LIVE
+```
+
+The above commands download the Fedora-Workstation-Live-x86_64-27-1.6.iso Fedora Live image and save it as fc27.iso. Change the value of MY_RLSE to download other archived versions. Or you can browse to to download the latest Fedora live image. Versions prior to 21 used different naming conventions, and must be [downloaded manually here][5]. If you download a Live CD image manually, set the MY_NAME variable to the basename of the file without the extension. That way the commands in the following sections will reference the correct file.
+
+### Convert the Live CD Image
+
+Use the livecd-iso-to-disk tool to convert the ISO file to a disk image and add the netroot parameter to the embedded kernel command line:
+
+```
+$ sudo dnf install -y livecd-tools
+$ MY_SIZE=$(du -ms $MY_NAME.iso | cut -f 1)
+$ dd if=/dev/zero of=$MY_NAME.img bs=1MiB count=0 seek=$(($MY_SIZE+512))
+$ MY_SRVR=server-01.example.edu
+$ MY_RVRS=$(echo $MY_SRVR | tr '.' "\n" | tac | tr "\n" '.' | cut -b -${#MY_SRVR})
+$ MY_LOOP=$(sudo losetup --show --nooverlap --find $MY_NAME.img)
+$ sudo livecd-iso-to-disk --format --extra-kernel-args netroot=iscsi:$MY_SRVR:::1:iqn.$MY_RVRS:$MY_NAME $MY_NAME.iso $MY_LOOP
+$ sudo losetup -d $MY_LOOP
+```
+
+### Upload the Live Image to your Server
+
+Create a directory on your iSCSI server to store your live images and then upload your modified image to it.
+
+**For releases 21 and greater:**
+
+```
+$ MY_FLDR=/images
+$ scp $MY_NAME.img $MY_SRVR:$MY_FLDR/
+```
+
+**For releases prior to 21:**
+
+```
+$ MY_FLDR=/images
+$ MY_LOOP=$(sudo losetup --show --nooverlap --find --partscan $MY_NAME.img)
+$ sudo tune2fs -O ^has_journal ${MY_LOOP}p1
+$ sudo e2fsck ${MY_LOOP}p1
+$ sudo dd status=none if=${MY_LOOP}p1 | ssh $MY_SRVR "dd of=$MY_FLDR/$MY_NAME.img"
+$ sudo losetup -d $MY_LOOP
+```
+
+### Define the iSCSI Target
+
+Run the following commands on your iSCSI server:
+
+```
+$ sudo -i
+# MY_NAME=fc27
+# MY_FLDR=/images
+# MY_SRVR=`hostname`
+# MY_RVRS=$(echo $MY_SRVR | tr '.' "\n" | tac | tr "\n" '.' | cut -b -${#MY_SRVR})
+# cat << END > /etc/tgt/conf.d/$MY_NAME.conf
+
+ backing-store $MY_FLDR/$MY_NAME.img
+ readonly 1
+ allow-in-use yes
+
+END
+# tgt-admin --update ALL
+```
+
+### Create a Bootable USB Drive
+
+The [iPXE][4] boot loader has a [sanboot][6] command you can use to connect to and start the live images hosted on your iSCSI server. It can be compiled in many different [formats][7]. The format that works best depends on the type of hardware you’re running. As an example, the following instructions show how to [chain load][8] iPXE from [syslinux][9] on a USB drive.
+
+First, download iPXE and build it in its lkrn format. This should be done as a normal user on a workstation:
+
+```
+$ sudo dnf install -y git
+$ git clone http://git.ipxe.org/ipxe.git $HOME/ipxe
+$ sudo dnf groupinstall -y "C Development Tools and Libraries"
+$ cd $HOME/ipxe/src
+$ make clean
+$ make bin/ipxe.lkrn
+$ cp bin/ipxe.lkrn /tmp
+```
+
+Next, prepare a USB drive with a MSDOS partition table and a FAT32 file system. The below commands assume that you have already connected the USB drive to be formatted. **Be careful that you do not format the wrong drive!**
+
+```
+$ sudo -i
+# dnf install -y parted util-linux dosfstools
+# echo; find /dev/disk/by-id ! -regex '.*-part.*' -name 'usb-*' -exec readlink -f {} \; | xargs -i bash -c "parted -s {} unit MiB print | perl -0 -ne '/^Model: ([^(]*).*\n.*?([0-9]*MiB)/i && print \"Found: {} = \$2 \$1\n\"'"; echo; read -e -i "$(find /dev/disk/by-id ! -regex '.*-part.*' -name 'usb-*' -exec readlink -f {} \; -quit)" -p "Drive to format: " MY_USB
+# umount $MY_USB?
+# wipefs -a $MY_USB
+# parted -s $MY_USB mklabel msdos mkpart primary fat32 1MiB 100% set 1 boot on
+# mkfs -t vfat -F 32 ${MY_USB}1
+```
+
+Finally, install syslinux on the USB drive and configure it to chain load iPXE:
+
+```
+# dnf install -y syslinux-nonlinux
+# syslinux -i ${MY_USB}1
+# dd if=/usr/share/syslinux/mbr.bin of=${MY_USB}
+# MY_MNT=$(mktemp -d)
+# mount ${MY_USB}1 $MY_MNT
+# MY_NAME=fc27
+# MY_SRVR=server-01.example.edu
+# MY_RVRS=$(echo $MY_SRVR | tr '.' "\n" | tac | tr "\n" '.' | cut -b -${#MY_SRVR})
+# cat << END > $MY_MNT/syslinux.cfg
+ui menu.c32
+default $MY_NAME
+timeout 100
+menu title SYSLINUX
+label $MY_NAME
+ menu label ${MY_NAME^^}
+ kernel ipxe.lkrn
+ append dhcp && sanboot iscsi:$MY_SRVR:::1:iqn.$MY_RVRS:$MY_NAME
+END
+# cp /usr/share/syslinux/menu.c32 $MY_MNT
+# cp /usr/share/syslinux/libutil.c32 $MY_MNT
+# cp /tmp/ipxe.lkrn $MY_MNT
+# umount ${MY_USB}1
+```
+
+You should be able to use this same USB drive to netboot additional iSCSI targets simply by editing the syslinux.cfg file and adding additional menu entries.
+
+This is just one method of loading iPXE. You could install syslinux directly on your workstation. Another option is to compile iPXE as an EFI executable and place it directly in your [ESP][10]. Yet another is to compile iPXE as a PXE loader and place it on your TFTP server to be referenced by DHCP. The best option depends on your environment.
+
+### Final Notes
+
+ * You may want to add the –filename \EFI\BOOT\grubx64.efi parameter to the sanboot command if you compile iPXE in its EFI format.
+ * It is possible to create custom live images. Refer to [Creating and using live CD][11] for more information.
+ * It is possible to add the –overlay-size-mb and –home-size-mb parameters to the livecd-iso-to-disk command to create live images with persistent storage. However, if you have multiple concurrent users, you’ll need to set up your iSCSI server to manage separate per-user writeable overlays. This is similar to what was shown in the “[How to Build a Netboot Server, Part 4][12]” article.
+ * The live images support a persistenthome option on their kernel command line (e.g. persistenthome=LABEL=HOME). Used together with CHAP-authenticated iSCSI targets, the persistenthome option provides an interesting alternative to NFS for centralized home directories.
+
+
+
+
+--------------------------------------------------------------------------------
+
+via: https://fedoramagazine.org/netboot-a-fedora-live-cd/
+
+作者:[Gregory Bartholomew][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://fedoramagazine.org/author/glb/
+[b]: https://github.com/lujun9972
+[1]: https://en.wikipedia.org/wiki/Live_CD
+[2]: https://en.wikipedia.org/wiki/Live_CD#Uses
+[3]: https://en.wikipedia.org/wiki/ISCSI
+[4]: https://ipxe.org/
+[5]: https://dl.fedoraproject.org/pub/archive/fedora/linux/releases/https://dl.fedoraproject.org/pub/archive/fedora/linux/releases/
+[6]: http://ipxe.org/cmd/sanboot/
+[7]: https://ipxe.org/appnote/buildtargets#boot_type
+[8]: https://en.wikipedia.org/wiki/Chain_loading
+[9]: https://www.syslinux.org/wiki/index.php?title=SYSLINUX
+[10]: https://en.wikipedia.org/wiki/EFI_system_partition
+[11]: https://docs.fedoraproject.org/en-US/quick-docs/creating-and-using-a-live-installation-image/#proc_creating-and-using-live-cd
+[12]: https://fedoramagazine.org/how-to-build-a-netboot-server-part-4/
diff --git a/sources/tech/20190227 How to Display Weather Information in Ubuntu 18.04.md b/sources/tech/20190227 How to Display Weather Information in Ubuntu 18.04.md
new file mode 100644
index 0000000000..da0c0df203
--- /dev/null
+++ b/sources/tech/20190227 How to Display Weather Information in Ubuntu 18.04.md
@@ -0,0 +1,290 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (How to Display Weather Information in Ubuntu 18.04)
+[#]: via: (https://itsfoss.com/display-weather-ubuntu)
+[#]: author: (Sergiu https://itsfoss.com/author/sergiu/)
+
+How to Display Weather Information in Ubuntu 18.04
+======
+
+You’ve got a fresh Ubuntu install and you’re [customizing Ubuntu][1] to your liking. You want the best experience and the best apps for your needs.
+
+The only thing missing is a weather app. Luckily for you, we got you covered. Just make sure you have the Universe repository enabled.
+
+![Tools to Display Weather Information in Ubuntu Linux][2]
+
+### 8 Ways to Display Weather Information in Ubuntu 18.04
+
+Back in the Unity days, there were a few popular options like My Weather Indicator to display weather on your system. Those options are either discontinued or not available in Ubuntu 18.04 and higher versions anymore.
+
+Fortunately, there are many other options to choose from. Some are minimalist and plain simple to use, some offer detailed information (or even present you with news headlines) and some are made for terminal gurus. Whatever your needs may be, the right app is waiting for you.
+
+**Note:** The presented apps are in no particular order of ranking.
+
+**Top Panel Apps**
+
+These applications usually sit on the top panel of your screen. Good for quick look at the temperature.
+
+#### 1\. OpenWeather Shell Extension
+
+![Open Weather Gnome Shell Extesnsion][3]
+
+**Key features:**
+
+ * Simple to install and customize
+ * Uses OpenWeatherMap (by default)
+ * Many Units and Layout options
+ * Can save multiple locations (that can easily be changed)
+
+
+
+This is a great extension presenting you information in a simple manner. There are multiple ways to install this. It is the weather app that I find myself using the most, because it’s just a simple, no-hassle integrated weather display for the top panel.
+
+**How to Install:**
+
+I recommend reading this [detailed tutorial about using GNOME extensions][4]. The easiest way to install this extension is to open up a terminal and run:
+
+```
+sudo apt install gnome-shell-extension-weather
+```
+
+Then all you have to restart the gnome shell by executing:
+
+```
+Alt+F2
+```
+
+Enter **r** and press **Enter**.
+
+Now open up **Tweaks** (gnome tweak tool) and enable **Openweather** in the **Extensions** tab.
+
+#### 2\. gnome-weather
+
+![Gnome Weather App UI][5]
+![Gnome Weather App Top Panel][6]
+
+**Key features:**
+
+ * Pleasant Design
+ * Integrated into Calendar (Top Panel)
+ * Simple Install
+ * Flatpak install available
+
+
+
+This app is great for new users. The installation is only one command and the app is easy to use. Although it doesn’t have as many features as other apps, it is still great if you don’t want to bother with multiple settings and a complex install procedure.
+
+**How to Install:**
+
+All you have to do is run:
+
+```
+sudo apt install gnome-weather
+```
+
+Now search for **Weather** and the app should pop up. After logging out (and logging back in), the Calendar extension will be displayed.
+
+If you prefer, you can get a [flatpak][7] version.
+
+#### 3\. Meteo
+
+![Meteo Weather App UI][8]
+![Meteo Weather System Tray][9]
+
+**Key features:**
+
+ * Great UI
+ * Integrated into System Tray (Top Panel)
+ * Simple Install
+ * Great features (Maps)
+
+
+
+Meteo is a snap app on the heavier side. Most of that weight comes from the great Maps features, with maps presenting temperatures, clouds, precipitations, pressure and wind speed. It’s a distinct feature that I haven’t encountered in any other weather app.
+
+**Note** : After changing location, you might have to quit and restart the app for the changes to be applied in the system tray.
+
+**How to Install:**
+
+Open up the **Ubuntu Software Center** and search for **Meteo**. Install and launch.
+
+**Desktop Apps**
+
+These are basically desktop widgets. They look good and provide more information at a glance.
+
+#### 4\. Temps
+
+![Temps Weather App UI][10]
+
+**Key features:**
+
+ * Beautiful Design
+ * Useful Hotkeys
+ * Hourly Temperature Graph
+
+
+
+Temps is an electron app with a beautiful UI (though not exactly “light”). The most unique features are the temperature graphs. The hotkeys might feel unintuitive at first, but they prove to be useful in the long run. The app will minimize when you click somewhere else. Just press Ctrl+Shift+W to bring it back.
+
+This app is **Open-Source** , and the developer can’t afford the cost of a faster API key, so you might want to create your own API at [OpenWeatherMap][11].
+
+**How to Install:**
+
+Go to the website and download the version you need (probably 64-bit). Extract the archive. Open the extracted directory and double-click on **Temps**. Press Ctrl+Shift+W if the window minimizes.
+
+#### 5\. Cumulus
+
+![Cumulus Weather App UI][12]
+
+**Key features:**
+
+ * Color Selector for background and text
+
+ * Re-sizable window
+
+ * Tray Icon (temperature only)
+
+ * Allows multiple instances with different locations etc.
+
+
+
+
+Cumulus is a greatly customizable weather app, with a backend supporting Yahoo! Weather and OpenWeatherMap. The UI is great and the installer is simple to use. This app has amazing features. It’s one of the few weather apps that allow for multiple instances. You should definitely try it you are looking for an experience tailored to your preferences.
+
+**How to Install:**
+
+Go to the website and download the (online) installer. Open up a terminal and **cd** (change directory) to the directory where you downloaded the file.
+
+Then run
+
+```
+chmod +x Cumulus-online-installer-x64
+./Cumulus-online-installer-x64
+```
+
+Search for **Cumulus** and enjoy the app!
+
+**Terminal Apps**
+
+You are a terminal dweller? You can check the weather right in your terminal.
+
+#### 7\. WeGo
+
+![WeGo Weather App Terminal][13]
+
+**Key features:**
+
+ * Supports different APIs
+ * Pretty detailed
+ * Customizable config
+ * Multi-language support
+ * 1 to 7 day forecast
+
+
+
+WeGo is a Go app for displaying weather info in the terminal. It’s install can be a little tricky, but it’s easy to set up. You’ll need to register an API Key [here][14] (if using **forecast.io** , which is default). Once you set it up, it’s fairly practical for someone who mostly works in the terminal.
+
+**How to Install:**
+
+I recommend you to check out the GitHub page for complete information on installation, setup and features.
+
+#### 8\. Wttr.in
+
+![Wttr.in Weather App Terminal][15]
+
+**Key features:**
+
+ * Simple install
+ * Easy to use
+ * Lightweight
+ * 3 day forecast
+ * Moon phase
+
+
+
+If you really live in the terminal, this is the weather app for you. This is as lightweight as it gets. You can specify location (by default the app tries to detect your current location) and a few other parameters (eg. units).
+
+**How to Install:**
+
+Open up a terminal and install Curl:
+
+```
+sudo apt install curl
+```
+
+Then:
+
+```
+curl wttr.in
+```
+
+That’s it. You can specify location and parameters like so:
+
+```
+curl wttr.in/london?m
+```
+
+To check out other options type:
+
+```
+curl wttr.in/:help
+```
+
+If you found some settings you enjoy and you find yourself using them frequently, you might want to add an **alias**. To do so, open **~/.bashrc** with your favorite editor (that’s **vim** , terminal wizard). Go to the end and paste in
+
+```
+alias wttr='curl wttr.in/CITY_NAME?YOUR_PARAMS'
+```
+
+For example:
+
+```
+alias wttr='curl wttr.in/london?m'
+```
+
+Save and close **~/.bashrc** and run the command below to source the new file.
+
+```
+source ~/.bashrc
+```
+
+Now, typing **wttr** in the terminal and pressing Enter should execute your custom command.
+
+**Wrapping Up**
+
+These are a handful of the weather apps available for Ubuntu. We hope our list helped you discover an app fitting your needs, be that something with pleasant aesthetics or just a quick tool.
+
+What is your favorite weather app? Tell us about what you enjoy and why in the comments section.
+
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/display-weather-ubuntu
+
+作者:[Sergiu][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/sergiu/
+[b]: https://github.com/lujun9972
+[1]: https://itsfoss.com/gnome-tricks-ubuntu/
+[2]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/02/display-weather-ubuntu.png?resize=800%2C450&ssl=1
+[3]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/02/open_weather_gnome_shell-1-1.jpg?fit=800%2C383&ssl=1
+[4]: https://itsfoss.com/gnome-shell-extensions/
+[5]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/02/gnome_weather_ui.jpg?fit=800%2C599&ssl=1
+[6]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/02/gnome_weather_top_panel.png?fit=800%2C587&ssl=1
+[7]: https://flatpak.org/
+[8]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/02/meteo_ui.jpg?fit=800%2C547&ssl=1
+[9]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/02/meteo_system_tray.png?fit=800%2C653&ssl=1
+[10]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/02/temps_ui.png?fit=800%2C623&ssl=1
+[11]: https://openweathermap.org/
+[12]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/02/cumulus_ui.png?fit=800%2C651&ssl=1
+[13]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/02/wego_terminal.jpg?fit=800%2C531&ssl=1
+[14]: https://developer.forecast.io/register
+[15]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/02/wttr_in_terminal.jpg?fit=800%2C526&ssl=1
diff --git a/sources/tech/20190228 3 open source behavior-driven development tools.md b/sources/tech/20190228 3 open source behavior-driven development tools.md
new file mode 100644
index 0000000000..9c004a14c2
--- /dev/null
+++ b/sources/tech/20190228 3 open source behavior-driven development tools.md
@@ -0,0 +1,83 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (3 open source behavior-driven development tools)
+[#]: via: (https://opensource.com/article/19/2/behavior-driven-development-tools)
+[#]: author: (Christine Ketterlin Fisher https://opensource.com/users/cketterlin)
+
+3 open source behavior-driven development tools
+======
+Having the right motivation is as important as choosing the right tool when implementing BDD.
+
+
+[Behavior-driven development][1] (BDD) seems very easy. Tests are written in an easily readable format that allows for feedback from product owners, business sponsors, and developers. Those tests are living documentation for your team, so you don't need requirements. The tools are easy to use and allow you to automate your test suite. Reports are generated with each test run to document every step and show you where tests are failing.
+
+Quick recap: Easily readable! Living documentation! Automation! Reports! What could go wrong, and why isn't everybody doing this?
+
+### Getting started with BDD
+
+So, you're ready to jump in and can't wait to pick the right open source tool for your team. You want it to be easy to use, automate all your tests, and provide easily understandable reports for each test run. Great, let's get started!
+
+Except, not so fast … First, what is your motivation for trying to implement BDD on your team? If the answer is simply to automate tests, go ahead and choose any of the tools listed below because chances are you're going to see minimal success in the long run.
+
+### My first effort
+
+I manage a team of business analysts (BA) and quality assurance (QA) engineers, but my background is on the business analysis side. About a year ago, I attended a talk where a developer talked about the benefits of BDD. He said that he and his team had given it a try during their last project. That should have been the first red flag, but I didn't realize it at the time. You cannot simply choose to "give BDD a try." It takes planning, preparation, and forethought into what you want your team to accomplish.
+
+However, you can try various parts of BDD without a large investment, and I eventually realized he and his team had written feature files and automated those tests using Cucumber. I also learned it was an experiment done solely by the team's developers, not the BA or QA staff, which defeats the purpose of understanding the end user's behavior.
+
+During the talk we were encouraged to try BDD, so my test analyst and I went to our boss and said we were willing to give it a shot. And then, we didn't know what to do. We had no guidance, no plan in place, and a leadership team who just wanted to automate testing. I don't think I need to tell you how this story ended. Actually, there wasn't even an end, just a slow fizzle after a few initial attempts at writing behavioral scenarios.
+
+### A fresh start
+
+Fast-forward a year, and I'm at a different company with a team of my own and BDD on the brain. I knew there was value there, but I also knew it went deeper than what I had initially been sold. I spent a lot of time thinking about how BDD could make a positive impact, not only on my team, but on our entire development team. Then I read [Discovery: Explore Behaviour Using Examples][2] by Gaspar Nagy and Seb Rose, and one of the first things I learned was that automation of tests is a benefit of BDD, but it should not be the main goal. No wonder we failed!
+
+This book changed how I viewed BDD and helped me start to fill in the pieces I had been missing. We are now on the (hopefully correct!) path to implementing BDD on our team. It involves active involvement from our product owners, business analysts, and manual and automated testers and buy-in and support from our executive leadership. We have a plan in place for our approach and our measures of success.
+
+We are still writing requirements (don't ever let anyone tell you that these scenarios can completely replace requirements!), but we are doing so with a more critical eye and evaluating where requirements and test scenarios overlap and how we can streamline the two.
+
+I have told the team we cannot even try to automate these tests for at least two quarters, at which point we'll evaluate and determine whether we're ready to move forward or not. Our current priorities are defining our team's standard language, practicing writing given/when/then scenarios, learning the Gherkin syntax, determining where to store these tests, and investigating how to integrate these tests into our pipeline.
+
+### 3 BDD tools to choose
+
+At its core, BDD is a way to help the entire team understand the end user's actions and behaviors, which will lead to more clear requirements, tests, and ultimately higher-quality applications. Before you pick your tool, do your pre-work. Think about your motivation, and understand that while the different parts and pieces of BDD are fairly simple, integrating them into your team is more challenging and needs careful thought and planning. Also, think about where your people fit in.
+
+Every organization has different roles, and BDD should not belong solely to developers nor test automation engineers. If you don't involve the business side, you're never going to gain the full benefit of this methodology. Once you have a strategy defined and are ready to move forward with automating your BDD scenarios, there are several open source tools for you to choose from.
+
+#### Cucumber
+
+[Cucumber][3] is probably the most recognized tool available that supports BDD. It is widely seen as a straightforward tool to learn and is easy to get started with. Cucumber relies on test scenarios that are written in plain text and follow the given/when/then format. Each scenario is an individual test. Scenarios are grouped into features, which is comparable to a test suite. Scenarios must be written in the Gherkin syntax for Cucumber to understand and execute the scenario's steps. The human-readable steps in the scenarios are tied to the step definitions in your code through the Cucumber framework. To successfully write and automate the scenarios, you need the right mix of business knowledge and technical ability. Identify the skill sets on your team to determine who will write and maintain the scenarios and who will automate them; most likely these should be managed by different roles. Because these tests are executed from the step definitions, reporting is very robust and can show you at which exact step your test failed. Cucumber works well with a variety of browser and API automation tools.
+
+#### JBehave
+
+[JBehave][4] is very similar to Cucumber. Scenarios are still written in the given/when/then format and are easily understandable by the entire team. JBehave supports Gherkin but also has its own JBehave syntax that can be used. Gherkin is more universal, but either option will work as long as you are consistent in your choice. JBehave has more configuration options than Cucumber, and its reports, although very detailed, need more configuration to get feedback from each step. JBehave is a powerful tool, but because it can be more customized, it is not quite as easy to get started with. Teams need to ask themselves exactly what features they need and whether or not learning the tool's various configurations is worth the time investment.
+
+#### Gauge
+
+Where Cucumber and JBehave are specifically designed to work with BDD, [Gauge][5] is not. If automation is your main goal (and not the entire BDD process), it is worth a look. Gauge tests are written in Markdown, which makes them easily readable. However, without a more standard format, such as the given/when/then BDD scenarios, tests can vary widely and, depending on the author, some tests will be much more digestible for business owners than others. Gauge works with multiple languages, so the automation team can leverage what they already use. Gauge also offers reporting with screenshots to show where the tests failed.
+
+### What are your needs?
+
+Implementing BDD allows the team to test the users' behaviors. This can be done without automating any tests at all, but when done correctly, can result in a powerful, reusable test suite. As a team, you will need to identify exactly what your automation needs are and whether or not you are truly going to use BDD or if you would rather focus on automating tests that are written in plain text. Either way, open source tools are available for you to use and to help support your testing evolution.
+
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/2/behavior-driven-development-tools
+
+作者:[Christine Ketterlin Fisher][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/cketterlin
+[b]: https://github.com/lujun9972
+[1]: https://en.wikipedia.org/wiki/Behavior-driven_development
+[2]: https://www.amazon.com/gp/product/1983591254/ref=dbs_a_def_rwt_bibl_vppi_i0
+[3]: https://cucumber.io/
+[4]: https://jbehave.org/
+[5]: https://www.gauge.org/
diff --git a/sources/tech/20190228 MiyoLinux- A Lightweight Distro with an Old-School Approach.md b/sources/tech/20190228 MiyoLinux- A Lightweight Distro with an Old-School Approach.md
new file mode 100644
index 0000000000..3217e304cd
--- /dev/null
+++ b/sources/tech/20190228 MiyoLinux- A Lightweight Distro with an Old-School Approach.md
@@ -0,0 +1,161 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (MiyoLinux: A Lightweight Distro with an Old-School Approach)
+[#]: via: (https://www.linux.com/blog/learn/2019/2/miyolinux-lightweight-distro-old-school-approach)
+[#]: author: (Jack Wallen https://www.linux.com/users/jlwallen)
+
+MiyoLinux: A Lightweight Distro with an Old-School Approach
+======
+
+
+I must confess, although I often wax poetic about the old ways of the Linux desktop, I much prefer my distributions to help make my daily workflow as efficient as possible. Because of that, my taste in Linux desktop distributions veers very far toward the modern side of things. I want a distribution that integrates apps seamlessly, gives me notifications, looks great, and makes it easy to work with certain services that I use.
+
+However, every so often it’s nice to dip my toes back into those old-school waters and remind myself why I fell in love with Linux in the first place. That’s precisely what [MiyoLinux][1] did for me recently. This lightweight distribution is based on [Devuan][2] and makes use of the [i3 Tiling Window Manager][3].
+
+Why is it important that MiyoLinux is based on Devuan? Because that means it doesn’t use systemd. There are many within the Linux community who’d be happy to make the switch to an old-school Linux distribution that opts out of systemd. If that’s you, MiyoLinux might just charm you into submission.
+
+But don’t think MiyoLinux is going to be as easy to get up and running as, say, Ubuntu Linux, Elementary OS, or Linux Mint. Although it’s not nearly as challenging as Arch or Gentoo, MiyoLinux does approach installation and basic usage a bit differently. Let’s take a look at how this particular distro handles things.
+
+### Installation
+
+The installation GUI of MiyoLinux is pretty basic. The first thing you’ll notice is that you are presented with a good amount of notes, regarding the usage of the MiyoLinux desktop. If you happen to be testing MiyoLinux via VirtualBox, you’ll wind up having to deal with the frustration of not being able to resize the window (Figure 1), as the Guest Additions cannot be installed. This also means mouse integration cannot be enabled during the installation, so you’ll have to tab through the windows and use your keyboard cursor keys and Enter key to make selections.
+
+![MiyoLinux][5]
+
+Figure 1: The first step in the MiyoLinux installation.
+
+[Used with permission][6]
+
+Once you click the Install MiyoLinux button, you’ll be prompted to continue using either ‘su” or sudo. Click the use sudo button to continue with the installation.
+
+The next screen of importance is the Installation Options window (Figure 2), where you can select various options for MiyoLinux (such as encryption, file system labels, disable automatic login, etc.).
+
+![Configuration][8]
+
+Figure 2: Configuration Installation options for MiyoLinux.
+
+[Used with permission][6]
+
+The MiyoLinux installation does not include an automatic partition tool. Instead, you’ll be prompted to run either cfdisk or GParted (Figure 3). If you don’t know your way around cfdisk, select GParted and make use of the GUI tool.
+
+![partitioning ][10]
+
+Figure 3: Select your partitioning tool for MiyoLinux.
+
+[Used with permission][6]
+
+With your disk partitioned (Figure 4), you’ll be required to take care of the following steps:
+
+ * Configure the GRUB bootloader.
+
+ * Select the filesystem for the bootloader.
+
+ * Configure time zone and locales.
+
+ * Configure keyboard, keyboard language, and keyboard layout.
+
+ * Okay the installation.
+
+
+
+
+Once, you’ve okay’d the installation, all packages will be installed and you will then be prompted to install the bootloader. Following that, you’ll be prompted to configure the following:
+
+ * Hostname.
+
+ * User (Figure 5).
+
+ * Root password.
+
+
+
+
+With the above completed, reboot and log into your new MiyoLinux installation.
+
+![hostname][12]
+
+Figure 5: Configuring hostname and username.
+
+[Creative Commons Zero][13]
+
+### Usage
+
+Once you’ve logged into the MiyoLinux desktop, you’ll find things get a bit less-than-user-friendly. This is by design. You won’t find any sort of mouse menu available anywhere on the desktop. Instead you use keyboard shortcuts to open the different types of menus. The Alt+m key combination will open the PMenu, which is what one would consider a fairly standard desktop mouse menu (Figure 6).
+
+The Alt+d key combination will open the dmenu, a search tool at the top of the desktop, where you can scroll through (using the cursor keys) or search for an app you want to launch (Figure 7).
+
+![dmenu][15]
+
+Figure 7: The dmenu in action.
+
+[Used with permission][6]
+
+### Installing Apps
+
+If you open the PMenu, click System > Synaptic Package Manager. From within that tool you can search for any app you want to install. However, if you find Synaptic doesn’t want to start from the PMenu, open the dmenu, search for terminal, and (once the terminal opens), issue the command sudo synaptic. That will get the package manager open, where you can start installing any applications you want (Figure 8).
+
+![Synaptic][17]
+
+Figure 8: The Synaptic Package Manager on MiyoLinux.
+
+[Used with permission][6]
+
+Of course, you can always install applications from the command line. MiyoLinux depends upon the Apt package manager, so installing applications is as easy as:
+
+```
+sudo apt-get install libreoffice -y
+```
+
+Once installed, you can start the new package from either the PMenu or dmenu tools.
+
+### MiyoLinux Accessories
+
+If you find you need a bit more from the MiyoLinux desktop, type the keyboard combination Alt+Ctrl+a to open the MiyoLinux Accessories tool (Figure 9). From this tool you can configure a number of options for the desktop.
+
+![Accessories][19]
+
+Figure 9: Configure i3, Conky, Compton, your touchpad, and more with the Accessories tool.
+
+[Used with permission][6]
+
+All other necessary keyboard shortcuts are listed on the default desktop wallpaper. Make sure to put those shortcuts to memory, as you won’t get very far in the i3 desktop without them.
+
+### A Nice Nod to Old-School Linux
+
+If you’re itching to throw it back to a time when Linux offered you a bit of challenge to your daily grind, MiyoLinux might be just the operating system for you. It’s a lightweight operating system that makes good use of a minimal set of tools. Anyone who likes their distributions to be less modern and more streamlined will love this take on the Linux desktop. However, if you prefer your desktop with the standard bells and whistles, found on modern distributions, you’ll probably find MiyoLinux nothing more than a fun distraction from the standard fare.
+
+--------------------------------------------------------------------------------
+
+via: https://www.linux.com/blog/learn/2019/2/miyolinux-lightweight-distro-old-school-approach
+
+作者:[Jack Wallen][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.linux.com/users/jlwallen
+[b]: https://github.com/lujun9972
+[1]: https://sourceforge.net/p/miyolinux/wiki/Home/
+[2]: https://devuan.org/
+[3]: https://i3wm.org/
+[4]: /files/images/miyo1jpg
+[5]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/miyo_1.jpg?itok=5PxRDYRE (MiyoLinux)
+[6]: /licenses/category/used-permission
+[7]: /files/images/miyo2jpg
+[8]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/miyo_2.jpg?itok=svlVr7VI (Configuration)
+[9]: /files/images/miyo3jpg
+[10]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/miyo_3.jpg?itok=lpNzZBPz (partitioning)
+[11]: /files/images/miyo5jpg
+[12]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/miyo_5.jpg?itok=lijIsgZ2 (hostname)
+[13]: /licenses/category/creative-commons-zero
+[14]: /files/images/miyo7jpg
+[15]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/miyo_7.jpg?itok=I8Ow3PX6 (dmenu)
+[16]: /files/images/miyo8jpg
+[17]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/miyo_8.jpg?itok=oa502KfM (Synaptic)
+[18]: /files/images/miyo9jpg
+[19]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/miyo_9.jpg?itok=gUM4mxEv (Accessories)
diff --git a/sources/tech/20190301 Emacs for (even more of) the win.md b/sources/tech/20190301 Emacs for (even more of) the win.md
new file mode 100644
index 0000000000..c1697f3cae
--- /dev/null
+++ b/sources/tech/20190301 Emacs for (even more of) the win.md
@@ -0,0 +1,84 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Emacs for (even more of) the win)
+[#]: via: (https://so.nwalsh.com/2019/03/01/emacs)
+[#]: author: (Norman Walsh https://so.nwalsh.com)
+
+Emacs for (even more of) the win
+======
+
+I use Emacs every day. I rarely notice it. But when I do, it usually brings me joy.
+
+>If you are a professional writer…Emacs outshines all other editing software in approximately the same way that the noonday sun does the stars. It is not just bigger and brighter; it simply makes everything else vanish.
+
+I’ve been using [Emacs][1] for well over twenty years. I use it for writing almost anything and everything (I edit Scala and Java in [IntelliJ][2]). I read my email in it. If it can be done in Emacs, that’s where I prefer to do it.
+
+Although I’ve used Emacs for literally decades, I realized around the new year that very little about my use of Emacs had changed in the past decade or more. New editing modes had come along, of course, I’d picked up a package or two, and I did adopt [Helm][3] a few years ago, but mostly it just did all the heavy lifting that I required of it, day in and day out without complaining or getting in my way. On the one hand, that’s a testament to how good it is. On the other hand, that’s an invitation to dig in and see what I’ve missed.
+
+At about the same time, I resolved to improve several aspects of my work life:
+
+ * **Better meeting management.** I’m lead on a couple of projects at work and those projects have meetings, both regularly scheduled and ad hoc; some of them I run, some of them, I only attend.
+
+I realized I’d become sloppy about my participation in meetings. It’s all too easy sit in a room where there’s a meeting going on but actually read email and work on other items. (I strongly oppose the “no laptops” rule in meetings, but that’s a topic for another day.)
+
+There are a couple of problems with sloppy participation. First, it’s disrespectful to the person who convened the meeting and the other participants. That’s actually sufficient reason not to do it, but I think there’s another problem: it disguises the cost of meetings.
+
+If you’re in a meeting but also answering your email and maybe fixing a bug, then that meeting didn’t cost anything (or as much). If meetings are cheap, then there will be more of them.
+
+I want fewer, shorter meetings. I don’t want to disguise their cost, I want them to be perceived as damned expensive and to be avoided unless absolutely necessary.
+
+Sometimes, they are absolutely necessary. And I appreciate that a quick meeting can sometimes resolve an issue quickly. But if I have ten short meetings a day, let’s not pretend that I’m getting anything else productive accomplished.
+
+I resolved to take notes at all the meetings I attend. I’m not offering to take minutes, necessarily, but I am taking minutes of a sort. It keeps me focused on the meeting and not catching up on other things.
+
+ * **Better time management.** There are lots and lots of things that I need or want to do, both professionally and personally. I’ve historically kept track off some of them in issue lists, some in saved email threads (in Emacs and [Gmail][4], for slightly different types of reminders), in my calendar, on “todo lists” of various sorts on my phone, and on little scraps of paper. And probably other places as well.
+
+I resolved to keep them all in one place. Not because I think there’s one place that’s uniformly best or better, but because I hope to accomplish two things. First, by having them all in one place, I hope to be able to develop a better and more holistic view of where I’m putting my energies. Second, because I want to develop a habitn. “A settled or regular tendency or practice, especially one that is hard to give up.” of recording, tracking, and preserving them.
+
+ * **Better accountability.** If you work in certain science or engineering disciplines, you will have developed the habit of keeping a [lab notebook][5]. Alas, I did not. But I resolved to do so.
+
+I’m not interested in the legal aspects that encourage bound pages or scribing only in permanent marker. What I’m interested in is developing the habit of keeping a record. My goal is to have a place to jot down ideas and design sketches and the like. If I have sudden inspiration or if I think of an edge case that isn’t in the test suite, I want my instinct to be to write it in my journal instead of scribbling it on a scrap of paper or promising myself that I’ll remember it.
+
+
+
+
+This confluence of resolutions led me quickly and more-or-less directly to [Org][6]. There is a large, active, and loyal community of Org users. I’ve played with it in the past (I even [wrote about it][7], at least in passing, a couple of years ago) and I tinkered long enough to [integrate MarkLogic][8] into it. (Boy has that paid off in the last week or two!)
+
+But I never used it.
+
+I am now using it. I take minutes in it, I record all of my todo items in it, and I keep a journal in it. I’m not sure there’s much value in me attempting to wax eloquent about it or enumerate all its features, you’ll find plenty of either with a quick web search.
+
+If you use Emacs, you should be using Org. If you don’t use Emacs, I’m confident you wouldn’t be the first person who started because of Org. It does a lot. It takes a little time to learn your way around and remember the shortcuts, but I think it’s worth it. (And if you carry an [iOS][9] device in your pocket, I recommend [beorg][10] for recording items while you’re on the go.)
+
+Naturally, I worked out how to [get XML out of it][11]⊕“Worked out” sure is a funny way to spell “hacked together in elisp.”. And from there, how to turn it back into the markup my weblog expects (and do so at the push of a button in Emacs, of course). So this is the first posting written in Org. It won’t be the last.
+
+P.S. Happy birthday [little weblog][12].
+
+--------------------------------------------------------------------------------
+
+via: https://so.nwalsh.com/2019/03/01/emacs
+
+作者:[Norman Walsh][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://so.nwalsh.com
+[b]: https://github.com/lujun9972
+[1]: https://en.wikipedia.org/wiki/Emacs
+[2]: https://en.wikipedia.org/wiki/IntelliJ_IDEA
+[3]: https://emacs-helm.github.io/helm/
+[4]: https://en.wikipedia.org/wiki/Gmail
+[5]: https://en.wikipedia.org/wiki/Lab_notebook
+[6]: https://en.wikipedia.org/wiki/Org-mode
+[7]: https://www.balisage.net/Proceedings/vol17/html/Walsh01/BalisageVol17-Walsh01.html
+[8]: https://github.com/ndw/ob-ml-marklogic/
+[9]: https://en.wikipedia.org/wiki/IOS
+[10]: https://beorgapp.com/
+[11]: https://github.com/ndw/org-to-xml
+[12]: https://so.nwalsh.com/2017/03/01/helloWorld
diff --git a/sources/tech/20190301 Guide to Install VMware Tools on Linux.md b/sources/tech/20190301 Guide to Install VMware Tools on Linux.md
new file mode 100644
index 0000000000..e6a43bcde1
--- /dev/null
+++ b/sources/tech/20190301 Guide to Install VMware Tools on Linux.md
@@ -0,0 +1,143 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Guide to Install VMware Tools on Linux)
+[#]: via: (https://itsfoss.com/install-vmware-tools-linux)
+[#]: author: (Ankush Das https://itsfoss.com/author/ankush/)
+
+Guide to Install VMware Tools on Linux
+======
+
+**VMware Tools enhances your VM experience by allowing you to share clipboard and folder among other things. Learn how to install VMware tools on Ubuntu and other Linux distributions.**
+
+In an earlier tutorial, you learned to [install VMware Workstation on Ubuntu][1]. You can further enhance the functionality of your virtual machines by installing VMware Tools.
+
+If you have already installed a guest OS on VMware, you must have noticed the requirement for [VMware tools][2] – even though not completely aware of what it is needed for.
+
+In this article, we will highlight the importance of VMware tools, the features it offers, and the method to install VMware tools on Ubuntu or any other Linux distribution.
+
+### VMware Tools: Overview & Features
+
+![Installing VMware Tools on Ubuntu][3]Installing VMware Tools on Ubuntu
+
+For obvious reasons, the virtual machine (your Guest OS) will not behave exactly like the host. There will be certain limitations in terms of its performance and operationg. And, that is why a set of utilities (VMware Tools) was introduced.
+
+VMware tools help in managing the guest OS in an efficient manner while also improving its performance.
+
+#### What exactly is VMware tool responsible for?
+
+![How to Install VMware tools on Linux][4]
+
+You have got a vague idea of what it does – but let us talk about the details:
+
+ * Synchronize the time between the guest OS and the host to make things easier.
+ * Unlocks the ability to pass messages from host OS to guest OS. For example, you copy a text on the host to your clipboard and you can easily paste it to your guest OS.
+ * Enables sound in guest OS.
+ * Improves video resolution.
+ * Improves the cursor movement.
+ * Fixes incorrect network speed data.
+ * Eliminates inadequate color depth.
+
+
+
+These are the major changes that happen when you install VMware tools on Guest OS. But, what exactly does it contain / feature in order to unlock/enhance these functionalities? Let’s see..
+
+#### VMware tools: Core Feature Details
+
+![Sharing clipboard between guest and host OS with VMware Tools][5]Sharing clipboard between guest and host OS with VMware Tools
+
+If you do not want to know what it includes to enable the functionalities, you can skip this part. But, for the curious readers, let us briefly discuss about it:
+
+**VMware device drivers:** It really depends on the OS. Most of the major operating systems do include device drivers by default. So, you do not have to install it separately. This generally involves – memory control driver, mouse driver, audio driver, NIC driver, VGA driver and so on.
+
+**VMware user process:** This is where things get really interesting. With this, you get the ability to copy-paste and drag-drop between the host and the guest OS. You can basically copy and paste the text from the host to the virtual machine or vice versa.
+
+You get to drag and drop files as well. In addition, it enables the pointer release/lock when you do not have an SVGA driver installed.
+
+**VMware tools lifecycle management** : Well, we will take a look at how to install VMware tools below – but this feature helps you easily install/upgrade VMware tools in the virtual machine.
+
+**Shared Folders** : In addition to these, VMware tools also allow you to have shared folders between the guest OS and the host.
+
+![Sharing folder between guest and host OS using VMware Tools in Linux][6]Sharing folder between guest and host OS using VMware Tools in Linux
+
+Of course, what it does and facilitates also depends on the host OS. For example, on Windows, you get a Unity mode on VMware to run programs on virtual machine and operate it from the host OS.
+
+### How to install VMware Tools on Ubuntu & other Linux distributions
+
+**Note:** For Linux guest operating systems, you should already have “Open VM Tools” suite installed, eliminating the need of installing VMware tools separately, most of the time.
+
+Most of the time, when you install a guest OS, you will get a prompt as a software update or a popup telling you to install VMware tools if the operating system supports [Easy Install][7].
+
+Windows and Ubuntu does support Easy Install. So, even if you are using Windows as your host OS or trying to install VMware tools on Ubuntu, you should first get an option to install the VMware tools easily as popup message. Here’s how it should look like:
+
+![Pop-up to install VMware Tools][8]Pop-up to install VMware Tools
+
+This is the easiest way to get it done. So, make sure you have an active network connection when you setup the virtual machine.
+
+If you do not get any of these pop ups – or options to easily install VMware tools. You have to manually install it. Here’s how to do that:
+
+1\. Launch VMware Workstation Player.
+
+2\. From the menu, navigate through **Virtual Machine - > Install VMware tools**. If you already have it installed, and want to repair the installation, you will observe the same option to appear as “ **Re-install VMware tools** “.
+
+3\. Once you click on that, you will observe a virtual CD/DVD mounted in the guest OS.
+
+4\. Open that and copy/paste the **tar.gz** file to any location of your choice and extract it, here we choose the **Desktop**.
+
+![][9]
+
+5\. After extraction, launch the terminal and navigate to the folder inside by typing in the following command:
+
+```
+cd Desktop/VMwareTools-10.3.2-9925305/vmware-tools-distrib
+```
+
+You need to check the name of the folder and path in your case – depending on the version and where you extracted – it might vary.
+
+![][10]
+
+Replace **Desktop** with your storage location (such as cd Downloads) and the rest should remain the same if you are installing **10.3.2 version**.
+
+6\. Now, simply type in the following command to start the installation:
+
+```
+sudo ./vmware-install.pl -d
+```
+
+![][11]
+
+You will be asked the password for permission to install, type it in and you should be good to go.
+
+That’s it. You are done. These set of steps should be applicable to almost any Ubuntu-based guest operating system. If you want to install VMware tools on Ubuntu Server, or any other OS.
+
+**Wrapping Up**
+
+Installing VMware tools on Ubuntu Linux is pretty easy. In addition to the easy method, we have also explained the manual method to do it. If you still need help, or have a suggestion regarding the installation, let us know in the comments down below.
+
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/install-vmware-tools-linux
+
+作者:[Ankush Das][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/ankush/
+[b]: https://github.com/lujun9972
+[1]: https://itsfoss.com/install-vmware-player-ubuntu-1310/
+[2]: https://kb.vmware.com/s/article/340
+[3]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/02/vmware-tools-downloading.jpg?fit=800%2C531&ssl=1
+[4]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/install-vmware-tools-linux.png?resize=800%2C450&ssl=1
+[5]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/02/vmware-tools-features.gif?resize=800%2C500&ssl=1
+[6]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/02/vmware-tools-shared-folder.jpg?fit=800%2C660&ssl=1
+[7]: https://docs.vmware.com/en/VMware-Workstation-Player-for-Linux/15.0/com.vmware.player.linux.using.doc/GUID-3F6B9D0E-6CFC-4627-B80B-9A68A5960F60.html
+[8]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/02/vmware-tools.jpg?fit=800%2C481&ssl=1
+[9]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/02/vmware-tools-extraction.jpg?fit=800%2C564&ssl=1
+[10]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/02/vmware-tools-folder.jpg?fit=800%2C487&ssl=1
+[11]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/02/vmware-tools-installation-ubuntu.jpg?fit=800%2C492&ssl=1
diff --git a/sources/tech/20190302 Create a Custom System Tray Indicator For Your Tasks on Linux.md b/sources/tech/20190302 Create a Custom System Tray Indicator For Your Tasks on Linux.md
new file mode 100644
index 0000000000..d9d42b7a2f
--- /dev/null
+++ b/sources/tech/20190302 Create a Custom System Tray Indicator For Your Tasks on Linux.md
@@ -0,0 +1,187 @@
+[#]: collector: (lujun9972)
+[#]: translator: (lujun9972)
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Create a Custom System Tray Indicator For Your Tasks on Linux)
+[#]: via: (https://fosspost.org/tutorials/custom-system-tray-icon-indicator-linux)
+[#]: author: (M.Hanny Sabbagh https://fosspost.org/author/mhsabbagh)
+
+Create a Custom System Tray Indicator For Your Tasks on Linux
+======
+
+System Tray icons are still considered to be an amazing functionality today. By just right-clicking on the icon, and then selecting which actions you would like to take, you may ease your life a lot and save many unnecessary clicks on daily basis.
+
+When talking about useful system tray icons, examples like Skype, Dropbox and VLC do come to mind:
+
+![Create a Custom System Tray Indicator For Your Tasks on Linux 11][1]
+
+However, system tray icons can actually be quite a lot more useful; By simply building one yourself for your own needs. In this tutorial, we’ll explain how to do that for you in very simple steps.
+
+### Prerequisites
+
+We are going to build a custom system tray indicator using Python. Python is probably installed by default on all the major Linux distributions, so just check it’s there (version 2.7). Additionally, we’ll need the gir1.2-appindicator3 package installed. It’s the library allowing us to easily create system tray indicators.
+
+To install it on Ubuntu/Mint/Debian:
+
+```
+sudo apt-get install gir1.2-appindicator3
+```
+
+On Fedora:
+
+```
+sudo dnf install libappindicator-gtk3
+```
+
+For other distributions, just search for any packages containing appindicator.
+
+On GNOME Shell, system tray icons are removed starting from 3.26. You’ll need to install the [following extension][2] (Or possibly other extensions) to re-enable the feature on your desktop. Otherwise, you won’t be able to see the indicator we are going to create here.
+
+### Basic Code
+
+Here’s the basic code of the indicator:
+
+```
+#!/usr/bin/python
+import os
+from gi.repository import Gtk as gtk, AppIndicator3 as appindicator
+
+def main():
+ indicator = appindicator.Indicator.new("customtray", "semi-starred-symbolic", appindicator.IndicatorCategory.APPLICATION_STATUS)
+ indicator.set_status(appindicator.IndicatorStatus.ACTIVE)
+ indicator.set_menu(menu())
+ gtk.main()
+
+def menu():
+ menu = gtk.Menu()
+
+ command_one = gtk.MenuItem('My Notes')
+ command_one.connect('activate', note)
+ menu.append(command_one)
+
+ exittray = gtk.MenuItem('Exit Tray')
+ exittray.connect('activate', quit)
+ menu.append(exittray)
+
+ menu.show_all()
+ return menu
+
+def note(_):
+ os.system("gedit $HOME/Documents/notes.txt")
+
+def quit(_):
+ gtk.main_quit()
+
+if __name__ == "__main__":
+ main()
+```
+
+We’ll explain how the code works later. But for know, just save it in a text file under the name tray.py, and run it using Python:
+
+```
+python tray.py
+```
+
+You’ll see the indicator working as follows:
+
+![Create a Custom System Tray Indicator For Your Tasks on Linux 13][3]
+
+Now, to explain how we did the magic:
+
+ * The first 3 lines of the code are nothing more than just specifying the Python path and importing the libraries we are going to use in our indicator.
+
+ * def main() : This is the main function of the indicator. Under it we write the code to initialize and build the indicator.
+
+ * indicator = appindicator.Indicator.new(“customtray”, “semi-starred-symbolic”, appindicator.IndicatorCategory.APPLICATION_STATUS) : Here we are specially creating a new indicator and calling it `customtray` . This is the special name of the indicator so that the system doesn’t mix it with other indicators that may be running. Also, we used the `semi-starred-symbolic` icon name as the default icon for our indicator. You could possibly change thing to any other things; Say `firefox` (if you want to see Firefox icon being used for the indicator), or any other icon name you would like. The last part regarding the `APPLICATION_STATUS` is just ordinary code for the categorization/scope of that indicator.
+
+ * `indicator.set_status(appindicator.IndicatorStatus.ACTIVE)` : This line just turns the indicator on.
+
+ * `indicator.set_menu(menu())` : Here, we are saying that we want to use the `menu()` function (which we’ll define later) for creating the menu items of our indicator. This is important so that when you click on the indicator, you can see a list of possible actions to take.
+
+ * `gtk.main()` : Just run the main GTK loop.
+
+ * Under `menu()` you’ll see that we are creating the actions/items we want to provide using our indicator. `command_one = gtk.MenuItem(‘My Notes’)` simply initializes the first menu item with the text “My notes”, and then `command_one.connect(‘activate’, note)` connects the `activate` signal of that menu item to the `note()` function defined later; In other words, we are telling our system here: “When this menu item is clicked, run the note() function”. Finally, `menu.append(command_one)` adds that menu item to the list.
+
+ * The lines regarding `exittray` are just for creating an exit menu item to close the indicator any time you want.
+
+ * `menu.show_all()` and `return menu` are just ordinary codes for returning the menu list to the indicator.
+
+ * Under `note(_)` you’ll see the code that must be executed when the “My Notes” menu item is clicked. Here, we just wrote `os.system(“gedit $HOME/Documents/notes.txt”)` ; The `os.system` function is a function that allows us to run shell commands from inside Python, so here we wrote a command to open a file called `notes.txt` under the `Documents` folder in our home directory using the `gedit` editor. This for example can be your daily notes taking program from now on!
+
+### Adding your Needed Tasks
+
+There are only 2 things you need to touch in the code:
+
+ 1. Define a new menu item under `menu()` for your desired task.
+
+ 2. Create a new function to run a specific action when that menu item is clicked.
+
+
+So, let’s say that you want to create a new menu item, which when clicked, plays a specific video/audio file on your hard disk using VLC? To do it, simply add the following 3 lines in line 17:
+
+```
+command_two = gtk.MenuItem('Play video/audio')
+command_two.connect('activate', play)
+menu.append(command_two)
+```
+
+And the following lines in line 30:
+
+```
+def play(_):
+ os.system("vlc /home//Videos/somevideo.mp4")
+```
+
+Replace /home//Videos/somevideo.mp4 with the path to the video/audio file you want. Now save the file and run the indicator again:
+
+```
+python tray.py
+```
+
+This is how you’ll see it now:
+
+![Create a Custom System Tray Indicator For Your Tasks on Linux 15][4]
+
+And when you click on the newly-created menu item, VLC will start playing!
+
+To create other items/tasks, simply redo the steps again. Just be careful to replace command_two with another name, like command_three, so that no clash between variables happen. And then define new separate functions like what we did with the play(_) function.
+
+The possibilities are endless from here; I am using this way for example to fetch some data from the web (using the urllib2 library) and display them for me any time. I am also using it for playing an mp3 file in the background using the mpg123 command, and I am defining another menu item to killall mpg123 to stop playing that audio whenever I want. CS:GO on Steam for example takes a huge time to exit (the window doesn’t close automatically), so as a workaround for this, I simply minimize the window and click on a menu item that I created which will execute killall -9 csgo_linux64.
+
+You can use this indicator for anything: Updating your system packages, possibly running some other scripts any time you want.. Literally anything.
+
+### Autostart on Boot
+
+We want our system tray indicator to start automatically on boot, we don’t want to run it manually each time. To do that, simply add the following command to your startup applications (after you replace the path to the tray.py file with yours):
+
+```
+nohup python /home//tray.py &
+```
+
+The very next time you reboot your system, the indicator will start working automatically after boot!
+
+### Conclusion
+
+You now know how to create your own system tray indicator for any task that you may want. This method should save you a lot of time depending on the nature and number of tasks you need to run on daily basis. Some users may prefer creating aliases from the command line, but this will require you to always open the terminal window or have a drop-down terminal emulator available, while here, the system tray indicator is always working and available for you.
+
+Have you used this method to run your tasks before? Would love to hear your thoughts.
+
+
+--------------------------------------------------------------------------------
+
+via: https://fosspost.org/tutorials/custom-system-tray-icon-indicator-linux
+
+作者:[M.Hanny Sabbagh][a]
+选题:[lujun9972][b]
+译者:[lujun9972](https://github.com/lujun9972)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://fosspost.org/author/mhsabbagh
+[b]: https://github.com/lujun9972
+[1]: https://i2.wp.com/fosspost.org/wp-content/uploads/2019/02/Screenshot-at-2019-02-28-0808.png?resize=407%2C345&ssl=1 (Create a Custom System Tray Indicator For Your Tasks on Linux 12)
+[2]: https://extensions.gnome.org/extension/1031/topicons/
+[3]: https://i2.wp.com/fosspost.org/wp-content/uploads/2019/03/Screenshot-at-2019-03-02-1041.png?resize=434%2C140&ssl=1 (Create a Custom System Tray Indicator For Your Tasks on Linux 14)
+[4]: https://i2.wp.com/fosspost.org/wp-content/uploads/2019/03/Screenshot-at-2019-03-02-1141.png?resize=440%2C149&ssl=1 (Create a Custom System Tray Indicator For Your Tasks on Linux 16)
diff --git a/sources/tech/20190304 How to Install MongoDB on Ubuntu.md b/sources/tech/20190304 How to Install MongoDB on Ubuntu.md
new file mode 100644
index 0000000000..30d588ddba
--- /dev/null
+++ b/sources/tech/20190304 How to Install MongoDB on Ubuntu.md
@@ -0,0 +1,238 @@
+[#]: collector: (lujun9972)
+[#]: translator: (An-DJ)
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (How to Install MongoDB on Ubuntu)
+[#]: via: (https://itsfoss.com/install-mongodb-ubuntu)
+[#]: author: (Sergiu https://itsfoss.com/author/sergiu/)
+
+How to Install MongoDB on Ubuntu
+======
+
+**This tutorial presents two ways to install MongoDB on Ubuntu and Ubuntu-based Linux distributions.**
+
+[MongoDB][1] is an increasingly popular free and open-source NoSQL database that stores data in collections of JSON-like, flexible documents, in contrast to the usual table approach you’ll find in SQL databases.
+
+You are most likely to find MongoDB used in modern web applications. Its document model makes it very intuitive to access and handle with various programming languages.
+
+![mongodb Ubuntu][2]
+
+In this article, I’ll cover two ways you can install MongoDB on your Ubuntu system.
+
+### Installing MongoDB on Ubuntu based Distributions
+
+ 1. Install MongoDB using Ubuntu’s repository. Easy but not the latest version of MongoDB
+ 2. Install MongoDB using its official repository. Slightly complicated but you get the latest version of MongoDB.
+
+
+
+The first installation method is easier, but I recommend the second method if you plan on using the latest release with official support.
+
+Some people might prefer using snap packages. There are snaps available in the Ubuntu Software Center, but I wouldn’t recommend using them; they’re outdated at the moment and I won’t be covering that.
+
+#### Method 1. Install MongoDB from Ubuntu Repository
+
+This is the easy way to install MongoDB on your system, you only need to type in a simple command.
+
+##### Installing MongoDB
+
+First, make sure your packages are up-to-date. Open up a terminal and type:
+
+```
+sudo apt update && sudo apt upgrade -y
+```
+
+Go ahead and install MongoDB with:
+
+```
+sudo apt install mongodb
+```
+
+That’s it! MongoDB is now installed on your machine.
+
+The MongoDB service should automatically be started on install, but to check the status type
+
+```
+sudo systemctl status mongodb
+```
+
+![Check if the MongoDB service is running.][3]
+
+You can see that the service is **active**.
+
+##### Running MongoDB
+
+MongoDB is currently a systemd service, so we’ll use **systemctl** to check and modify it’s state, using the following commands:
+
+```
+sudo systemctl status mongodb
+sudo systemctl stop mongodb
+sudo systemctl start mongodb
+sudo systemctl restart mongodb
+```
+
+You can also change if MongoDB automatically starts when the system starts up ( **default** : enabled):
+
+```
+sudo systemctl disable mongodb
+sudo systemctl enable mongodb
+```
+
+To start working with (creating and editing) databases, type:
+
+```
+mongo
+```
+
+This will start up the **mongo shell**. Please check out the [manual][4] for detailed information on the available queries and options.
+
+**Note:** Depending on how you plan to use MongoDB, you might need to adjust your Firewall. That’s unfortunately more involved than what I can cover here and depends on your configuration.
+
+##### Uninstall MongoDB
+
+If you installed MongoDB from the Ubuntu Repository and want to uninstall it (maybe to install using the officially supported way), type:
+
+```
+sudo systemctl stop mongodb
+sudo apt purge mongodb
+sudo apt autoremove
+```
+
+This should completely get rid of your MongoDB install. Make sure to **backup** any collections or documents you might want to keep since they will be wiped out!
+
+#### Method 2. Install MongoDB Community Edition on Ubuntu
+
+This is the way the recommended way to install MongoDB, using the package manager. You’ll have to type a few more commands and it might be intimidating if you are newer to the Linux world.
+
+But there’s nothing to be afraid of! We’ll go through the installation process step by step.
+
+##### Installing MongoDB
+
+The package maintained by MongoDB Inc. is called **mongodb-org** , not **mongodb** (this is the name of the package in the Ubuntu Repository). Make sure **mongodb** is not installed on your system before applying this steps. The packages will conflict. Let’s get to it!
+
+First, we’ll have to import the public key:
+
+```
+sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
+```
+
+Now, you need to add a new repository in your sources list so that you can install MongoDB Community Edition and also get automatic updates:
+
+```
+echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu $(lsb_release -cs)/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list
+```
+
+To be able to install **mongodb-org** , we’ll have to update our package database so that your system is aware of the new packages available:
+
+```
+sudo apt update
+```
+
+Now you can ether install the **latest stable version** of MongoDB:
+
+```
+sudo apt install -y mongodb-org
+```
+
+or a **specific version** (change the version number after **equal** sign)
+
+```
+sudo apt install -y mongodb-org=4.0.6 mongodb-org-server=4.0.6 mongodb-org-shell=4.0.6 mongodb-org-mongos=4.0.6 mongodb-org-tools=4.0.6
+```
+
+If you choose to install a specific version, make sure you change the version number everywhere. If you only change it in the **mongodb-org=4.0.6** part, the latest version will be installed.
+
+By default, when updating using the package manager ( **apt-get** ), MongoDB will be updated to the newest updated version. To stop that from happening (and freezing to the installed version), use:
+
+```
+echo "mongodb-org hold" | sudo dpkg --set-selections
+echo "mongodb-org-server hold" | sudo dpkg --set-selections
+echo "mongodb-org-shell hold" | sudo dpkg --set-selections
+echo "mongodb-org-mongos hold" | sudo dpkg --set-selections
+echo "mongodb-org-tools hold" | sudo dpkg --set-selections
+```
+
+You have now successfully installed MongoDB!
+
+##### Configuring MongoDB
+
+By default, the package manager will create **/var/lib/mongodb** and **/var/log/mongodb** and MongoDB will run using the **mongodb** user account.
+
+I won’t go into changing these default settings since that is beyond the scope of this guide. You can check out the [manual][5] for detailed information.
+
+The settings in **/etc/mongod.conf** are applied when starting/restarting the **mongodb** service instance.
+
+##### Running MongoDB
+
+To start the mongodb daemon **mongod** , type:
+
+```
+sudo service mongod start
+```
+
+Now you should verify that the **mongod** process started successfully. This information is stored (by default) at **/var/log/mongodb/mongod.log**. Let’s check the contents of that file:
+
+```
+sudo cat /var/log/mongodb/mongod.log
+```
+
+![Check MongoDB logs to see if the process is running properly.][6]
+
+As long as you get this: **[initandlisten] waiting for connections on port 27017** somewhere in there, the process is running properly.
+
+**Note: 27017** is the default port of **mongod.**
+
+To stop/restart **mongod** enter:
+
+```
+sudo service mongod stop
+sudo service mongod restart
+```
+
+Now, you can use MongoDB by opening the **mongo shell** :
+
+```
+mongo
+```
+
+##### Uninstall MongoDB
+
+Run the following commands
+
+```
+sudo service mongod stop
+sudo apt purge mongodb-org*
+```
+
+To remove the **databases** and **log files** (make sure to **backup** what you want to keep!):
+
+```
+sudo rm -r /var/log/mongodb
+sudo rm -r /var/lib/mongodb
+```
+
+**Wrapping Up**
+
+MongoDB is a great NoSQL database, easy to integrate into modern projects. I hope this tutorial helped you to set it up on your Ubuntu machine! Let us know how you plan on using MongoDB in the comments below.
+
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/install-mongodb-ubuntu
+
+作者:[Sergiu][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/sergiu/
+[b]: https://github.com/lujun9972
+[1]: https://www.mongodb.com/
+[2]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/mongodb-ubuntu.jpeg?resize=800%2C450&ssl=1
+[3]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/02/mongodb_check_status.jpg?fit=800%2C574&ssl=1
+[4]: https://docs.mongodb.com/manual/tutorial/getting-started/
+[5]: https://docs.mongodb.com/manual/
+[6]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/02/mongodb_org_check_logs.jpg?fit=800%2C467&ssl=1
diff --git a/sources/tech/20190304 What you need to know about Ansible modules.md b/sources/tech/20190304 What you need to know about Ansible modules.md
new file mode 100644
index 0000000000..8330d4bd59
--- /dev/null
+++ b/sources/tech/20190304 What you need to know about Ansible modules.md
@@ -0,0 +1,311 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (What you need to know about Ansible modules)
+[#]: via: (https://opensource.com/article/19/3/developing-ansible-modules)
+[#]: author: (Jairo da Silva Junior https://opensource.com/users/jairojunior)
+
+What you need to know about Ansible modules
+======
+Learn how and when to develop custom modules for Ansible.
+
+
+Ansible works by connecting to nodes and sending small programs called modules to be executed remotely. This makes it a push architecture, where configuration is pushed from Ansible to servers without agents, as opposed to the pull model, common in agent-based configuration management systems, where configuration is pulled.
+
+These modules are mapped to resources and their respective states, which are represented in YAML files. They enable you to manage virtually everything that has an API, CLI, or configuration file you can interact with, including network devices like load balancers, switches, firewalls, container orchestrators, containers themselves, and even virtual machine instances in a hypervisor or in a public (e.g., AWS, GCE, Azure) and/or private (e.g., OpenStack, CloudStack) cloud, as well as storage and security appliances and system configuration.
+
+With Ansible's batteries-included model, hundreds of modules are included and any task in a playbook has a module behind it.
+
+The contract for building modules is simple: JSON in the stdout. The configurations declared in YAML files are delivered over the network via SSH/WinRM—or any other connection plugin—as small scripts to be executed in the target server(s). Modules can be written in any language capable of returning JSON, although most Ansible modules (except for Windows PowerShell) are written in Python using the Ansible API (this eases the development of new modules).
+
+Modules are one way of expanding Ansible capabilities. Other alternatives, like dynamic inventories and plugins, can also increase Ansible's power. It's important to know about them so you know when to use one instead of the other.
+
+Plugins are divided into several categories with distinct goals, like Action, Cache, Callback, Connection, Filters, Lookup, and Vars. The most popular plugins are:
+
+ * **Connection plugins:** These implement a way to communicate with servers in your inventory (e.g., SSH, WinRM, Telnet); in other words, how automation code is transported over the network to be executed.
+ * **Filters plugins:** These allow you to manipulate data inside your playbook. This is a Jinja2 feature that is harnessed by Ansible to solve infrastructure-as-code problems.
+ * **Lookup plugins:** These fetch data from an external source (e.g., env, file, Hiera, database, HashiCorp Vault).
+
+
+
+Ansible's official docs are a good resource on [developing plugins][1].
+
+### When should you develop a module?
+
+Although many modules are delivered with Ansible, there is a chance that your problem is not yet covered or it's something too specific—for example, a solution that might make sense only in your organization. Fortunately, the official docs provide excellent guidelines on [developing modules][2].
+
+**IMPORTANT:** Before you start working on something new, always check for open pull requests, ask developers at #ansible-devel (IRC/Freenode), or search the [development list][3] and/or existing [working groups][4] to see if a module exists or is in development.
+
+Signs that you need a new module instead of using an existing one include:
+
+ * Conventional configuration management methods (e.g., templates, file, get_url, lineinfile) do not solve your problem properly.
+ * You have to use a complex combination of commands, shells, filters, text processing with magic regexes, and API calls using curl to achieve your goals.
+ * Your playbooks are complex, imperative, non-idempotent, and even non-deterministic.
+
+
+
+In the ideal scenario, the tool or service already has an API or CLI for management, and it returns some sort of structured data (JSON, XML, YAML).
+
+### Identifying good and bad playbooks
+
+> "Make love, but don't make a shell script in YAML."
+
+So, what makes a bad playbook?
+
+```
+- name: Read a remote resource
+ command: "curl -v http://xpto/resource/abc"
+ register: resource
+ changed_when: False
+
+ - name: Create a resource in case it does not exist
+ command: "curl -X POST http://xpto/resource/abc -d '{ config:{ client: xyz, url: http://beta, pattern: core.md Dict.md lctt2014.md lctt2016.md lctt2018.md README.md } }'"
+ when: "resource.stdout | 404"
+
+ # Leave it here in case I need to remove it hehehe
+ #- name: Remove resource
+ # command: "curl -X DELETE http://xpto/resource/abc"
+ # when: resource.stdout == 1
+```
+
+Aside from being very fragile—what if the resource state includes a 404 somewhere?—and demanding extra code to be idempotent, this playbook can't update the resource when its state changes.
+
+Playbooks written this way disrespect many infrastructure-as-code principles. They're not readable by human beings, are hard to reuse and parameterize, and don't follow the declarative model encouraged by most configuration management tools. They also fail to be idempotent and to converge to the declared state.
+
+Bad playbooks can jeopardize your automation adoption. Instead of harnessing configuration management tools to increase your speed, they have the same problems as an imperative automation approach based on scripts and command execution. This creates a scenario where you're using Ansible just as a means to deliver your old scripts, copying what you already have into YAML files.
+
+Here's how to rewrite this example to follow infrastructure-as-code principles.
+
+```
+- name: XPTO
+ xpto:
+ name: abc
+ state: present
+ config:
+ client: xyz
+ url: http://beta
+ pattern: "*.*"
+```
+
+The benefits of this approach, based on custom modules, include:
+
+ * It's declarative—resources are properly represented in YAML.
+ * It's idempotent.
+ * It converges from the declared state to the current state.
+ * It's readable by human beings.
+ * It's easily parameterized or reused.
+
+
+
+### Implementing a custom module
+
+Let's use [WildFly][5], an open source Java application server, as an example to introduce a custom module for our not-so-good playbook:
+
+```
+ - name: Read datasource
+ command: "jboss-cli.sh -c '/subsystem=datasources/data-source=DemoDS:read-resource()'"
+ register: datasource
+
+ - name: Create datasource
+ command: "jboss-cli.sh -c '/subsystem=datasources/data-source=DemoDS:add(driver-name=h2, user-name=sa, password=sa, min-pool-size=20, max-pool-size=40, connection-url=.jdbc:h2:mem:demo;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE..)'"
+ when: 'datasource.stdout | outcome => failed'
+```
+
+Problems:
+
+ * It's not declarative.
+ * JBoss-CLI returns plaintext in a JSON-like syntax; therefore, this approach is very fragile, since we need a type of parser for this notation. Even a seemingly simple parser can be too complex to treat many [exceptions][6].
+ * JBoss-CLI is just an interface to send requests to the management API (port 9990).
+ * Sending an HTTP request is more efficient than opening a new JBoss-CLI session, connecting, and sending a command.
+ * It does not converge to the desired state; it only creates the resource when it doesn't exist.
+
+
+
+A custom module for this would look like:
+
+```
+- name: Configure datasource
+ jboss_resource:
+ name: "/subsystem=datasources/data-source=DemoDS"
+ state: present
+ attributes:
+ driver-name: h2
+ connection-url: "jdbc:h2:mem:demo;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE"
+ jndi-name: "java:jboss/datasources/DemoDS"
+ user-name: sa
+ password: sa
+ min-pool-size: 20
+ max-pool-size: 40
+```
+
+This playbook is declarative, idempotent, more readable, and converges to the desired state regardless of the current state.
+
+### Why learn to build custom modules?
+
+Good reasons to learn how to build custom modules include:
+
+ * Improving existing modules
+ * You have bad playbooks and want to improve them, or …
+ * You don't, but want to avoid having bad playbooks.
+ * Knowing how to build a module considerably improves your ability to debug problems in playbooks, thereby increasing your productivity.
+
+
+
+> "…abstractions save us time working, but they don't save us time learning." —Joel Spolsky, [The Law of Leaky Abstractions][7]
+
+#### Custom Ansible modules 101
+
+ * JSON (JavaScript Object Notation) in stdout: that's the contract!
+ * They can be written in any language, but …
+ * Python is usually the best option (or the second best)
+ * Most modules delivered with Ansible ( **lib/ansible/modules** ) are written in Python and should support compatible versions.
+
+
+
+#### The Ansible way
+
+ * First step:
+
+```
+git clone https://github.com/ansible/ansible.git
+```
+
+ * Navigate in **lib/ansible/modules/** and read the existing modules code.
+
+ * Your tools are: Git, Python, virtualenv, pdb (Python debugger)
+
+ * For comprehensive instructions, consult the [official docs][8].
+
+
+
+
+#### An alternative: drop it in the library directory
+
+```
+library/ # if any custom modules, put them here (optional)
+module_utils/ # if any custom module_utils to support modules, put them here (optional)
+filter_plugins/ # if any custom filter plugins, put them here (optional)
+
+site.yml # master playbook
+webservers.yml # playbook for webserver tier
+dbservers.yml # playbook for dbserver tier
+
+roles/
+ common/ # this hierarchy represents a "role"
+ library/ # roles can also include custom modules
+ module_utils/ # roles can also include custom module_utils
+ lookup_plugins/ # or other types of plugins, like lookup in this case
+```
+
+ * It's easier to start.
+ * Doesn't require anything besides Ansible and your favorite IDE/text editor.
+ * This is your best option if it's something that will be used internally.
+
+
+
+**TIP:** You can use this directory layout to overwrite existing modules if, for example, you need to patch a module.
+
+#### First steps
+
+You could do it in your own—including using another language—or you could use the AnsibleModule class, as it is easier to put JSON in the stdout ( **exit_json()** , **fail_json()** ) in the way Ansible expects ( **msg** , **meta** , **has_changed** , **result** ), and it's also easier to process the input ( **params[]** ) and log its execution ( **log()** , **debug()** ).
+
+```
+def main():
+
+ arguments = dict(name=dict(required=True, type='str'),
+ state=dict(choices=['present', 'absent'], default='present'),
+ config=dict(required=False, type='dict'))
+
+ module = AnsibleModule(argument_spec=arguments, supports_check_mode=True)
+ try:
+ if module.check_mode:
+ # Do not do anything, only verifies current state and report it
+ module.exit_json(changed=has_changed, meta=result, msg='Fez alguma coisa ou não...')
+
+ if module.params['state'] == 'present':
+ # Verify the presence of a resource
+ # Desired state `module.params['param_name'] is equal to the current state?
+ module.exit_json(changed=has_changed, meta=result)
+
+ if module.params['state'] == 'absent':
+ # Remove the resource in case it exists
+ module.exit_json(changed=has_changed, meta=result)
+
+ except Error as err:
+ module.fail_json(msg=str(err))
+```
+
+**NOTES:** The **check_mode** ("dry run") allows a playbook to be executed or just verifies if changes are required, but doesn't perform them. **** Also, the **module_utils** directory can be used for shared code among different modules.
+
+For the full Wildfly example, check [this pull request][9].
+
+### Running tests
+
+#### The Ansible way
+
+The Ansible codebase is heavily tested, and every commit triggers a build in its continuous integration (CI) server, [Shippable][10], which includes linting, unit tests, and integration tests.
+
+For integration tests, it uses containers and Ansible itself to perform the setup and verify phase. Here is a test case (written in Ansible) for our custom module's sample code:
+
+```
+- name: Configure datasource
+ jboss_resource:
+ name: "/subsystem=datasources/data-source=DemoDS"
+ state: present
+ attributes:
+ connection-url: "jdbc:h2:mem:demo;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE"
+ ...
+ register: result
+
+- name: assert output message that datasource was created
+ assert:
+ that:
+ - "result.changed == true"
+ - "'Added /subsystem=datasources/data-source=DemoDS' in result.msg"
+```
+
+#### An alternative: bundling a module with your role
+
+Here is a [full example][11] inside a simple role:
+
+```
+[*Molecule*]() + [*Vagrant*]() + [*pytest*](): `molecule init` (inside roles/)
+```
+
+It offers greater flexibility to choose:
+
+ * Simplified setup
+ * How to spin up your infrastructure: e.g., Vagrant, Docker, OpenStack, EC2
+ * How to verify your infrastructure tests: Testinfra and Goss
+
+
+
+But your tests would have to be written using pytest with Testinfra or Goss, instead of plain Ansible. If you'd like to learn more about testing Ansible roles, see my article about [using Molecule][12].
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/3/developing-ansible-modules
+
+作者:[Jairo da Silva Junior][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/jairojunior
+[b]: https://github.com/lujun9972
+[1]: https://docs.ansible.com/ansible/latest/dev_guide/developing_plugins.html#developing-plugins
+[2]: https://docs.ansible.com/ansible/latest/dev_guide/developing_modules.html
+[3]: https://groups.google.com/forum/#!forum/ansible-devel
+[4]: https://github.com/ansible/community/
+[5]: http://www.wildfly.org/
+[6]: https://tools.ietf.org/html/rfc7159
+[7]: https://en.wikipedia.org/wiki/Leaky_abstraction#The_Law_of_Leaky_Abstractions
+[8]: https://docs.ansible.com/ansible/latest/dev_guide/developing_modules_general.html#developing-modules-general
+[9]: https://github.com/ansible/ansible/pull/43682/files
+[10]: https://app.shippable.com/github/ansible/ansible/dashboard
+[11]: https://github.com/jairojunior/ansible-role-jboss/tree/with_modules
+[12]: https://opensource.com/article/18/12/testing-ansible-roles-molecule
diff --git a/sources/tech/20190305 How rootless Buildah works- Building containers in unprivileged environments.md b/sources/tech/20190305 How rootless Buildah works- Building containers in unprivileged environments.md
new file mode 100644
index 0000000000..cf046ec1b3
--- /dev/null
+++ b/sources/tech/20190305 How rootless Buildah works- Building containers in unprivileged environments.md
@@ -0,0 +1,133 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (How rootless Buildah works: Building containers in unprivileged environments)
+[#]: via: (https://opensource.com/article/19/3/tips-tricks-rootless-buildah)
+[#]: author: (Daniel J Walsh https://opensource.com/users/rhatdan)
+
+How rootless Buildah works: Building containers in unprivileged environments
+======
+Buildah is a tool and library for building Open Container Initiative (OCI) container images.
+
+
+In previous articles, including [How does rootless Podman work?][1], I talked about [Podman][2], a tool that enables users to manage pods, containers, and container images.
+
+[Buildah][3] is a tool and library for building Open Container Initiative ([OCI][4]) container images that is complementary to Podman. (Both projects are maintained by the [containers][5] organization, of which I'm a member.) In this article, I will talk about rootless Buildah, including the differences between it and Podman.
+
+Our goal with Buildah was to build a low-level tool that could be used either directly or vendored into other tools to build container images.
+
+### Why Buildah?
+
+Here is how I describe a container image: It is basically a rootfs directory that contains the code needed to run your container. This directory is called a rootfs because it usually looks like **/ (root)** on a Linux machine, meaning you are likely to find directories in a rootfs like **/etc** , **/usr** , **/bin** , etc.
+
+The second part of a container image is a JSON file that describes the contents of the rootfs. It contains fields like the command to run the container, the entrypoint, the environment variables required to run the container, the working directory of the container, etc. Basically this JSON file allows the developer of the container image to describe how the container image is expected to be used. The fields in this JSON file have been standardized in the [OCI Image Format specification][6]
+
+The rootfs and the JSON file then get tar'd together to create an image bundle that is stored in a container registry. To create a layered image, you install more software into the rootfs and modify the JSON file. Then you tar up the differences of the new and the old rootfs and store that in another image tarball. The second JSON file refers back to the first JSON file via a checksum.
+
+Many years ago, Docker introduced Dockerfile, a simplified scripting language for building container images. Dockerfile was great and really took off, but it has many shortcomings that users have complained about. For example:
+
+ * Dockerfile encourages the inclusion of tools used to build containers inside the container image. Container images do not need to include yum/dnf/apt, but most contain one of them and all their dependencies.
+
+ * Each line causes a layer to be created. Because of this, secrets can mistakenly get added to container images. If you create a secret in one line of the Dockerfile and delete it in the next, the secret is still in the image.
+
+
+
+
+One of my biggest complaints about the "container revolution" is that six years since it started, the only way to build a container image was still with Dockerfiles. Lots of tools other than **docker build** have appeared besides Buildah, but most still deal only with Dockerfile. So users continue hacking around the problems with Dockerfile.
+
+Note that [umoci][7] is an alternative to **docker build** that allows you to build container images without Dockerfile.
+
+Our goal with Buildah was to build a simple tool that could just create a rootfs directory on disk and allow other tools to populate the directory, then create the JSON file. Finally, Buildah would create the OCI image and push it to a container registry where it could be used by any container engine, like [Docker][8], Podman, [CRI-O][9], or another Buildah.
+
+Buildah also supports Dockerfile, since we know the bulk of people building containers have created Dockerfiles.
+
+### Using Buildah directly
+
+Lots of people use Buildah directly. A cool feature of Buildah is that you can script up the container build directly in Bash.
+
+The example below creates a Bash script called **myapp.sh** , which uses Buildah to pull down the Fedora image, and then uses **dnf** and **make** on a machine to install software into the container image rootfs, **$mnt**. It then adds some fields to the JSON file using **buildah config** and commits the container to a container image **myapp**. Finally, it pushes the container image to a container registry, **quay.io**. (It could push it to any container registry.) Now this OCI image can be used by any container engine or Kubernetes.
+
+```
+cat myapp.sh
+#!/bin/sh
+ctr=$(buildah from fedora)
+mnt=($buildah mount $ctr)
+dnf -y install --installroot $mnt httpd
+make install DESTDIR=$mnt myapp
+rm -rf $mnt/var/cache $mnt/var/log/*
+buildah config --command /usr/bin/myapp -env foo=bar --working-dir=/root $ctr
+buildah commit $ctr myapp
+buildah push myapp http://quay.io/username/myapp
+```
+
+To create really small images, you could replace **fedora** in the script above with **scratch** , and Buildah will build a container image that only has the requirements for the **httpd** package inside the container image. No need for Python or DNF.
+
+### Podman's relationship to Buildah
+
+With Buildah, we have a low-level tool for building container images. Buildah also provides a library for other tools to build container images. Podman was designed to replace the Docker command line interface (CLI). One of the Docker CLI commands is **docker build**. We needed to have **podman build** to support building container images with Dockerfiles. Podman vendored in the Buildah library to allow it to do **podman build**. Any time you do a **podman build** , you are executing Buildah code to build your container images. If you are only going to use Dockerfiles to build container images, we recommend you only use Podman; there's no need for Buildah at all.
+
+### Other tools using the Buildah library
+
+Podman is not the only tool to take advantage of the Buildah library. [OpenShift 4 Source-to-Image][10] (S2I) will also use Buildah to build container images. OpenShift S2I allows developers using OpenShift to use Git commands to modify source code; when they push the changes for their source code to the Git repository, OpenShift kicks off a job to compile the source changes and create a container image. It also uses Buildah under the covers to build this image.
+
+[Ansible-Bender][11] is a new project to build container images via an Ansible playbook. For those familiar with Ansible, Ansible-Bender makes it easy to describe the contents of the container image and then uses Buildah to package up the container image and send it to a container registry.
+
+We would love to see other tools and languages for describing and building a container image and would welcome others use Buildah to do the conversion.
+
+### Problems with rootless
+
+Buildah works fine in rootless mode. It uses user namespace the same way Podman does. If you execute
+
+```
+$ buildah bud --tag myapp -f Dockerfile .
+$ buildah push myapp http://quay.io/username/myapp
+```
+
+in your home directory, everything works great.
+
+However, if you execute the script described above, it will fail!
+
+The problem is that, when running the **buildah mount** command in rootless mode, the **buildah** command must put itself inside the user namespace and create a new mount namespace. Rootless users are not allowed to mount filesystems when not running in a user namespace.
+
+When the Buildah executable exits, the user namespace and mount namespace disappear, so the mount point no longer exists. This means the commands after **buildah mount** that attempt to write to **$mnt** will fail since **$mnt** is no longer mounted.
+
+How can we make the script work in rootless mode?
+
+#### Buildah unshare
+
+Buildah has a special command, **buildah unshare** , that allows you to enter the user namespace. If you execute it with no commands, it will launch a shell in the user namespace, and your shell will seem like it is running as root and all the contents of the home directory will seem like they are owned by root. If you look at the owner or files in **/usr** , it will list them as owned by **nfsnobody** (or nobody). This is because your user ID (UID) is now root inside the user namespace and real root (UID=0) is not mapped into the user namespace. The kernel represents all files owned by UIDs not mapped into the user namespace as the NFSNOBODY user. When you exit the shell, you will exit the user namespace, you will be back to your normal UID, and the home directory will be owned by your UID again.
+
+If you want to execute the **myapp.sh** command defined above, you can execute **buildah unshare myapp.sh** and the script will now run correctly.
+
+#### Conclusion
+
+Building and running containers in unprivileged environments is now possible and quite useable. There is little reason for developers to develop containers as root.
+
+If you want to use a traditional container engine, and use Dockerfile's for builds, then you should probably just use Podman. But if you want to experiment with building container images in new ways without using Dockerfile, then you should really take a look at Buildah.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/3/tips-tricks-rootless-buildah
+
+作者:[Daniel J Walsh][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/rhatdan
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/article/19/2/how-does-rootless-podman-work
+[2]: https://podman.io/
+[3]: https://github.com/containers/buildah
+[4]: https://www.opencontainers.org/
+[5]: https://github.com/containers
+[6]: https://github.com/opencontainers/image-spec
+[7]: https://github.com/openSUSE/umoci
+[8]: https://github.com/docker
+[9]: https://cri-o.io/
+[10]: https://github.com/openshift/source-to-image
+[11]: https://github.com/TomasTomecek/ansible-bender
diff --git a/sources/tech/20190305 Running the ‘Real Debian- on Raspberry Pi 3- -For DIY Enthusiasts.md b/sources/tech/20190305 Running the ‘Real Debian- on Raspberry Pi 3- -For DIY Enthusiasts.md
new file mode 100644
index 0000000000..785a6eeb5a
--- /dev/null
+++ b/sources/tech/20190305 Running the ‘Real Debian- on Raspberry Pi 3- -For DIY Enthusiasts.md
@@ -0,0 +1,134 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Running the ‘Real Debian’ on Raspberry Pi 3+ [For DIY Enthusiasts])
+[#]: via: (https://itsfoss.com/debian-raspberry-pi)
+[#]: author: (Shirish https://itsfoss.com/author/shirish/)
+
+Running the ‘Real Debian’ on Raspberry Pi 3+ [For DIY Enthusiasts]
+======
+
+If you have ever used a Raspberry Pi device, you probably already know that it recommends a Linux distribution called [Raspbian][1].
+
+Raspbian is a heavily customized form of Debian to run on low-powered ARM processors. It’s not bad. In fact, it’s an excellent OS for Raspberry Pi devices but it’s not the real Debian.
+
+[Debian purists like me][2] would prefer to run the actual Debian over the Raspberry Pi’s customized Debian version. I trust Debian more than any other distribution to provide me a vast amount of properly vetted free software packages. Moreover, a project like this would help other ARM devices as well.
+
+Above all, running the official Debian on Raspberry Pi is sort of challenge and I like such challenges.
+
+![Real Debian on Raspberry Pi][3]
+
+I am not the only one who thinks like this. There are many other Debian users who share the same feeling and this is why there exists an ongoing project to create a [Debian image for Raspberry Pi][4].
+
+About two and a half months back, a Debian Developer (DD) named [Gunnar Wolf][5] took over that unofficial Raspberry Pi image generation project.
+
+I’ll be quickly showing you how can you install this Raspberry Pi Debian Buster preview image on your Raspberry Pi 3 (or higher) devices.
+
+### Getting Debian on Raspberry Pi [For Experts]
+
+```
+Warning
+
+Be aware this Debian image is very raw and unsupported at the moment. Though it’s very new, I believe experienced Raspberry Pi and Debian users should be able to use it.
+```
+
+Now as far as [Debian][6] is concerned, here is the Debian image and instructions that you could use to put the Debian stock image on your Raspberry pi 3 Model B+.
+
+#### Step 1: Download the Debian Raspberry Pi Buster image
+
+You can download the preview images using wget command:
+
+```
+wget https://people.debian.org/~gwolf/raspberrypi3/20190206/20190206-raspberry-pi-3-buster-PREVIEW.img.xz
+```
+
+#### Step 2: Verify checksum (optional)
+
+It’s optional but you should [verify the checksum][7]. You can do that by downloading the SHA256 hashfile and then comparing it with that of the downloaded Raspberry Pi Debian image.
+
+At my end I had moved both the .sha256 file as img.xz to a directory to make it easier to check although it’s not necessary.
+
+```
+wget https://people.debian.org/~gwolf/raspberrypi3/20190206/20190206-raspberry-pi-3-buster-PREVIEW.img.xz.sha256
+
+sha256sum -c 20190206-raspberry-pi-3-buster-PREVIEW.img.xz.sha256
+```
+
+#### Step 3: Write the image to your SD card
+
+Once you have verified the image, take a look at it. It is around 400MB in the compressed xzip format. You can extract it to get an image of around 1.5GB in size.
+
+Insert your SD card. **Before you carry on to the next command please change the sdX to a suitable name that corresponds to your SD card.**
+
+The command basically extracts the img.xz archive to the SD card. The progress switch/flag enables you to see a progress line with a number as to know how much the archive has extracted.
+
+```
+xzcat 20190206-raspberry-pi-3-buster-PREVIEW.img.xz | dd of=/dev/sdX bs=64k oflag=dsync status=progress$ xzcat 20190206-raspberry-pi-3-buster-PREVIEW.img.xz | dd of=/dev/sdX bs=64k oflag=dsync status=progress
+```
+
+Once you have successfully flashed your SD card, you should be able test if the installation went ok by sshing into your Raspberry Pi. The default root password is raspberry.
+
+```
+ssh root@rpi3
+```
+
+If you are curious to know how the Raspberry Pi image was built, you can look at the [build scripts][8].
+
+You can find more info on the project homepage.
+
+[DEBIAN RASPBERRY PI IMAGE][15]
+
+### How to contribute to the Raspberry Pi Buster effort
+
+There is a mailing list called [debian-arm][9] where people could contribute their efforts and ask questions. As you can see in the list, there is already a new firmware which was released [few days back][10] which might make booting directly a reality instead of the workaround shared above.
+
+If you want you could make a new image using the raspi3-image-spec shared above or wait for Gunnar to make a new image which might take time.
+
+Most of the maintainers also hang out at #vmdb2 at #OFTC. You can either use your IRC client or [Riot client][11], register your name at Nickserv and connect with either Gunnar Wolf, Roman Perier or/and Lars Wirzenius, author of [vmdb2][12]. I might do a follow-up on vmdb2 as it’s a nice little tool by itself.
+
+### The Road Ahead
+
+If there are enough interest and contributors, for instance, the lowest-hanging fruit would be to make sure that the ARM64 port [wiki page][13] is as current as possible. The benefits are and can be enormous.
+
+There are a huge number of projects which could benefit from either having a [Pi farm][14] to making your media server or a SiP phone or whatever you want to play/work with.
+
+Another low-hanging fruit might be synchronization between devices, say an ARM cluster sharing reports to either a Debian desktop by way of notification or on mobile or both ways.
+
+While I have shared about Raspberry Pi, there are loads of single-board computers on the market already and lot more coming, both from MIPS as well as OpenRISC-V so there is going to plenty of competition in the days ahead.
+
+Also, OpenRISC-V is and would be open-sourcing lot of its IP so non-free firmware or binary blobs would not be needed. Even MIPS is rumored to be more open which may challenge ARM if MIPS and OpenRISC-V are able to get their logistics and pricing right, but that is a story for another day.
+
+There are many more vendors, I am just sharing the ones whom I am most interested to see what they come up with.
+
+I hope the above sheds some light why it makes sense to have Debian on the Raspberry Pi.
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/debian-raspberry-pi
+
+作者:[Shirish][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/shirish/
+[b]: https://github.com/lujun9972
+[1]: https://www.raspberrypi.org/downloads/raspbian/
+[2]: https://itsfoss.com/reasons-why-i-love-debian/
+[3]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/03/debian-raspberry-pi.png?resize=800%2C450&ssl=1
+[4]: https://wiki.debian.org/RaspberryPi3
+[5]: https://gwolf.org/node/4139
+[6]: https://www.debian.org/
+[7]: https://itsfoss.com/checksum-tools-guide-linux/
+[8]: https://github.com/Debian/raspi3-image-spec
+[9]: https://lists.debian.org/debian-arm/2019/02/threads.html
+[10]: https://alioth-lists.debian.net/pipermail/pkg-raspi-maintainers/Week-of-Mon-20190225/000310.html
+[11]: https://itsfoss.com/riot-desktop/
+[12]: https://liw.fi/vmdb2/
+[13]: https://wiki.debian.org/Arm64Port
+[14]: https://raspi.farm/
+[15]: https://wiki.debian.org/RaspberryPi3
diff --git a/sources/tech/20190306 ClusterShell - A Nifty Tool To Run Commands On Cluster Nodes In Parallel.md b/sources/tech/20190306 ClusterShell - A Nifty Tool To Run Commands On Cluster Nodes In Parallel.md
new file mode 100644
index 0000000000..8f69143d36
--- /dev/null
+++ b/sources/tech/20190306 ClusterShell - A Nifty Tool To Run Commands On Cluster Nodes In Parallel.md
@@ -0,0 +1,309 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (ClusterShell – A Nifty Tool To Run Commands On Cluster Nodes In Parallel)
+[#]: via: (https://www.2daygeek.com/clustershell-clush-run-commands-on-cluster-nodes-remote-system-in-parallel-linux/)
+[#]: author: (Magesh Maruthamuthu https://www.2daygeek.com/author/magesh/)
+
+ClusterShell – A Nifty Tool To Run Commands On Cluster Nodes In Parallel
+======
+
+We had written two articles in the past to run commands on multiple remote server in parallel.
+
+These are **[Parallel SSH (PSSH)][1]** or **[Distributed Shell (DSH)][2]**.
+
+Today also, we are going to discuss about the same kind of topic but it allows us to perform the same on cluster nodes as well.
+
+You may think, i can write a small shell script to archive this instead of installing these third party packages.
+
+Of course you are right and if you are going to run some commands in 10-15 remote systems then you don’t need to use this.
+
+However, the scripts take some time to complete this task as it’s running in a sequential order.
+
+Think about if you would like to run some commands on 1000+ servers what will be the options?
+
+In this case your script won’t help you. Also, it would take good amount of time to complete a task.
+
+So, to overcome this kind of issue and situation. We need to run the command in parallel on remote machines.
+
+For that, we need use in one of the Parallel applications. I hope this explanation might fulfilled your doubts about parallel utilities.
+
+### What Is ClusterShell?
+
+clush stands for [ClusterShell][3]. ClusterShell is an event-driven open source Python library, designed to run local or distant commands in parallel on server farms or on large Linux clusters.
+
+It will take care of common issues encountered on HPC clusters, such as operating on groups of nodes, running distributed commands using optimized execution algorithms, as well as gathering results and merging identical outputs, or retrieving return codes.
+
+ClusterShell takes advantage of existing remote shell facilities already installed on your systems, like SSH.
+
+ClusterShell’s primary goal is to improve the administration of high- performance clusters by providing a lightweight but scalable Python API for developers. It also provides clush, clubak and cluset/nodeset, convenient command-line tools that allow traditional shell scripts to benefit from some of the library features.
+
+ClusterShell’s written in Python and it requires Python (v2.6+ or v3.4+) to run on your system.
+
+### How To Install ClusterShell On Linux?
+
+ClusterShell package is available in most of the distribution official package manager. So, use the distribution package manager tool to install it.
+
+For **`Fedora`** system, use **[DNF Command][4]** to install clustershell.
+
+```
+$ sudo dnf install clustershell
+```
+
+Python 2 module and tools are installed and if it’s default on your system then run the following command to install Python 3 development on Fedora System.
+
+```
+$ sudo dnf install python3-clustershell
+```
+
+Make sure you should have enabled the **[EPEL repository][5]** on your system before performing clustershell installation.
+
+For **`RHEL/CentOS`** systems, use **[YUM Command][6]** to install clustershell.
+
+```
+$ sudo yum install clustershell
+```
+
+Python 2 module and tools are installed and if it’s default on your system then run the following command to install Python 3 development on CentOS/RHEL System.
+
+```
+$ sudo yum install python34-clustershell
+```
+
+For **`openSUSE Leap`** system, use **[Zypper Command][7]** to install clustershell.
+
+```
+$ sudo zypper install clustershell
+```
+
+Python 2 module and tools are installed and if it’s default on your system then run the following command to install Python 3 development on OpenSUSE System.
+
+```
+$ sudo zypper install python3-clustershell
+```
+
+For **`Debian/Ubuntu`** systems, use **[APT-GET Command][8]** or **[APT Command][9]** to install clustershell.
+
+```
+$ sudo apt install clustershell
+```
+
+### How To Install ClusterShell In Linux Using PIP?
+
+Use PIP to install ClusterShell because it’s written in Python.
+
+Make sure you should have enabled the **[Python][10]** and **[PIP][11]** on your system before performing clustershell installation.
+
+```
+$ sudo pip install ClusterShell
+```
+
+### How To Use ClusterShell On Linux?
+
+It’s straight forward and awesome tool compared with other utilities such as pssh and dsh. It has so many options to perform the remote execution in parallel.
+
+Make sure you should have enabled the **[password less login][12]** on your system before start using clustershell.
+
+The following configuration file defines system-wide default values. You no need to modify anything here.
+
+```
+$ cat /etc/clustershell/clush.conf
+```
+
+If you would like to create a servers group. Here you can go. By default some examples were available so, do the same for your requirements.
+
+```
+$ cat /etc/clustershell/groups.d/local.cfg
+```
+
+Just run the clustershell command in the following format to get the information from the given nodes.
+
+```
+$ clush -w 192.168.1.4,192.168.1.9 cat /proc/version
+192.168.1.9: Linux version 4.15.0-45-generic ([email protected]) (gcc version 7.3.0 (Ubuntu 7.3.0-16ubuntu3)) #48-Ubuntu SMP Tue Jan 29 16:28:13 UTC 2019
+192.168.1.4: Linux version 3.10.0-957.el7.x86_64 ([email protected]) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) ) #1 SMP Thu Nov 8 23:39:32 UTC 2018
+```
+
+**Option:**
+
+ * **`-w:`** nodes where to run the command.
+
+
+
+You can use the regular expressions instead of using full hostname and IPs.
+
+```
+$ clush -w 192.168.1.[4,9] uname -r
+192.168.1.9: 4.15.0-45-generic
+192.168.1.4: 3.10.0-957.el7.x86_64
+```
+
+Alternatively you can use the following format if you have the servers in the same IP series.
+
+```
+$ clush -w 192.168.1.[4-9] date
+192.168.1.6: Mon Mar 4 21:08:29 IST 2019
+192.168.1.7: Mon Mar 4 21:08:29 IST 2019
+192.168.1.8: Mon Mar 4 21:08:29 IST 2019
+192.168.1.5: Mon Mar 4 09:16:30 CST 2019
+192.168.1.9: Mon Mar 4 21:08:29 IST 2019
+192.168.1.4: Mon Mar 4 09:16:30 CST 2019
+```
+
+clustershell allow us to run the command in batch mode. Use the following format to achieve this.
+
+```
+$ clush -w 192.168.1.4,192.168.1.9 -b
+Enter 'quit' to leave this interactive mode
+Working with nodes: 192.168.1.[4,9]
+clush> hostnamectl
+---------------
+192.168.1.4
+---------------
+ Static hostname: CentOS7.2daygeek.com
+ Icon name: computer-vm
+ Chassis: vm
+ Machine ID: 002f47b82af248f5be1d67b67e03514c
+ Boot ID: f9b37a073c534dec8b236885e754cb56
+ Virtualization: kvm
+ Operating System: CentOS Linux 7 (Core)
+ CPE OS Name: cpe:/o:centos:centos:7
+ Kernel: Linux 3.10.0-957.el7.x86_64
+ Architecture: x86-64
+---------------
+192.168.1.9
+---------------
+ Static hostname: Ubuntu18
+ Icon name: computer-vm
+ Chassis: vm
+ Machine ID: 27f6c2febda84dc881f28fd145077187
+ Boot ID: f176f2eb45524d4f906d12e2b5716649
+ Virtualization: oracle
+ Operating System: Ubuntu 18.04.2 LTS
+ Kernel: Linux 4.15.0-45-generic
+ Architecture: x86-64
+clush> free -m
+---------------
+192.168.1.4
+---------------
+ total used free shared buff/cache available
+Mem: 1838 641 217 19 978 969
+Swap: 2047 0 2047
+---------------
+192.168.1.9
+---------------
+ total used free shared buff/cache available
+Mem: 1993 352 1067 1 573 1473
+Swap: 1425 0 1425
+clush> w
+---------------
+192.168.1.4
+---------------
+ 09:21:14 up 3:21, 3 users, load average: 0.00, 0.01, 0.05
+USER TTY FROM [email protected] IDLE JCPU PCPU WHAT
+daygeek :0 :0 06:02 ?xdm? 1:28 0.30s /usr/libexec/gnome-session-binary --session gnome-classic
+daygeek pts/0 :0 06:03 3:17m 0.06s 0.06s bash
+daygeek pts/1 192.168.1.6 06:03 52:26 0.10s 0.10s -bash
+---------------
+192.168.1.9
+---------------
+ 21:13:12 up 3:12, 1 user, load average: 0.08, 0.03, 0.00
+USER TTY FROM [email protected] IDLE JCPU PCPU WHAT
+daygeek pts/0 192.168.1.6 20:42 29:41 0.05s 0.05s -bash
+clush> quit
+```
+
+If you would like to run the command on a group of nodes then use the following format.
+
+```
+$ clush -w @dev uptime
+or
+$ clush -g dev uptime
+or
+$ clush --group=dev uptime
+
+192.168.1.9: 21:10:10 up 3:09, 1 user, load average: 0.09, 0.03, 0.01
+192.168.1.4: 09:18:12 up 3:18, 3 users, load average: 0.01, 0.02, 0.05
+```
+
+If you would like to run the command on more than one group of nodes then use the following format.
+
+```
+$ clush -w @dev,@uat uptime
+or
+$ clush -g dev,uat uptime
+or
+$ clush --group=dev,uat uptime
+
+192.168.1.7: 07:57:19 up 59 min, 1 user, load average: 0.08, 0.03, 0.00
+192.168.1.9: 20:27:20 up 1:00, 1 user, load average: 0.00, 0.00, 0.00
+192.168.1.5: 08:57:21 up 59 min, 1 user, load average: 0.00, 0.01, 0.05
+```
+
+clustershell allow us to copy a file to remote machines. To copy local file or directory to the remote nodes in the same location.
+
+```
+$ clush -w 192.168.1.[4,9] --copy /home/daygeek/passwd-up.sh
+```
+
+We can verify the same by running the following command.
+
+```
+$ clush -w 192.168.1.[4,9] ls -lh /home/daygeek/passwd-up.sh
+192.168.1.4: -rwxr-xr-x. 1 daygeek daygeek 159 Mar 4 09:00 /home/daygeek/passwd-up.sh
+192.168.1.9: -rwxr-xr-x 1 daygeek daygeek 159 Mar 4 20:52 /home/daygeek/passwd-up.sh
+```
+
+To copy local file or directory to the remote nodes in the different location.
+
+```
+$ clush -g uat --copy /home/daygeek/passwd-up.sh --dest /tmp
+```
+
+We can verify the same by running the following command.
+
+```
+$ clush --group=uat ls -lh /tmp/passwd-up.sh
+192.168.1.7: -rwxr-xr-x. 1 daygeek daygeek 159 Mar 6 07:44 /tmp/passwd-up.sh
+```
+
+To copy file or directory from remote nodes to local system.
+
+```
+$ clush -w 192.168.1.7 --rcopy /home/daygeek/Documents/magi.txt --dest /tmp
+```
+
+We can verify the same by running the following command.
+
+```
+$ ls -lh /tmp/magi.txt.192.168.1.7
+-rw-r--r-- 1 daygeek daygeek 35 Mar 6 20:24 /tmp/magi.txt.192.168.1.7
+```
+
+--------------------------------------------------------------------------------
+
+via: https://www.2daygeek.com/clustershell-clush-run-commands-on-cluster-nodes-remote-system-in-parallel-linux/
+
+作者:[Magesh Maruthamuthu][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.2daygeek.com/author/magesh/
+[b]: https://github.com/lujun9972
+[1]: https://www.2daygeek.com/pssh-parallel-ssh-run-execute-commands-on-multiple-linux-servers/
+[2]: https://www.2daygeek.com/dsh-run-execute-shell-commands-on-multiple-linux-servers-at-once/
+[3]: https://cea-hpc.github.io/clustershell/
+[4]: https://www.2daygeek.com/dnf-command-examples-manage-packages-fedora-system/
+[5]: https://www.2daygeek.com/install-enable-epel-repository-on-rhel-centos-scientific-linux-oracle-linux/
+[6]: https://www.2daygeek.com/yum-command-examples-manage-packages-rhel-centos-systems/
+[7]: https://www.2daygeek.com/zypper-command-examples-manage-packages-opensuse-system/
+[8]: https://www.2daygeek.com/apt-get-apt-cache-command-examples-manage-packages-debian-ubuntu-systems/
+[9]: https://www.2daygeek.com/apt-command-examples-manage-packages-debian-ubuntu-systems/
+[10]: https://www.2daygeek.com/3-methods-to-install-latest-python3-package-on-centos-6-system/
+[11]: https://www.2daygeek.com/install-pip-manage-python-packages-linux/
+[12]: https://www.2daygeek.com/linux-passwordless-ssh-login-using-ssh-keygen/
diff --git a/sources/tech/20190306 Getting started with the Geany text editor.md b/sources/tech/20190306 Getting started with the Geany text editor.md
new file mode 100644
index 0000000000..7da5f95686
--- /dev/null
+++ b/sources/tech/20190306 Getting started with the Geany text editor.md
@@ -0,0 +1,141 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Getting started with the Geany text editor)
+[#]: via: (https://opensource.com/article/19/3/getting-started-geany-text-editor)
+[#]: author: (James Mawson https://opensource.com/users/dxmjames)
+
+Getting started with the Geany text editor
+======
+Geany is a light and swift text editor with IDE features.
+
+
+
+I have to admit, it took me a rather embarrassingly long time to really get into Linux as a daily driver. One thing I recall from these years in the wilderness was how strange it was to watch open source types get so worked up about text editors.
+
+It wasn't just that opinions differed. Disagreements were intense. And you'd see them again and again.
+
+I mean, I suppose it makes some sense. Doing dev or admin work means you're spending a lot of time with a text editor. And when it gets in the way or won't do quite what you want? In that exact moment, that's the most frustrating thing in the world.
+
+And I know what it means to really hate a text editor. I learned this many years ago in the computer labs at university trying to figure out Emacs. I was quite shocked that a piece of software could have so many sadomasochistic overtones. People were doing that to each other deliberately!
+
+So perhaps it's a rite of passage that now I have one I very much like. It's called [Geany][1], it's on GPL, and it's [in the repositories][2] of most popular distributions.
+
+Here's why it works for me.
+
+### I'm into simplicity
+
+The main thing I want from a text editor is just to edit text. I don't think there should be any kind of learning curve in the way. I should be able to open it and use it.
+
+For that reason, I've generally used whatever is included with an operating system. On Windows 10, I used Notepad far longer than I should have. When I finally replaced it, it was with Notepad++. In the Linux terminal, I like Nano.
+
+I was perfectly aware I was missing out on a lot of useful functionality. But it was never enough of a pain point to make a change. And it's not that I've never tried anything more elaborate. I did some of my first real programming on Visual Basic and Borland Delphi.
+
+These development environments gave you a graphical interface to design your windows visually, various windows where you could configure properties and settings, a text interface to write your functions, and various odds and ends for debugging. This was a great way to build desktop applications, so long as you used it the way it was intended.
+
+But if you wanted to do something the authors didn't anticipate, all these extra moving parts suddenly got in the way. As software became more and more about the web and the internet, this situation started happening all the time.
+
+In the past, I used HTML editing suites like Macromedia Dreamweaver (as it was back then) and FirstPage for static websites. Again, I found the features could get in the way as much as they helped. These applications had their own ideas about how to organize your project, and if you had a different view, it was an awful bother.
+
+More recently, after a long break from programming, I started learning the people's language: [Python][3]. I bought a book of introductory tutorials, which said to install [IDLE][4], so I did. I think I got about five minutes into it before ditching it to run the interpreter from the command line. It had way too many moving parts to deal with. Especially for HelloWorld.py.
+
+But I always went back to Notepad++ and Nano whenever I could get away with it.
+
+So what changed? Well, a few months ago I [ditched Windows 10][5] completely (hooray!). Sticking with what I knew, I used Nano as my main text editor for a few weeks.
+
+I learned that Nano is great when you're already on the command line and you need to launch a Navy SEAL mission. You know what I mean. A lightning-fast raid. Get in, complete the objective, and get out.
+
+It's less ideal for long campaigns—or even moderately short ones. Even just adding a new page to a static website turns out to involve many repetitive keystrokes. As much as anything else, I really missed being able to navigate and select text with the mouse.
+
+### Introducing Geany
+
+The Geany project began in 2005 and is still actively developed.
+
+It has minimal dependencies: just the [GTK Toolkit][6] and the libraries that GTK depends on. If you have any kind of desktop environment installed, you almost certainly have GTK on your machine.
+
+I'm using it on Xfce, but thanks to these minimal dependencies, Geany is portable across desktop environments.
+
+Geany is fast and light. Installing Geany from the package manager took mere moments, and it uses only 3.1MB of space on my machine.
+
+So far, I've used it for HTML, CSS, and Python and to edit configuration files. It also recognizes C, Java, JavaScript, Perl, and [more][7].
+
+### No-compromise simplicity
+
+Geany has a lot of great features that make life easier. Just listing them would miss the best bit, which is this: Geany makes sense right out of the box. As soon as it's installed, you can start editing files straightaway, and it just works.
+
+For all the IDE functionality, none of it gets in the way. The default settings are set intelligently, and the menus are laid out nicely enough that it's no hassle to change them.
+
+It doesn't try to organize your project for you, and it doesn't have strong opinions about how you should do anything.
+
+### Handles whitespace beautifully
+
+By default, every time you press Enter, Geany preserves the indentation on the new line. In addition to saving a few tedious keystrokes, it avoids the inconsistent use of tabs and spaces, which can sometimes sneak in when your mind's elsewhere and make your code hard to follow for anyone with a different text editor.
+
+But what if you're editing a file that's already suffered this treatment? For example, I needed to edit an HTML file that was indented with a mix of tabs and spaces, making it a nightmare to figure out how the tags were nested.
+
+With Geany, it took just seconds to hunt through the menus to change the tab length from four spaces to eight. Even better was the option to convert those tabs to spaces. Problem solved!
+
+### Clever shortcuts and automation
+
+How often do you write the correct code on the wrong line? I do it all the time.
+
+Geany makes it easy to move lines of code up and down using Alt+PgUp and Alt+PgDn. This is a little nicer than just a regular cut and paste—instead of needing four or five key presses, you only need one.
+
+When coding HTML, Geany automatically closes tags for you. As well as saving time, this avoids a lot of annoying bugs. When you forget to close a tag, you can spend ages scouring the document looking for something far more complex.
+
+It gets even better in Python, where indentation is crucial. Whenever you end a line with a colon, Geany automatically indents it for you.
+
+One nice little side effect is that when you forget to include the colon—something I do with embarrassing regularity—you realize it immediately when you don't get the automatic indentation you expected.
+
+The default indentation is a single tab, while I prefer two spaces. Because Geany's menus are very well laid out, it took me only a few seconds to figure out how to change it.
+
+You, of course, get syntax highlighting too. In addition, it tracks your [variable scope][8] and offers useful autocompletion.
+
+### Large plugin library
+
+Geany has a [big library of plugins][9], but so far I haven't needed to try any. Even so, I still feel like I benefit from them. How? Well, it means that my editor isn't crammed with functionality I don't use.
+
+I reckon this attitude of adding extra functionality into a big library of plugins is a great ethos—no matter your specific needs, you get to have all the stuff you want and none of what you don't.
+
+### Remote file editing
+
+One thing that's really nice about terminal text editors is that it's no problem to use them in a remote shell.
+
+Geany handles this beautifully, as well. You can open remote files anywhere you have SSH access as easily as you can open files on your own machine.
+
+One frustration I had at first was I only seemed to be able to authenticate with a username and password, which was annoying, because certificates are so much nicer. It turned out that this was just me being a noob by keeping certificates in my home directory rather than in ~/.ssh.
+
+When editing Python scripts remotely, autocompletion doesn't work when you use packages installed on the server and not on your local machine. This isn't really that big a deal for me, but it's there.
+
+### In summary
+
+Text editors are such a personal preference that the right one will be different for different people.
+
+Geany is excellent if you already know what you want to write and want to just get on with it while enjoying plenty of useful shortcuts to speed up the menial parts.
+
+Geany is a great way to have your cake and eat it too.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/3/getting-started-geany-text-editor
+
+作者:[James Mawson][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/dxmjames
+[b]: https://github.com/lujun9972
+[1]: https://www.geany.org/
+[2]: https://www.geany.org/Download/ThirdPartyPackages
+[3]: https://opensource.com/resources/python
+[4]: https://en.wikipedia.org/wiki/IDLE
+[5]: https://blog.dxmtechsupport.com.au/linux-on-the-desktop-are-we-nearly-there-yet/
+[6]: https://www.gtk.org/
+[7]: https://www.geany.org/Main/AllFiletypes
+[8]: https://cscircles.cemc.uwaterloo.ca/11b-how-functions-work/
+[9]: https://plugins.geany.org/
diff --git a/sources/tech/20190311 Building the virtualization stack of the future with rust-vmm.md b/sources/tech/20190311 Building the virtualization stack of the future with rust-vmm.md
new file mode 100644
index 0000000000..b1e7fbf046
--- /dev/null
+++ b/sources/tech/20190311 Building the virtualization stack of the future with rust-vmm.md
@@ -0,0 +1,76 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Building the virtualization stack of the future with rust-vmm)
+[#]: via: (https://opensource.com/article/19/3/rust-virtual-machine)
+[#]: author: (Andreea Florescu )
+
+Building the virtualization stack of the future with rust-vmm
+======
+rust-vmm facilitates sharing core virtualization components between Rust Virtual Machine Monitors.
+
+
+More than a year ago we started developing [Firecracker][1], a virtual machine monitor (VMM) that runs on top of KVM (the kernel-based virtual machine). We wanted to create a lightweight VMM that starts virtual machines (VMs) in a fraction of a second, with a low memory footprint, to enable high-density cloud environments.
+
+We started out developing Firecracker by forking the Chrome OS VMM ([CrosVM][2]), but we diverged shortly after because we targeted different customer use cases. CrosVM provides Linux application isolation in ChromeOS, while Firecracker is used for running multi-tenant workloads at scale. Even though we now walk different paths, we still have common virtualization components, such as wrappers over KVM input/output controls (ioctls), a minimal kernel loader, and use of the [Virtio][3] device models.
+
+With this in mind, we started thinking about the best approach for sharing the common code. Having a shared codebase raises the security and quality bar for both projects. Currently, fixing security bugs requires duplicated work in terms of porting the changes from one project to the other and going through different review processes for merging the changes. After open sourcing Firecracker, we've received requests for adding features including GPU support and booting [bzImage][4] files. Some of the requests didn't align with Firecracker's goals, but were otherwise valid use cases that just haven't found the right place for an implementation.
+
+### The rust-vmm project
+
+The [rust-vmm][5] project came to life in December 2018 when Amazon, Google, Intel, and Red Hat employees started talking about the best way of sharing virtualization packages. More contributors have joined this initiative along the way. We are still at the beginning of this journey, with only one component published to [Crates.io][6] (Rust's package registry) and several others (such as Virtio devices, Linux kernel loaders, and KVM ioctls wrappers) being developed. With two VMMs written in Rust under active development and growing interest in building other specialized VMMs, rust-vmm was born as the host for sharing core virtualization components.
+
+The goal of rust-vmm is to enable the community to create custom VMMs that import just the required building blocks for their use case. We decided to organize rust-vmm as a multi-repository project, where each repository corresponds to an independent virtualization component. Each individual building block is published on Crates.io.
+
+### Creating custom VMMs with rust-vmm
+
+The components discussed below are currently under development.
+
+
+
+Each box on the right side of the diagram is a GitHub repository corresponding to one package, which in Rust is called a crate. The functionality of one crate can be further split into modules, for example virtio-devices. Let's have a look at these components and some of their potential use cases.
+
+ * **KVM interface:** Creating our VMM on top of KVM requires an interface that can invoke KVM functionality from Rust. The kvm-bindings crate represents the Rust Foreign Function Interface (FFI) to KVM kernel headers. Because headers only include structures and defines, we also have wrappers over the KVM ioctls (kvm-ioctls) that we use for opening dev/kvm, creating a VM, creating vCPUs, and so on.
+
+ * **Virtio devices and rate limiting:** Virtio has a frontend-backend architecture. Currently in rust-vmm, the frontend is implemented in the virtio-devices crate, and the backend lies in the vhost package. Vhost has support for both user-land and kernel-land drivers, but users can also plug virtio-devices to their custom backend. The virtio-bindings are the bindings for Virtio devices generated using the Virtio Linux headers. All devices in the virtio-devices crate are exported independently as modules using conditional compilation. Some devices, such as block, net, and vsock support rate limiting in terms of I/O per second and bandwidth. This can be achieved by using the functionality provided in the rate-limiter crate.
+
+ * The kernel-loader is responsible for loading the contents of an [ELF][7] kernel image in guest memory.
+
+
+
+
+For example, let's say we want to build a custom VMM that allows users to create and configure a single VM running on top of KVM. As part of the configuration, users will be able to specify the kernel image file, the root file system, the number of vCPUs, and the memory size. Creating and configuring the resources of the VM can be implemented using the kvm-ioctls crate. The kernel image can be loaded in guest memory with kernel-loader, and specifying a root filesystem can be achieved with the virtio-devices block module. The last thing needed for our VMM is writing VMM Glue, the code that takes care of integrating rust-vmm components with the VMM user interface, which allows users to create and manage VMs.
+
+### How you can help
+
+This is the beginning of an exciting journey, and we are looking forward to getting more people interested in VMMs, Rust, and the place where you can find both: [rust-vmm][5].
+
+We currently have [sync meetings][8] every two weeks to discuss the future of the rust-vmm organization. The meetings are open to anyone willing to participate. If you have any questions, please open an issue in the [community repository][9] or send an email to the rust-vmm [mailing list][10] (you can also [subscribe][11]). We also have a [Slack channel][12] and encourage you to join, if you are interested.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/3/rust-virtual-machine
+
+作者:[Andreea Florescu][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:
+[b]: https://github.com/lujun9972
+[1]: https://github.com/firecracker-microvm/firecracker
+[2]: https://chromium.googlesource.com/chromiumos/platform/crosvm/
+[3]: https://www.linux-kvm.org/page/Virtio
+[4]: https://en.wikipedia.org/wiki/Vmlinux#bzImage
+[5]: https://github.com/rust-vmm
+[6]: https://crates.io/
+[7]: https://en.wikipedia.org/wiki/Executable_and_Linkable_Format
+[8]: http://lists.opendev.org/pipermail/rust-vmm/2019-January/000103.html
+[9]: https://github.com/rust-vmm/community
+[10]: mailto:rust-vmm@lists.opendev.org
+[11]: http://lists.opendev.org/cgi-bin/mailman/listinfo/rust-vmm
+[12]: https://join.slack.com/t/rust-vmm/shared_invite/enQtNTI3NDM2NjA5MzMzLTJiZjUxOGEwMTJkZDVkYTcxYjhjMWU3YzVhOGQ0M2Y5NmU5MzExMjg5NGE3NjlmNzNhZDlhMmY4ZjVhYTQ4ZmQ
diff --git a/sources/tech/20190312 BackBox Linux for Penetration Testing.md b/sources/tech/20190312 BackBox Linux for Penetration Testing.md
new file mode 100644
index 0000000000..b79a4a5cee
--- /dev/null
+++ b/sources/tech/20190312 BackBox Linux for Penetration Testing.md
@@ -0,0 +1,200 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (BackBox Linux for Penetration Testing)
+[#]: via: (https://www.linux.com/blog/learn/2019/3/backbox-linux-penetration-testing)
+[#]: author: (Jack Wallen https://www.linux.com/users/jlwallen)
+
+BackBox Linux for Penetration Testing
+======
+
+
+Any given task can succeed or fail depending upon the tools at hand. For security engineers in particular, building just the right toolkit can make life exponentially easier. Luckily, with open source, you have a wide range of applications and environments at your disposal, ranging from simple commands to complicated and integrated tools.
+
+The problem with the piecemeal approach, however, is that you might wind up missing out on something that can make or break a job… or you waste a lot of time hunting down the right tools for the job. To that end, it’s always good to consider an operating system geared specifically for penetration testing (aka pentesting).
+
+Within the world of open source, the most popular pentesting distribution is [Kali Linux][1]. It is, however, not the only tool in the shop. In fact, there’s another flavor of Linux, aimed specifically at pentesting, called [BackBox][2]. BackBox is based on Ubuntu Linux, which also means you have easy access to a host of other outstanding applications besides those that are included, out of the box.
+
+### What Makes BackBox Special?
+
+BackBox includes a suite of ethical hacking tools, geared specifically toward pentesting. These testing tools include the likes of:
+
+ * Web application analysis
+
+ * Exploitation testing
+
+ * Network analysis
+
+ * Stress testing
+
+ * Privilege escalation
+
+ * Vulnerability assessment
+
+ * Computer forensic analysis and exploitation
+
+ * And much more
+
+
+
+
+Out of the box, one of the most significant differences between Kali Linux and BackBox is the number of installed tools. Whereas Kali Linux ships with hundreds of tools pre-installed, BackBox significantly limits that number to around 70. Nonetheless, BackBox includes many of the tools necessary to get the job done, such as:
+
+ * Ettercap
+
+ * Msfconsole
+
+ * Wireshark
+
+ * ZAP
+
+ * Zenmap
+
+ * BeEF Browser Exploitation
+
+ * Sqlmap
+
+ * Driftnet
+
+ * Tcpdump
+
+ * Cryptcat
+
+ * Weevely
+
+ * Siege
+
+ * Autopsy
+
+
+
+
+BackBox is in active development, the latest version (5.3) was released February 18, 2019. But how is BackBox as a usable tool? Let’s install and find out.
+
+### Installation
+
+If you’ve installed one Linux distribution, you’ve installed them all … with only slight variation. BackBox is pretty much the same as any other installation. [Download the ISO][3], burn the ISO onto a USB drive, boot from the USB drive, and click the Install icon.
+
+The installer (Figure 1) will be instantly familiar to anyone who has installed a Ubuntu or Debian derivative. Just because BackBox is a distribution geared specifically toward security administrators, doesn’t mean the operating system is a challenge to get up and running. In fact, BackBox is a point-and-click affair that anyone, regardless of skills, can install.
+
+![installation][5]
+
+Figure 1: The installation of BackBox will be immediately familiar to anyone.
+
+[Used with permission][6]
+
+The trickiest section of the installation is the Installation Type. As you can see (Figure 2), even this step is quite simple.
+
+![BackBox][8]
+
+Figure 2: Selecting the type of installation for BackBox.
+
+[Used with permission][6]
+
+Once you’ve installed BackBox, reboot the system, remove the USB drive, and wait for it to land on the login screen. Log into the desktop and you’re ready to go (Figure 3).
+
+![desktop][10]
+
+Figure 3: The BackBox Linux desktop, running as a VirtualBox virtual machine.
+
+[Used with permission][6]
+
+### Using BackBox
+
+Thanks to the [Xfce desktop environment][11], BackBox is easy enough for a Linux newbie to navigate. Click on the menu button in the top left corner to reveal the menu (Figure 4).
+
+![desktop menu][13]
+
+Figure 4: The BackBox desktop menu in action.
+
+[Used with permission][6]
+
+From the desktop menu, click on any one of the favorites (in the left pane) or click on a category to reveal the related tools (Figure 5).
+
+![Auditing][15]
+
+Figure 5: The Auditing category in the BackBox menu.
+
+[Used with permission][6]
+
+The menu entries you’ll most likely be interested in are:
+
+ * Anonymous - allows you to start an anonymous networking session.
+
+ * Auditing - the majority of the pentesting tools are found in here.
+
+ * Services - allows you to start/stop services such as Apache, Bluetooth, Logkeys, Networking, Polipo, SSH, and Tor.
+
+
+
+
+Before you run any of the testing tools, I would recommend you first making sure to update and upgrade BackBox. This can be done via a GUI or the command line. If you opt to go the GUI route, click on the desktop menu, click System, and click Software Updater. When the updater completes its check for updates, it will prompt you if any are available, or if (after an upgrade) a reboot is necessary (Figure 6).
+
+![reboot][17]
+
+Figure 6: Time to reboot after an upgrade.
+
+[Used with permission][6]
+
+Should you opt to go the manual route, open a terminal window and issue the following two commands:
+
+```
+sudo apt-get update
+
+sudo apt-get upgrade -y
+```
+
+Many of the BackBox pentesting tools do require a solid understanding of how each tool works, so before you attempt to use any given tool, make sure you know how to use said tool. Some tools (such as Metasploit) are made a bit easier to work with, thanks to BackBox. To run Metasploit, click on the desktop menu button and click msfconsole from the favorites (left pane). When the tool opens for the first time, you’ll be asked to configure a few options. Simply select each default given by clicking your keyboard Enter key when prompted. Once you see the Metasploit prompt, you can run commands like:
+
+```
+db_nmap 192.168.0/24
+```
+
+The above command will list out all discovered ports on a 192.168.1.x network scheme (Figure 7).
+
+![Metasploit][19]
+
+Figure 7: Open port discovery made simple with Metasploit on BackBox.
+
+[Used with permission][6]
+
+Even often-challenging tools like Metasploit are made far easier than they are with other distributions (partially because you don’t have to bother with installing the tools). That alone is worth the price of entry for BackBox (which is, of course, free).
+
+### The Conclusion
+
+Although BackBox usage may not be as widespread as Kali Linux, it still deserves your attention. For anyone looking to do pentesting on their various environments, BackBox makes the task far easier than so many other operating systems. Give this Linux distribution a go and see if it doesn’t aid you in your journey to security nirvana.
+
+--------------------------------------------------------------------------------
+
+via: https://www.linux.com/blog/learn/2019/3/backbox-linux-penetration-testing
+
+作者:[Jack Wallen][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.linux.com/users/jlwallen
+[b]: https://github.com/lujun9972
+[1]: https://www.kali.org/
+[2]: https://linux.backbox.org/
+[3]: https://www.backbox.org/download/
+[4]: /files/images/backbox1jpg
+[5]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/backbox_1.jpg?itok=pn4fQVp7 (installation)
+[6]: /licenses/category/used-permission
+[7]: /files/images/backbox2jpg
+[8]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/backbox_2.jpg?itok=tf-1zo8Z (BackBox)
+[9]: /files/images/backbox3jpg
+[10]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/backbox_3.jpg?itok=GLowoAUb (desktop)
+[11]: https://www.xfce.org/
+[12]: /files/images/backbox4jpg
+[13]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/backbox_4.jpg?itok=VmQXtuZL (desktop menu)
+[14]: /files/images/backbox5jpg
+[15]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/backbox_5.jpg?itok=UnfM_OxG (Auditing)
+[16]: /files/images/backbox6jpg
+[17]: https://www.linux.com/sites/lcom/files/styles/floated_images/public/backbox_6.jpg?itok=2t1BiKPn (reboot)
+[18]: /files/images/backbox7jpg
+[19]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/backbox_7.jpg?itok=Vw_GEub3 (Metasploit)
diff --git a/sources/tech/20190312 Star LabTop Mk III Open Source Edition- An Interesting Laptop.md b/sources/tech/20190312 Star LabTop Mk III Open Source Edition- An Interesting Laptop.md
new file mode 100644
index 0000000000..2e4b8f098a
--- /dev/null
+++ b/sources/tech/20190312 Star LabTop Mk III Open Source Edition- An Interesting Laptop.md
@@ -0,0 +1,93 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Star LabTop Mk III Open Source Edition: An Interesting Laptop)
+[#]: via: (https://itsfoss.com/star-labtop-open-source-edition)
+[#]: author: (Ankush Das https://itsfoss.com/author/ankush/)
+
+Star LabTop Mk III Open Source Edition: An Interesting Laptop
+======
+
+[Star Labs Systems][1] have been producing Laptops tailored for Linux for some time. While you can purchase other variants available on their website, they have recently launched a [Kickstarter campaign][2] for their upcoming ‘Open Source Edition’ laptop that incorporates more features as per the requests by the users or reviewers.
+
+It may not be the best laptop you’ve ever come across for around a **1000 Euros** – but it certainly is interesting for some specific features.
+
+In this article, we will talk about what makes it an interesting deal and whether or not it’s worth investing for.
+
+![star labtop mk III][3]
+
+### Key Highlight: Open-source Coreboot Firmware
+
+Normally, you will observe proprietary firmware (BIOS) on computers, American Megatrends Inc, for example.
+
+But, here, Star Labs have tailored the [coreboot firmware][4] (a.k.a known as the LinuxBIOS) which is an open source alternative to proprietary solutions for this laptop.
+
+Not just open source but it is also a lighter firmware for better control over your laptop. With [TianoCore EDK II][5], it ensures that you get the maximum compatibility for most of the major Operating Systems.
+
+### Other Features of Star LabTop Mk III
+
+![sat labtop mk III][6]
+
+In addition to the open source firmware, the laptop features an **8th-gen i7 chipse** t ( **i7-8550u** ) coupled with **16 Gigs of LPDDR4 RAM** clocked at **2400 MHz**.
+
+The GPU being the integrated **Intel UHD Graphics 620** should be enough for professional tasks – except video editing and gaming. It will be rocking a **Full HD 13.3-inch IPS** panel as the display.
+
+The storage option includes **480 GB or 960 GB of PCIe SSD** – which is impressive as well. In addition to all this, it comes with the **USB Type-C** support.
+
+Interestingly, the **BIOS, Embedded Controller and SSD** will be receiving automatic [firmware updates][7] via the [LVFS][8] (the Mk III standard edition has this feature already).
+
+You should also check out a review video of [Star LabTob Mk III][9] to get an idea of how the open source edition could look like:
+
+If you are curious about the detailed tech specs, you should check out the [Kickstarter page][2].
+
+
+
+### Our Opinion
+
+![star labtop mk III][10]
+
+The inclusion of coreboot firmware and being something tailored for various Linux distributions originally is the reason why it is being termed as the “ **Open Source Edition”**.
+
+The price for the ultimate bundle on Kickstarter is **1087 Euros**.
+
+Can you get better laptop deals at this price? **Yes** , definitely. But, it really comes down to your preference and your passion for open source – of what you require.
+
+However, if you want a performance-driven laptop specifically tailored for Linux, yes, this is an option you might want to consider with something new to offer (and potentially considering your requests for their future builds).
+
+Of course, you cannot consider this for video editing and gaming – for obvious reasons. So, they should considering adding a dedicated GPU to make it a complete package for computing, gaming, video editing and much more. Maybe even a bigger screen, say 15.6-inch?
+
+### Wrapping Up
+
+For what it is worth, if you are a Linux and open source enthusiast and want a performance-driven laptop, this could be an option to go with and back this up on Kickstarter right now.
+
+What do you think about it? Will you be interested in a laptop like this? If not, why?
+
+Let us know your thoughts in the comments below.
+
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/star-labtop-open-source-edition
+
+作者:[Ankush Das][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/ankush/
+[b]: https://github.com/lujun9972
+[1]: https://starlabs.systems
+[2]: https://www.kickstarter.com/projects/starlabs/star-labtop-mk-iii-open-source-edition
+[3]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/star-labtop-mkiii-2.jpg?resize=800%2C450&ssl=1
+[4]: https://en.wikipedia.org/wiki/Coreboot
+[5]: https://github.com/tianocore/tianocore.github.io/wiki/EDK-II
+[6]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/03/star-labtop-mkiii-1.jpg?ssl=1
+[7]: https://itsfoss.com/update-firmware-ubuntu/
+[8]: https://fwupd.org/
+[9]: https://starlabs.systems/pages/star-labtop
+[10]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/star-labtop-mkiii.jpg?resize=800%2C435&ssl=1
+[11]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/star-labtop-mkiii-2.jpg?fit=800%2C450&ssl=1
diff --git a/sources/tech/20190313 Game Review- Steel Rats is an Enjoyable Bike-Combat Game.md b/sources/tech/20190313 Game Review- Steel Rats is an Enjoyable Bike-Combat Game.md
new file mode 100644
index 0000000000..5af0ae30d3
--- /dev/null
+++ b/sources/tech/20190313 Game Review- Steel Rats is an Enjoyable Bike-Combat Game.md
@@ -0,0 +1,95 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Game Review: Steel Rats is an Enjoyable Bike-Combat Game)
+[#]: via: (https://itsfoss.com/steel-rats)
+[#]: author: (Ankush Das https://itsfoss.com/author/ankush/)
+
+Game Review: Steel Rats is an Enjoyable Bike-Combat Game
+======
+
+Steel Rats is a quite impressive 2.5D motorbike combat game with exciting stunts involved. It was already available for Windows on [Steam][1] – however, recently it has been made available for Linux and Mac as well.
+
+In case you didn’t know, you can easily [install Steam on Ubuntu][2] or other distributions and [enable Steam Play feature to run some Windows games on Linux][3].
+
+So, in this article, we shall take a look at what the game is all about and if it is a good purchase for you.
+
+This game is neither free nor open source. We have covered it here because the game developers made an effort to port it to Linux.
+
+### Story Overview
+
+![steel rats][4]
+
+You belong to a biker gang – “ **Steel Rats** ” – who stepped up to protect their city from alien robots invasion. The alien robots aren’t just any tiny toys that you can easily defeat but with deadly weapons and abilities.
+
+The games features the setting as an alternative version of 1940’s USA – with the retro theme in place. You have to use your bike as the ultimate weapon to go against waves of alien robot and boss fights as well.
+
+You will encounter 4 different characters with unique abilities to switch from after progressing through a couple of rounds.
+
+You will start playing as “ **Toshi** ” and unlock other characters as you progress. **Toshi** is a genius and will be using a drone as his gadget to fight the alien robots. **James** – is the leader with the hammer attack as his special ability. **Lisa** would be the one utilizing fire to burn the junk robots. And, **Randall** will have his harpoon ready to destroy aerial robots with ease.
+
+### Gameplay
+
+![][5]
+
+Honestly, I am not a fan of 2.5 D (or 2D games). But, games like [Unravel][6] will be the exception – which is still not available for Linux, such a shame – EA.
+
+In this case, I did end up enjoying “ **Steel Rats** ” as one of the few 2D games I play.
+
+There is really no rocket science for this game – you just have to get good with the controls. No matter whether you use a controller or a keyboard, it is definitely challenging to get comfortable with the controls.
+
+You do not need to plan ahead in order to save your health or nitro boost because you will always have it when needed while also having checkpoints to resume your progress.
+
+You just need to keep the right pace and the perfect jump while hitting every enemy to get the best score in the leader boards. Once you do that, the game ends up being an easy and fun experience.
+
+If you’re curious about the gameplay, we recommend watching this video:
+
+
+#[wasm_bindgen]
+// This is pretty plain Rust code. If you've written Rust before this
+// should look extremely familiar. If not, why wait?! Check this out:
+//
+pub fn excited_greeting(original: &str) -> String {
+format!("HELLO, {}", original.to_uppercase())
+}
+```
+
+Second, we'll have to make two changes to our **Cargo.toml** configuration file:
+
+ * Add **wasm_bindgen** as a dependency.
+ * Configure the type of library binary to be a **cdylib** or dynamic system library. In this case, our system is **wasm** , and setting this option is how we produce **.wasm** binary files.
+
+
+```
+[package]
+name = "my-wasm-library"
+version = "0.1.0"
+authors = ["$YOUR_INFO"]
+edition = "2018"
+
+[lib]
+crate-type = ["cdylib", "rlib"]
+
+[dependencies]
+wasm-bindgen = "0.2.33"
+```
+
+Now let's build! If we just use **cargo build** , we'll get a **.wasm** binary, but in order to make it easy to call our Rust code from JavaScript, we'd like to have some JavaScript code that converts rich JavaScript types like strings and objects to pointers and passes these pointers to the Wasm module on our behalf. Doing this manually is tedious and prone to bugs.
+
+Luckily, in addition to being a library, **wasm-bindgen** also has the ability to create this "glue" JavaScript for us. This means in our code we can interact with our Wasm module using normal JavaScript types, and the generated code from **wasm-bindgen** will do the dirty work of converting these rich types into the pointer types that Wasm actually understands.
+
+We can use the awesome **wasm-pack** to build our Wasm binary, invoke the **wasm-bindgen** CLI tool, and package all of our JavaScript (and any optional generated TypeScript types) into one nice and neat package. Let's do that now!
+
+First we'll need to install **wasm-pack** :
+
+```
+$ cargo install wasm-pack
+```
+
+By default, **wasm-bindgen** produces ES6 modules. We'll use our code from a simple script tag, so we just want it to produce a plain old JavaScript object that gives us access to our Wasm functions. To do this, we'll pass it the **\--target no-modules** option.
+
+```
+$ wasm-pack build --target no-modules
+```
+
+We now have a **pkg** directory in our project. If we look at the contents, we'll see the following:
+
+ * **package.json** : useful if we want to package this up as an NPM module
+ * **my_wasm_library_bg.wasm** : our actual Wasm code
+ * **my_wasm_library.js** : the JavaScript "glue" code
+ * Some TypeScript definition files
+
+
+
+Now we can create an **index.html** file that will make use of our JavaScript and Wasm:
+
+```
+<[html][9]>
+<[head][10]>
+<[meta][11] content="text/html;charset=utf-8" http-equiv="Content-Type" />
+[head][10]>
+<[body][12]>
+
+<[script][13] src='./pkg/my_wasm_library.js'>[script][13]>
+
+<[script][13]>
+window.addEventListener('load', async () => {
+// Load the wasm file
+await wasm_bindgen('./pkg/my_wasm_library_bg.wasm');
+// Once it's loaded the `wasm_bindgen` object is populated
+// with the functions defined in our Rust code
+const greeting = wasm_bindgen.excited_greeting("Ryan")
+console.log(greeting)
+});
+[script][13]>
+[body][12]>
+[html][9]>
+```
+
+You may be tempted to open the HTML file in your browser, but unfortunately, this is not possible. For security reasons, Wasm files have to be served from the same domain as the HTML file. You'll need an HTTP server. If you have a favorite static HTTP server that can serve files from your filesystem, feel free to use that. I like to use [**basic-http-server**][14], which you can install and run like so:
+
+```
+$ cargo install basic-http-server
+$ basic-http-server
+```
+
+Now open the **index.html** file through the web server by going to **** and check your JavaScript console. You should see a very exciting greeting there!
+
+If you have any questions, please [let me know][15]. Next time, we'll take a look at how we can use various browser and JavaScript APIs from within our Rust code.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/3/calling-rust-javascript
+
+作者:[Ryan Levick][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/ryanlevick
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/javascript_vim.jpg?itok=mqkAeakO (JavaScript in Vim)
+[2]: https://opensource.com/article/19/2/why-use-rust-webassembly
+[3]: https://rustup.rs/
+[4]: https://doc.rust-lang.org/cargo/
+[5]: https://github.com/rustwasm/wasm-bindgen
+[6]: https://github.com/koute/stdweb
+[7]: https://github.com/koute/stdweb/issues/318
+[8]: https://www.rust-lang.org/governance/wgs/wasm
+[9]: http://december.com/html/4/element/html.html
+[10]: http://december.com/html/4/element/head.html
+[11]: http://december.com/html/4/element/meta.html
+[12]: http://december.com/html/4/element/body.html
+[13]: http://december.com/html/4/element/script.html
+[14]: https://github.com/brson/basic-http-server
+[15]: https://twitter.com/ryan_levick
diff --git a/sources/tech/20190318 Install MEAN.JS Stack In Ubuntu 18.04 LTS.md b/sources/tech/20190318 Install MEAN.JS Stack In Ubuntu 18.04 LTS.md
new file mode 100644
index 0000000000..925326e0d7
--- /dev/null
+++ b/sources/tech/20190318 Install MEAN.JS Stack In Ubuntu 18.04 LTS.md
@@ -0,0 +1,266 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Install MEAN.JS Stack In Ubuntu 18.04 LTS)
+[#]: via: (https://www.ostechnix.com/install-mean-js-stack-ubuntu/)
+[#]: author: (sk https://www.ostechnix.com/author/sk/)
+
+Install MEAN.JS Stack In Ubuntu 18.04 LTS
+======
+
+![Install MEAN.JS Stack][1]
+
+**MEAN.JS** is an Open-Source, full-Stack JavaScript solution for building fast, and robust web applications. **MEAN.JS** stack consists of **MongoDB** (NoSQL database), **ExpressJs** (NodeJS server-side application web framework), **AngularJS** (Client-side web application framework), and **Node.js** (JavaScript run-time, popular for being a web server platform). In this tutorial, we will be discussing how to install MEAN.JS stack in Ubuntu. This guide was tested in Ubuntu 18.04 LTS server. However, it should work on other Ubuntu versions and Ubuntu variants.
+
+### Install MongoDB
+
+**MongoDB** is a free, cross-platform, open source, NoSQL document-oriented database. To install MongoDB on your Ubuntu system, refer the following guide:
+
+ * [**Install MongoDB Community Edition In Linux**][2]
+
+
+
+### Install Node.js
+
+**NodeJS** is an open source, cross-platform, and lightweight JavaScript run-time environment that can be used to build scalable network applications.
+
+To install NodeJS on your system, refer the following guide:
+
+ * [**How To Install NodeJS On Linux**][3]
+
+
+
+After installing, MongoDB, and Node.js, we need to install the other required components such as **Yarn** , **Grunt** , and **Gulp** for MEAN.js stack.
+
+### Install Yarn package manager
+
+Yarn is a package manager used by MEAN.JS stack to manage front-end packages.
+
+To install Bower, run the following command:
+
+```
+$ npm install -g yarn
+```
+
+### Install Grunt Task Runner
+
+Grunt Task Runner is used to to automate the development process.
+
+To install Grunt, run:
+
+```
+$ npm install -g grunt-cli
+```
+
+To verify if Yarn and Grunt have been installed, run:
+
+```
+$ npm list -g --depth=0 /home/sk/.nvm/versions/node/v11.11.0/lib ├── [email protected] ├── [email protected] └── [email protected]
+```
+
+### Install Gulp Task Runner (Optional)
+
+This is optional. You can use Gulp instead of Grunt. To install Gulp Task Runner, run the following command:
+
+```
+$ npm install -g gulp
+```
+
+We have installed all required prerequisites. Now, let us deploy MEAN.JS stack.
+
+### Download and Install MEAN.JS Stack
+
+Install Git if it is not installed already:
+
+```
+$ sudo apt-get install git
+```
+
+Next, git clone the MEAN.JS repository with command:
+
+```
+$ git clone https://github.com/meanjs/mean.git meanjs
+```
+
+**Sample output:**
+
+```
+Cloning into 'meanjs'...
+remote: Counting objects: 8596, done.
+remote: Compressing objects: 100% (12/12), done.
+remote: Total 8596 (delta 3), reused 0 (delta 0), pack-reused 8584 Receiving objects: 100% (8596/8596), 2.62 MiB | 140.00 KiB/s, done.
+Resolving deltas: 100% (4322/4322), done.
+Checking connectivity... done.
+```
+
+The above command will clone the latest version of the MEAN.JS repository to **meanjs** folder in your current working directory.
+
+Go to the meanjs folder:
+
+```
+$ cd meanjs/
+```
+
+Run the following command to install the Node.js dependencies required for testing and running our application:
+
+```
+$ npm install
+```
+
+This will take some time. Please be patient.
+
+* * *
+
+**Troubleshooting:**
+
+When I run the above command in Ubuntu 18.04 LTS, I get the following error:
+
+```
+Downloading binary from https://github.com/sass/node-sass/releases/download/v4.5.3/linux-x64-67_binding.node
+Cannot download "https://github.com/sass/node-sass/releases/download/v4.5.3/linux-x64-67_binding.node":
+
+HTTP error 404 Not Found
+
+[....]
+```
+
+If you ever get these type of common errors like “node-sass and gulp-sass”, do the following:
+
+First uninstall the project and global gulp-sass modules using the following commands:
+
+```
+$ npm uninstall gulp-sass
+$ npm uninstall -g gulp-sass
+```
+
+Next uninstall the global node-sass module:
+
+```
+$ npm uninstall -g node-sass
+```
+
+Install the global node-sass first. Then install the gulp-sass module at the local project level.
+
+```
+$ npm install -g node-sass
+$ npm install gulp-sass
+```
+
+Now try the npm install again from the project folder using command:
+
+```
+$ npm install
+```
+
+Now all dependencies will start to install without any issues.
+
+* * *
+
+Once all dependencies are installed, run the following command to install all the front-end modules needed for the application:
+
+```
+$ yarn --allow-root --config.interactive=false install
+```
+
+Or,
+
+```
+$ yarn --allow-root install
+```
+
+You will see the following message at the end if the installation is successful.
+
+```
+[...]
+> meanjs@0.6.0 snyk-protect /home/sk/meanjs
+> snyk protect
+
+Successfully applied Snyk patches
+
+Done in 99.47s.
+```
+
+### Test MEAN.JS
+
+MEAN.JS stack has been installed. We can now able to start a sample application using command:
+
+```
+$ npm start
+```
+
+After a few seconds, you will see a message like below. This means MEAN.JS stack is working!
+
+```
+[...]
+MEAN.JS - Development Environment
+
+Environment: development
+Server: http://0.0.0.0:3000
+Database: mongodb://localhost/mean-dev
+App version: 0.6.0
+MEAN.JS version: 0.6.0
+```
+
+![][4]
+
+To verify, open up the browser and navigate to **** or ****. You should see a screen something like below.
+
+![][5]
+
+Mean stack test page
+
+Congratulations! MEAN.JS stack is ready to start building web applications.
+
+For further details, I recommend you to refer **[MEAN.JS stack official documentation][6]**.
+
+* * *
+
+Want to setup MEAN.JS stack in CentOS, RHEL, Scientific Linux? Check the following link for more details.
+
+ * **[Install MEAN.JS Stack in CentOS 7][7]**
+
+
+
+* * *
+
+And, that’s all for now, folks. Hope this tutorial will help you to setup MEAN.JS stack.
+
+If you find this tutorial useful, please share it on your social, professional networks and support OSTechNix.
+
+More good stuffs to come. Stay tuned!
+
+Cheers!
+
+**Resources:**
+
+ * **[MEAN.JS website][8]**
+ * [**MEAN.JS GitHub Repository**][9]
+
+
+
+
+
+--------------------------------------------------------------------------------
+
+via: https://www.ostechnix.com/install-mean-js-stack-ubuntu/
+
+作者:[sk][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.ostechnix.com/author/sk/
+[b]: https://github.com/lujun9972
+[1]: data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7
+[2]: https://www.ostechnix.com/install-mongodb-linux/
+[3]: https://www.ostechnix.com/install-node-js-linux/
+[4]: http://www.ostechnix.com/wp-content/uploads/2016/03/meanjs.png
+[5]: http://www.ostechnix.com/wp-content/uploads/2016/03/mean-stack-test-page.png
+[6]: http://meanjs.org/docs.html
+[7]: http://www.ostechnix.com/install-mean-js-stack-centos-7/
+[8]: http://meanjs.org/
+[9]: https://github.com/meanjs/mean
diff --git a/sources/tech/20190318 Let-s try dwm - dynamic window manager.md b/sources/tech/20190318 Let-s try dwm - dynamic window manager.md
new file mode 100644
index 0000000000..48f44a33cb
--- /dev/null
+++ b/sources/tech/20190318 Let-s try dwm - dynamic window manager.md
@@ -0,0 +1,150 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Let’s try dwm — dynamic window manager)
+[#]: via: (https://fedoramagazine.org/lets-try-dwm-dynamic-window-manger/)
+[#]: author: (Adam Šamalík https://fedoramagazine.org/author/asamalik/)
+
+Let’s try dwm — dynamic window manager
+======
+
+![][1]
+
+If you like efficiency and minimalism, and are looking for a new window manager for your Linux desktop, you should try _dwm_ — dynamic window manager. Written in under 2000 standard lines of code, dwm is extremely fast yet powerful and highly customizable window manager.
+
+You can dynamically choose between tiling, monocle and floating layouts, organize your windows into multiple workspaces using tags, and quickly navigate through using keyboard shortcuts. This article helps you get started using dwm.
+
+## **Installation**
+
+To install dwm on Fedora, run:
+
+```
+$ sudo dnf install dwm dwm-user
+```
+
+The _dwm_ package installs the window manager itself, and the _dwm-user_ package significantly simplifies configuration which will be explained later in this article.
+
+Additionally, to be able to lock the screen when needed, we’ll also install _slock_ — a simple X display locker.
+
+```
+$ sudo dnf install slock
+```
+
+However, you can use a different one based on your personal preference.
+
+## **Quick start**
+
+To start dwm, choose the _dwm-user_ option on the login screen.
+
+![][2]
+
+After you log in, you’ll see a very simple desktop. In fact, the only thing there will be a bar at the top listing our nine tags that represent workspaces and a _[]=_ symbol that represents the layout of your windows.
+
+### Launching applications
+
+Before looking into the layouts, first launch some applications so you can play with the layouts as you go. Apps can be started by pressing _Alt+p_ and typing the name of the app followed by _Enter_. There’s also a shortcut _Alt+Shift+Enter_ for opening a terminal.
+
+Now that some apps are running, have a look at the layouts.
+
+### Layouts
+
+There are three layouts available by default: the tiling layout, the monocle layout, and the floating layout.
+
+The tiling layout, represented by _[]=_ on the bar, organizes windows into two main areas: master on the left, and stack on the right. You can activate the tiling layout by pressing _Alt+t._
+
+![][3]
+
+The idea behind the tiling layout is that you have your primary window in the master area while still seeing the other ones in the stack. You can quickly switch between them as needed.
+
+To swap windows between the two areas, hover your mouse over one in the stack area and press _Alt+Enter_ to swap it with the one in the master area.
+
+![][4]
+
+The monocle layout, represented by _[N]_ on the top bar, makes your primary window take the whole screen. You can switch to it by pressing _Alt+m_.
+
+Finally, the floating layout lets you move and resize your windows freely. The shortcut for it is _Alt+f_ and the symbol on the top bar is _> <>_.
+
+### Workspaces and tags
+
+Each window is assigned to a tag (1-9) listed at the top bar. To view a specific tag, either click on its number using your mouse or press _Alt+1..9._ You can even view multiple tags at once by clicking on their number using the secondary mouse button.
+
+Windows can be moved between different tags by highlighting them using your mouse, and pressing _Alt+Shift+1..9._
+
+## **Configuration**
+
+To make dwm as minimalistic as possible, it doesn’t use typical configuration files. Instead, you modify a C header file representing the configuration, and recompile it. But don’t worry, in Fedora it’s as simple as just editing one file in your home directory and everything else happens in the background thanks to the _dwm-user_ package provided by the maintainer in Fedora.
+
+First, you need to copy the file into your home directory using a command similar to the following:
+
+```
+$ mkdir ~/.dwm
+$ cp /usr/src/dwm-VERSION-RELEASE/config.def.h ~/.dwm/config.h
+```
+
+You can get the exact path by running _man dwm-start._
+
+Second, just edit the _~/.dwm/config.h_ file. As an example, let’s configure a new shortcut to lock the screen by pressing _Alt+Shift+L_.
+
+Considering we’ve installed the _slock_ package mentioned earlier in this post, we need to add the following two lines into the file to make it work:
+
+Under the _/* commands */_ comment, add:
+
+```
+static const char *slockcmd[] = { "slock", NULL };
+```
+
+And the following line into _static Key keys[]_ :
+
+```
+{ MODKEY|ShiftMask, XK_l, spawn, {.v = slockcmd } },
+```
+
+In the end, it should look like as follows: (added lines are highlighted)
+
+```
+...
+ /* commands */
+ static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */
+ static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", normbgcolor, "-nf", normfgcolor, "-sb", selbgcolor, "-sf", selfgcolor, NULL };
+ static const char *termcmd[] = { "st", NULL };
+ static const char *slockcmd[] = { "slock", NULL };
+
+ static Key keys[] = {
+ /* modifier key function argument */
+ { MODKEY|ShiftMask, XK_l, spawn, {.v = slockcmd } },
+ { MODKEY, XK_p, spawn, {.v = dmenucmd } },
+ { MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } },
+ ...
+```
+
+Save the file.
+
+Finally, just log out by pressing _Alt+Shift+q_ and log in again. The scripts provided by the _dwm-user_ package will recognize that you have changed the _config.h_ file in your home directory and recompile dwm on login. And becuse dwm is so tiny, it’s fast enough you won’t even notice it.
+
+You can try locking your screen now by pressing _Alt+Shift+L_ , and then logging back in again by typing your password and pressing enter.
+
+## **Conclusion**
+
+If you like minimalism and want a very fast yet powerful window manager, dwm might be just what you’ve been looking for. However, it probably isn’t for beginners. There might be a lot of additional configuration you’ll need to do in order to make it just as you like it.
+
+To learn more about dwm, see the project’s homepage at .
+
+--------------------------------------------------------------------------------
+
+via: https://fedoramagazine.org/lets-try-dwm-dynamic-window-manger/
+
+作者:[Adam Šamalík][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://fedoramagazine.org/author/asamalik/
+[b]: https://github.com/lujun9972
+[1]: https://fedoramagazine.org/wp-content/uploads/2019/03/dwm-magazine-image-816x345.png
+[2]: https://fedoramagazine.org/wp-content/uploads/2019/03/choosing-dwm-1024x469.png
+[3]: https://fedoramagazine.org/wp-content/uploads/2019/03/dwm-desktop-1024x593.png
+[4]: https://fedoramagazine.org/wp-content/uploads/2019/03/Screenshot-2019-03-15-at-11.12.32-1024x592.png
diff --git a/sources/tech/20190318 Solus 4 ‘Fortitude- Released with Significant Improvements.md b/sources/tech/20190318 Solus 4 ‘Fortitude- Released with Significant Improvements.md
new file mode 100644
index 0000000000..c7a8d4bc55
--- /dev/null
+++ b/sources/tech/20190318 Solus 4 ‘Fortitude- Released with Significant Improvements.md
@@ -0,0 +1,108 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Solus 4 ‘Fortitude’ Released with Significant Improvements)
+[#]: via: (https://itsfoss.com/solus-4-release)
+[#]: author: (Ankush Das https://itsfoss.com/author/ankush/)
+
+Solus 4 ‘Fortitude’ Released with Significant Improvements
+======
+
+Finally, after a year of work, the much anticipated Solus 4 is here. It’s a significant release not just because this is a major upgrade, but also because this is the first major release after [Ikey Doherty (the founder of Solus) left the project][1] a few months ago.
+
+Now that everything’s under control with the new _management_ , **Solus 4 Fortitude** with updated Budgie desktop and other significant improvements has officially released.
+
+### What’s New in Solus 4
+
+![Solus 4 Fortitude][2]
+
+#### Core Improvements
+
+Solus 4 comes loaded with **[Linux Kernel 4.20.16][3]** which enables better hardware support (like Touchpad support, improved support for Intel Coffee Lake and Ice Lake CPUs, and for AMD Picasso & Raven2 APUs).
+
+This release also ships with the latest [FFmpeg 4.1.1][4]. Also, they have enabled the support for [dav1d][5] in [VLC][6] – which is an open source AV1 decoder. So, you can consider these upgrades to significantly improve the Multimedia experience.
+
+It also includes some minor fixes to the Software Center – if you were encountering any issues while finding an application or viewing the description.
+
+In addition, WPS Office has been removed from the listing.
+
+#### UI Improvements
+
+![Budgie 10.5][7]
+
+The Budgie desktop update includes some minor changes and also comes baked in with the [Plata (Noir) GTK Theme.][8]
+
+You will no longer observe same applications multiple times in the menu, they’ve fixed this. They have also introduced a “ **Caffeine** ” mode as applet which prevents the system from suspending, locking the screen or changing the brightness while you are working. You can schedule the time accordingly.
+
+![Caffeine Mode][9]
+
+The new Budgie desktop experience also adds quick actions to the app icons on the task bar, dubbed as “ **Icon Tasklist** “. It makes it easy to manage the active tabs on a browser or the actions to minimize and move it to a new workplace (as shown in the image below).
+
+![Icon Tasklist][10]
+
+As the [change log][11] mentions, the above pop over design lets you do more:
+
+ * _Close all instances of the selected application_
+ * _Easily access per-window controls for marking it always on top, maximizing / unmaximizing, minimizing, and moving it to various workspaces._
+ * _Quickly favorite / unfavorite apps_
+ * _Quickly launch a new instance of the selected application_
+ * _Scroll up or down on an IconTasklist button when a single window is open to activate and bring it into focus, or minimize it, based on the scroll direction._
+ * _Toggle to minimize and unminimize various application windows_
+
+
+
+The notification area now groups the notifications from specific applications instead of piling it all up. So, that’s a good improvement.
+
+In addition to these, the sound widget got some cool improvements while letting you personalize the look and feel of your desktop in an efficient manner.
+
+To know about all the nitty-gritty details, do refer the official [release note][11]s.
+
+### Download Solus 4
+
+You can get the latest version of Solus from its download page below. It is available in the default Budgie, GNOME and MATE desktop flavors.
+
+[Get Solus 4][12]
+
+### Wrapping Up**
+
+Solus 4 is definitely an impressive upgrade – without introducing any unnecessary fancy features but by adding only the useful ones, subtle changes.
+
+What do you think about the latest Solus 4 Fortitude? Have you tried it yet?
+
+Let us know your thoughts in the comments below.
+
+
+
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/solus-4-release
+
+作者:[Ankush Das][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/ankush/
+[b]: https://github.com/lujun9972
+[1]: https://itsfoss.com/ikey-leaves-solus/
+[2]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/03/solus-4-featured.jpg?fit=800%2C450&ssl=1
+[3]: https://itsfoss.com/kernel-4-20-release/
+[4]: https://www.ffmpeg.org/
+[5]: https://code.videolan.org/videolan/dav1d
+[6]: https://www.videolan.org/index.html
+[7]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/03/Budgie-desktop.jpg?resize=800%2C450&ssl=1
+[8]: https://gitlab.com/tista500/plata-theme
+[9]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/03/caffeine-mode.jpg?ssl=1
+[10]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/03/IconTasklistPopover.jpg?ssl=1
+[11]: https://getsol.us/2019/03/17/solus-4-released/
+[12]: https://getsol.us/download/
+[13]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/03/Budgie-desktop.jpg?fit=800%2C450&ssl=1
+[14]: https://www.facebook.com/sharer.php?t=Solus%204%20%E2%80%98Fortitude%E2%80%99%20Released%20with%20Significant%20Improvements&u=https%3A%2F%2Fitsfoss.com%2Fsolus-4-release%2F
+[15]: https://twitter.com/intent/tweet?text=Solus+4+%E2%80%98Fortitude%E2%80%99+Released+with+Significant+Improvements&url=https%3A%2F%2Fitsfoss.com%2Fsolus-4-release%2F&via=itsfoss2
+[16]: https://www.linkedin.com/shareArticle?title=Solus%204%20%E2%80%98Fortitude%E2%80%99%20Released%20with%20Significant%20Improvements&url=https%3A%2F%2Fitsfoss.com%2Fsolus-4-release%2F&mini=true
+[17]: https://www.reddit.com/submit?title=Solus%204%20%E2%80%98Fortitude%E2%80%99%20Released%20with%20Significant%20Improvements&url=https%3A%2F%2Fitsfoss.com%2Fsolus-4-release%2F
diff --git a/sources/tech/20190319 Blockchain 2.0- Blockchain In Real Estate -Part 4.md b/sources/tech/20190319 Blockchain 2.0- Blockchain In Real Estate -Part 4.md
new file mode 100644
index 0000000000..9e85b82f2c
--- /dev/null
+++ b/sources/tech/20190319 Blockchain 2.0- Blockchain In Real Estate -Part 4.md
@@ -0,0 +1,50 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Blockchain 2.0: Blockchain In Real Estate [Part 4])
+[#]: via: (https://www.ostechnix.com/blockchain-2-0-blockchain-in-real-estate/)
+[#]: author: (EDITOR https://www.ostechnix.com/author/editor/)
+
+Blockchain 2.0: Blockchain In Real Estate [Part 4]
+======
+
+
+
+### Blockchain 2.0: Smart‘er’ Real Estate
+
+The [**previous article**][1] of this series explored the features of blockchain which will enable institutions to transform and interlace **traditional banking** and **financing systems** with it. This part will explore – **Blockchain in real estate**. The real estate industry is ripe for a revolution. It’s among the most actively traded most significant asset classes known to man. However, filled with regulatory hurdles and numerous possibilities of fraud and deceit, it’s also one of the toughest to participate in. The distributed ledger capabilities of the blockchain utilizing an appropriate consensus algorithm are touted as the way forward for the industry which is traditionally regarded as conservative in its attitude to change.
+
+Real estate has always been a very conservative industry in terms of its myriad operations. Somewhat rightfully so as well. A major economic crisis such as the 2008 financial crisis or the great depression from the early half of the 20th century managed to destroy the industry and its participants. However, like most products of economic value, the real estate industry is resilient and this resilience is rooted in its conservative nature.
+
+The global real estate market comprises an asset class worth **$228 trillion dollars** [1]. Give or take. Other investment assets such as stocks, bonds, and shares combined are only worth **$170 trillion**. Obviously, any and all transactions implemented in such an industry is naturally carefully planned and meticulously executed, for the most part. For the most part, because real estate is also notorious for numerous instances of fraud and devastating loses which ensue them. The industry because of the very conservative nature of its operations is also tough to navigate. It’s heavily regulated with complex laws creating an intertwined web of nuances that are just too difficult for an average person to understand fully. This makes entry and participation near impossible for most people. If you’ve ever been involved in one such deal, you’ll know how heavy and long the paper trail was.
+
+This hard reality is now set to change, albeit a slow and gradual transformation. The very reasons the industry has stuck to its hardy tested roots all this while can finally give way to its modern-day counterpart. The backbone of the real estate industry has always been its paper records. Land deeds, titles, agreements, rental insurance, proofs, and declarations etc., are just the tip of the iceberg here. If you’ve noticed the pattern here, this should be obvious, the distributed ledger technology that is blockchain, fits in perfectly with the needs here. Forget paper records, conventional database systems are also points of major failure. They can be modified by multiple participants, is not tamper proof or un-hackable, has a complicated set of ever-changing regulatory parameters making auditing and verifying data a nightmare. The blockchain perfectly solves all of these issues and more.
+
+Starting with a trivial albeit an important example to show just how bad the current record management practices are in the real estate sector, consider the **Title Insurance business** [2], [3]. Title Insurance is used to hedge against the possibility of the land’s titles and ownership records being inadmissible and hence unenforceable. An insurance product such as this is also referred to as an indemnity cover. It is by law required in many cases that properties have title insurance, especially when dealing with property that has changed hands multiple times over the years. Mortgage firms might insist on the same as well when they back real estate deals. The fact that a product of this kind has existed since the 1850s and that it does business worth at least **$1.5 trillion a year in the US alone** is a testament to the statement at the start. A revolution in terms of how these records are maintained is imperative to have in this situation and the blockchain provides a sustainable solution. Title fraud averages around $100k per case on average as per the **American Land Title Association** and 25% of all titles involved in transactions have an issue regarding their documents[4]. The blockchain allows for setting up an immutable permanent database that will track the property itself, recording each and every transaction or investment that has gone into it. Such a ledger system will make life easier for everyone involved in the real estate industry including one-time home buyers and make financial products such as Title Insurance basically irrelevant. Converting a physical asset such as real estate to a digital asset like this is unconventional and is extant only in theory at the moment. However, such a change is imminent sooner rather than later[5].
+
+Among the areas in which blockchain will have the most impact within real estate is as highlighted above in maintaining a transparent and secure title management system for properties. A blockchain based record of the property can contain information about the property, its location, history of ownership, and any related public record of the same[6]. This will permit closing real estate deals fast and obliviates the need for 3rd party monitoring and oversight. Tasks such as real estate appraisal and tax calculations become matters of tangible objective parameters rather than subjective measures and guesses because of reliable historical data which is publicly verifiable. **UBITQUITY** is one such platform that offers customized blockchain-based solutions to enterprise customers. The platform allows customers to keep track of all property details, payment records, mortgage records and even allows running smart contracts that’ll take care of taxation and leasing automatically[7].
+
+This brings us to the second biggest opportunity and use case of blockchains in real estate. Since the sector is highly regulated by numerous 3rd parties apart from the counterparties involved in the trade, due-diligence and financial evaluations can be significantly time-consuming. These processes are predominantly carried out using offline channels and paperwork needs to travel for days before a final evaluation report comes out. This is especially true for corporate real estate deals and forms a bulk of the total billable hours charged by consultants. In case the transaction is backed by a mortgage, duplication of these processes is unavoidable. Once combined with digital identities for the people and institutions involved along with the property, the current inefficiencies can be avoided altogether and transactions can take place in a matter of seconds. The tenants, investors, institutions involved, consultants etc., could individually validate the data and arrive at a critical consensus thereby validating the property records for perpetuity[8]. This increases the accuracy of verification manifold. Real estate giant **RE/MAX** has recently announced a partnership with service provider **XYO Network Partners** for building a national database of real estate listings in Mexico. They hope to one day create one of the largest (as of yet) decentralized real estate title registry in the world[9].
+
+However, another significant and arguably a very democratic change that the blockchain can bring about is with respect to investing in real estate. Unlike other investment asset classes where even small household investors can potentially participate, real estate often requires large hands-down payments to participate. Companies such as **ATLANT** and **BitOfProperty** tokenize the book value of a property and convert them into equivalents of a cryptocurrency. These tokens are then put for sale on their exchanges similar to how stocks and shares are traded. Any cash flow that the real estate property generates afterward is credited or debited to the token owners depending on their “share” in the property[4].
+
+However, even with all of that said, Blockchain technology is still in very early stages of adoption in the real estate sector and current regulations are not exactly defined for it to be either[8]. Concepts such as distributed applications, distributed anonymous organizations, smart contracts etc., are unheard of in the legal domain in many countries. A complete overhaul of existing regulations and guidelines once all the stakeholders are well educated on the intricacies of the blockchain is the most pragmatic way forward. Again, it’ll be a slow and gradual change to go through, however a much-needed one nonetheless. The next article of the series will look at how **“Smart Contracts”** , such as those implemented by companies such as UBITQUITY and XYO are created and executed in the blockchain.
+
+
+
+--------------------------------------------------------------------------------
+
+via: https://www.ostechnix.com/blockchain-2-0-blockchain-in-real-estate/
+
+作者:[EDITOR][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.ostechnix.com/author/editor/
+[b]: https://github.com/lujun9972
+[1]: https://www.ostechnix.com/blockchain-2-0-redefining-financial-services/
diff --git a/sources/tech/20190319 Five Commands To Use Calculator In Linux Command Line.md b/sources/tech/20190319 Five Commands To Use Calculator In Linux Command Line.md
new file mode 100644
index 0000000000..c419d15268
--- /dev/null
+++ b/sources/tech/20190319 Five Commands To Use Calculator In Linux Command Line.md
@@ -0,0 +1,342 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Five Commands To Use Calculator In Linux Command Line?)
+[#]: via: (https://www.2daygeek.com/linux-command-line-calculator-bc-calc-qalc-gcalccmd/)
+[#]: author: (Magesh Maruthamuthu https://www.2daygeek.com/author/magesh/)
+
+Five Commands To Use Calculator In Linux Command Line?
+======
+
+As a Linux administrator you may use the command line calculator many times in a day for some purpose.
+
+I had used this especially when LVM creation using the PE values.
+
+There are many commands available for this purpose and i’m going to list most used commands in this article.
+
+These command line calculators are allow us to perform all kind of actions such as scientific, financial, or even simple calculation.
+
+Also, we can use these commands in shell scripts for complex math.
+
+In this article, I’m listing the top five command line calculator commands.
+
+Those command line calculator commands are below.
+
+ * **`bc:`** An arbitrary precision calculator language
+ * **`calc:`** arbitrary precision calculator
+ * **`expr:`** evaluate expressions
+ * **`gcalccmd:`** gnome-calculator – a desktop calculator
+ * **`qalc:`**
+ * **`Linux Shell:`**
+
+
+
+### How To Perform Calculation In Linux Using bc Command?
+
+bs stands for Basic Calculator. bc is a language that supports arbitrary precision numbers with interactive execution of statements. There are some similarities in the syntax to the C programming language.
+
+A standard math library is available by command line option. If requested, the math library is defined before processing any files. bc starts by processing code from all the files listed on the command line in the order listed.
+
+After all files have been processed, bc reads from the standard input. All code is executed as it is read.
+
+By default bc command has installed in all the Linux system. If not, use the following procedure to install it.
+
+For **`Fedora`** system, use **[DNF Command][1]** to install bc.
+
+```
+$ sudo dnf install bc
+```
+
+For **`Debian/Ubuntu`** systems, use **[APT-GET Command][2]** or **[APT Command][3]** to install bc.
+
+```
+$ sudo apt install bc
+```
+
+For **`Arch Linux`** based systems, use **[Pacman Command][4]** to install bc.
+
+```
+$ sudo pacman -S bc
+```
+
+For **`RHEL/CentOS`** systems, use **[YUM Command][5]** to install bc.
+
+```
+$ sudo yum install bc
+```
+
+For **`openSUSE Leap`** system, use **[Zypper Command][6]** to install bc.
+
+```
+$ sudo zypper install bc
+```
+
+### How To Use The bc Command To Perform Calculation In Linux?
+
+We can use the bc command to perform all kind of calculation right from the terminal.
+
+```
+$ bc
+bc 1.07.1
+Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.
+This is free software with ABSOLUTELY NO WARRANTY.
+For details type `warranty'.
+
+1+2
+3
+
+10-5
+5
+
+2*5
+10
+
+10/2
+5
+
+(2+4)*5-5
+25
+
+quit
+```
+
+Use `-l` flag to define the standard math library.
+
+```
+$ bc -l
+bc 1.07.1
+Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.
+This is free software with ABSOLUTELY NO WARRANTY.
+For details type `warranty'.
+
+3/5
+.60000000000000000000
+
+quit
+```
+
+### How To Perform Calculation In Linux Using calc Command?
+
+calc is an arbitrary precision calculator. It’s a simple calculator that allow us to perform all kind of calculation in Linux command line.
+
+For **`Fedora`** system, use **[DNF Command][1]** to install calc.
+
+```
+$ sudo dnf install calc
+```
+
+For **`Debian/Ubuntu`** systems, use **[APT-GET Command][2]** or **[APT Command][3]** to install calc.
+
+```
+$ sudo apt install calc
+```
+
+For **`Arch Linux`** based systems, use **[Pacman Command][4]** to install calc.
+
+```
+$ sudo pacman -S calc
+```
+
+For **`RHEL/CentOS`** systems, use **[YUM Command][5]** to install calc.
+
+```
+$ sudo yum install calc
+```
+
+For **`openSUSE Leap`** system, use **[Zypper Command][6]** to install calc.
+
+```
+$ sudo zypper install calc
+```
+
+### How To Use The calc Command To Perform Calculation In Linux?
+
+We can use the calc command to perform all kind of calculation right from the terminal.
+
+Intractive mode
+
+```
+$ calc
+C-style arbitrary precision calculator (version 2.12.7.1)
+Calc is open software. For license details type: help copyright
+[Type "exit" to exit, or "help" for help.]
+
+; 5+1
+ 6
+; 5-1
+ 4
+; 5*2
+ 10
+; 10/2
+ 5
+; quit
+```
+
+Non-Intractive mode
+
+```
+$ calc 3/5
+ 0.6
+```
+
+### How To Perform Calculation In Linux Using expr Command?
+
+Print the value of EXPRESSION to standard output. A blank line below separates increasing precedence groups. It’s part of coreutils so, we no need to install it.
+
+### How To Use The expr Command To Perform Calculation In Linux?
+
+Use the following format for basic calculations.
+
+For addition
+
+```
+$ expr 5 + 1
+6
+```
+
+For subtraction
+
+```
+$ expr 5 - 1
+4
+```
+
+For division.
+
+```
+$ expr 10 / 2
+5
+```
+
+### How To Perform Calculation In Linux Using gcalccmd Command?
+
+gnome-calculator is the official calculator of the GNOME desktop environment. gcalccmd is the console version of Gnome Calculator utility. By default it has installed in the GNOME desktop.
+
+### How To Use The gcalccmd Command To Perform Calculation In Linux?
+
+I have added few examples on this.
+
+```
+$ gcalccmd
+
+> 5+1
+6
+
+> 5-1
+4
+
+> 5*2
+10
+
+> 10/2
+5
+
+> sqrt(16)
+4
+
+> 3/5
+0.6
+
+> quit
+```
+
+### How To Perform Calculation In Linux Using qalc Command?
+
+Qalculate is a multi-purpose cross-platform desktop calculator. It is simple to use but provides power and versatility normally reserved for complicated math packages, as well as useful tools for everyday needs (such as currency conversion and percent calculation).
+
+Features include a large library of customizable functions, unit calculations and conversion, symbolic calculations (including integrals and equations), arbitrary precision, uncertainty propagation, interval arithmetic, plotting, and a user-friendly interface (GTK+ and CLI).
+
+For **`Fedora`** system, use **[DNF Command][1]** to install qalc.
+
+```
+$ sudo dnf install libqalculate
+```
+
+For **`Debian/Ubuntu`** systems, use **[APT-GET Command][2]** or **[APT Command][3]** to install qalc.
+
+```
+$ sudo apt install libqalculate
+```
+
+For **`Arch Linux`** based systems, use **[Pacman Command][4]** to install qalc.
+
+```
+$ sudo pacman -S libqalculate
+```
+
+For **`RHEL/CentOS`** systems, use **[YUM Command][5]** to install qalc.
+
+```
+$ sudo yum install libqalculate
+```
+
+For **`openSUSE Leap`** system, use **[Zypper Command][6]** to install qalc.
+
+```
+$ sudo zypper install libqalculate
+```
+
+### How To Use The qalc Command To Perform Calculation In Linux?
+
+I have added few examples on this.
+
+```
+$ qalc
+> 5+1
+
+ 5 + 1 = 6
+
+> ans*2
+
+ ans * 2 = 12
+
+> ans-2
+
+ ans - 2 = 10
+
+> 1 USD to INR
+It has been 36 day(s) since the exchange rates last were updated.
+Do you wish to update the exchange rates now? y
+
+ error: Failed to download exchange rates from coinbase.com: Resolving timed out after 15000 milliseconds.
+ 1 * dollar = approx. INR 69.638581
+
+> 10 USD to INR
+
+ 10 * dollar = approx. INR 696.38581
+
+> quit
+```
+
+### How To Perform Calculation In Linux Using Linux Shell Command?
+
+We can use the shell commands such as echo, awk, etc to perform the calculation.
+
+For Addition using echo command.
+
+```
+$ echo $((5+5))
+10
+```
+
+--------------------------------------------------------------------------------
+
+via: https://www.2daygeek.com/linux-command-line-calculator-bc-calc-qalc-gcalccmd/
+
+作者:[Magesh Maruthamuthu][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.2daygeek.com/author/magesh/
+[b]: https://github.com/lujun9972
+[1]: https://www.2daygeek.com/dnf-command-examples-manage-packages-fedora-system/
+[2]: https://www.2daygeek.com/apt-get-apt-cache-command-examples-manage-packages-debian-ubuntu-systems/
+[3]: https://www.2daygeek.com/apt-command-examples-manage-packages-debian-ubuntu-systems/
+[4]: https://www.2daygeek.com/pacman-command-examples-manage-packages-arch-linux-system/
+[5]: https://www.2daygeek.com/yum-command-examples-manage-packages-rhel-centos-systems/
+[6]: https://www.2daygeek.com/zypper-command-examples-manage-packages-opensuse-system/
diff --git a/sources/tech/20190319 How To Set Up a Firewall with GUFW on Linux.md b/sources/tech/20190319 How To Set Up a Firewall with GUFW on Linux.md
new file mode 100644
index 0000000000..26b9850109
--- /dev/null
+++ b/sources/tech/20190319 How To Set Up a Firewall with GUFW on Linux.md
@@ -0,0 +1,365 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (How To Set Up a Firewall with GUFW on Linux)
+[#]: via: (https://itsfoss.com/set-up-firewall-gufw)
+[#]: author: (Sergiu https://itsfoss.com/author/sergiu/)
+
+How To Set Up a Firewall with GUFW on Linux
+======
+
+**UFW (Uncomplicated Firewall)** is a simple to use firewall utility with plenty of options for most users. It is an interface for the **iptables** , which is the classic (and harder to get comfortable with) way to set up rules for your network.
+
+**Do you really need a firewall for desktop?**
+
+![][1]
+
+A **[firewall][2]** is a way to regulate the incoming and outgoing traffic on your network. A well-configured firewall is crucial for the security of servers.
+
+But what about normal, desktop users? Do you need a firewall on your Linux system? Most likely you are connected to internet via a router linked to your internet service provider (ISP). Some routers already have built-in firewall. On top of that, your actual system is hidden behind NAT. In other words, you probably have a security layer when you are on your home network.
+
+Now that you know you should be using a firewall on your system, let’s see how you can easily install and configure a firewall on Ubuntu or any other Linux distribution.
+
+### Setting Up A Firewall With GUFW
+
+**[GUFW][3]** is a graphical utility for managing [Uncomplicated Firewall][4] ( **UFW** ). In this guide, I’ll go over configuring a firewall using **GUFW** that suits your needs, going over the different modes and rules.
+
+But first, let’s see how to install GUFW.
+
+#### Installing GUFW on Ubuntu and other Linux
+
+GUFW is available in all major Linux distributions. I advise using your distribution’s package manager for installing GUFW.
+
+If you are using Ubuntu, make sure you have the Universe Repository enabled. To do that, open up a terminal (default hotkey**:** CTRL+ALT+T) and enter:
+
+```
+sudo add-apt-repository universe
+sudo apt update -y
+```
+
+Now you can install GUFW with this command:
+
+```
+sudo apt install gufw -y
+```
+
+That’s it! If you prefer not touching the terminal, you can install it from the Software Center as well.
+
+Open Software Center and search for **gufw** and click on the search result.
+
+![Search for gufw in software center][5]
+
+Go ahead and click **Install**.
+
+![Install GUFW from the Software Center][6]
+
+To open **gufw** , go to your menu and search for it.
+
+![Start GUFW][7]
+
+This will open the firewall application and you’ll be greeted by a “ **Getting Started** ” section.
+
+![GUFW Interface and Welcome Screen][8]
+
+#### Turn on the firewall
+
+The first thing to notice about this menu is the **Status** toggle. Pressing this button will turn on/off the firewall ( **default:** off), applying your preferences (policies and rules).
+
+![Turn on the firewall][9]
+
+If turned on, the shield icon turn from grey to colored. The colors, as noted later in this article, reflect your policies. This will also make the firewall **automatically start** on system startup.
+
+**Note:** _**Home** will be turned **off** by default. The other profiles (see next section) will be turned **on.**_
+
+#### Understanding GUFW and its profiles
+
+As you can see in the menu, you can select different **profiles**. Each profile comes with different **default policies**. What this means is that they offer different behaviors for incoming and outgoing traffic.
+
+The **default profiles** are:
+
+ * Home
+ * Public
+ * Office
+
+
+
+You can select another profile by clicking on the current one ( **default: Home** ).
+
+![][10]
+
+Selecting one of them will modify the default behavior. Further down, you can change Incoming and Outgoing traffic preferences.
+
+By default, both in **Home** and in **Office** , these policies are **Deny Incoming** and **Allow Outgoing**. This enables you to use services such as http/https without letting anything get in ( **e.g.** ssh).
+
+For **Public** , they are **Reject Incoming** and **Allow Outgoing**. **Reject** , similar to **deny** , doesn’t let services in, but also sends feedback to the user/service that tried accessing your machine (instead of simply dropping/hanging the connection).
+
+Note
+
+If you are an average desktop user, you can stick with the default profiles. You’ll have to manually change the profiles if you change the network.
+
+So if you are travelling, set the firewall on public profile and the from here forwards, firewall will be set in public mode on each reboot.
+
+#### Configuring firewall rules and policies [for advanced users]
+
+All profiles use the same rules, only the policies the rules build upon will differ. Changing the behavior of a policy ( **Incoming/Outgoing** ) will apply the changes to the selected profile.
+
+Note that the policies can only be changed while the firewall is active (Status: ON).
+
+Profiles can easily be added, deleted and renamed from the **Preferences** menu.
+
+##### Preferences
+
+In the top bar, click on **Edit**. Select **Preferences**.
+
+![Open Preferences Menu in GUFW][11]
+
+This will open up the **Preferences** menu.
+
+![][12]
+
+Let’s go over the options you have here!
+
+**Logging** means exactly what you would think: how much information does the firewall write down in the log files.
+
+The options under **Gufw** are quite self-explanatory.
+
+In the section under **Profiles** is where we can add, delete and rename profiles. Double-clicking on a profile will allow you to **rename** it. Pressing **Enter** will complete this process and pressing **Esc** will cancel the rename.
+
+![][13]
+
+To **add** a new profile, click on the **+** under the list of profiles. This will add a new profile. However, it won’t notify you about it. You’ll also have to scroll down the list to see the profile you created (using the mouse wheel or the scroll bar on the right side of the list).
+
+**Note:** _The newly added profile will **Deny Incoming** and **Allow Outgoing** traffic._
+
+![][14]
+
+Clicking a profile highlight that profile. Pressing the **–** button will **delete** the highlighted profile.
+
+![][15]
+
+**Note:** _You can’t rename/remove the currently selected profile_.
+
+You can now click on **Close**. Next, I’ll go into setting up different **rules**.
+
+##### Rules
+
+Back to the main menu, somewhere in the middle of the screen you can select different tabs ( **Home, Rules, Report, Logs)**. We already covered the **Home** tab (that’s the quick guide you see when you start the app).
+
+![][16]
+
+Go ahead and select **Rules**.
+
+![][17]
+
+This will be the bulk of your firewall configuration: networking rules. You need to understand the concepts UFW is based on. That is **allowing, denying, rejecting** and **limiting** traffic.
+
+**Note:** _In UFW, the rules apply from top to bottom (the top rules take effect first and on top of them are added the following ones)._
+
+**Allow, Deny, Reject, Limit:**These are the available policies for the rules you’ll add to your firewall.
+
+Let’s see exactly what each of them means:
+
+ * **Allow:** allows any entry traffic to a port
+ * **Deny:** denies any entry traffic to a port
+ * **Reject:** denies any entry traffic to a port and informs the requester about the rejection
+ * **Limit:** denies entry traffic if an IP address has attempted to initiate 6 or more connections in the last 30 seconds
+
+
+
+##### Adding Rules
+
+There are three ways to add rules in GUFW. I’ll present all three methods in the following section.
+
+**Note:** _After you added the rules, changing their order is a very tricky process and it’s easier to just delete them and add them in the right order._
+
+But first, click on the **+** at the bottom of the **Rules** tab.
+
+![][18]
+
+This should open a pop-up menu ( **Add a Firewall Rule** ).
+
+![][19]
+
+At the top of this menu, you can see the three ways you can add rules. I’ll guide you through each method i.e. **Preconfigured, Simple, Advanced**. Click to expand each section.
+
+**Preconfigured Rules**
+
+This is the most beginner-friendly way to add rules.
+
+The first step is choosing a policy for the rule (from the ones detailed above).
+
+![][20]
+
+The next step is to choose the direction the rule will affect ( **Incoming, Outgoing, Both** ).
+
+![][21]
+
+The **Category** and **Subcategory** choices are plenty. These narrow down the **Applications** you can select
+
+Choosing an **Application** will set up a set of ports based on what is needed for that particular application. This is especially useful for apps that might operate on multiple ports, or if you don’t want to bother with manually creating rules for handwritten port numbers.
+
+If you wish to further customize the rule, you can click on the **orange arrow icon**. This will copy the current settings (Application with it’s ports etc.) and take you to the **Advanced** rule menu. I’ll cover that later in this article.
+
+For this example, I picked an **Office Database** app: **MySQL**. I’ll deny all incoming traffic to the ports used by this app.
+To create the rule, click on **Add**.
+
+![][22]
+
+You can now **Close** the pop-up (if you don’t want to add any other rules). You can see that the rule has been successfully added.
+
+![][23]
+
+The ports have been added by GUFW, and the rules have been automatically numbered. You may wonder why are there two new rules instead of just one; the answer is that UFW automatically adds both a standard **IP** rule and an **IPv6** rule.
+
+**Simple Rules**
+
+Although setting up preconfigured rules is nice, there is another easy way to add a rule. Click on the **+** icon again and go to the **Simple** tab.
+
+![][24]
+
+The options here are straight forward. Enter a name for your rule and select the policy and the direction. I’ll add a rule for rejecting incoming SSH attempts.
+
+![][25]
+
+The **Protocols** you can choose are **TCP, UDP** or **Both**.
+
+You must now enter the **Port** for which you want to manage the traffic. You can enter a **port number** (e.g. 22 for ssh), a **port range** with inclusive ends separated by a **:** ( **colon** ) (e.g. 81:89) or a **service name** (e.g. ssh). I’ll use **ssh** and select **both TCP and UDP** for this example. As before, click on **Add** to completing the creation of your rule. You can click the **red arrow icon** to copy the settings to the **Advanced** rule creation menu.
+
+![][26]
+
+If you select **Close** , you can see that the new rule (along with the corresponding IPv6 rule) has been added.
+
+![][27]
+
+**Advanced Rules**
+
+I’ll now go into how to set up more advanced rules, to handle traffic from specific IP addresses and subnets and targeting different interfaces.
+
+Let’s open up the **Rules** menu again. Select the **Advanced** tab.
+
+![][28]
+
+By now, you should already be familiar with the basic options: **Name, Policy, Direction, Protocol, Port**. These are the same as before.
+
+![][29]
+
+**Note:** _You can choose both a receiving port and a requesting port._
+
+What changes is that now you have additional options to further specialize our rules.
+
+I mentioned before that rules are automatically numbered by GUFW. With **Advanced** rules you specify the position of your rule by entering a number in the **Insert** option.
+
+**Note:** _Inputting **position 0** will add your rule after all existing rules._
+
+**Interface** let’s you select any network interface available on your machine. By doing so, the rule will only have effect on traffic to and from that specific interface.
+
+**Log** changes exactly that: what will and what won’t be logged.
+
+You can also choose IPs for the requesting and for the receiving port/service ( **From** , **To** ).
+
+All you have to do is specify an **IP address** (e.g. 192.168.0.102) or an entire **subnet** (e.g. 192.168.0.0/24 for IPv4 addresses ranging from 192.168.0.0 to 192.168.0.255).
+
+In my example, I’ll set up a rule to allow all incoming TCP SSH requests from systems on my subnet to a specific network interface of the machine I’m currently running. I’ll add the rule after all my standard IP rules, so that it takes effect on top of the other rules I have set up.
+
+![][30]
+
+**Close** the menu.
+
+![][31]
+
+The rule has been successfully added after the other standard IP rules.
+
+##### Edit Rules
+
+Clicking a rule in the rules list will highlight it. Now, if you click on the **little cog icon** at the bottom, you can **edit** the highlighted rule.
+
+![][32]
+
+This will open up a menu looking something like the **Advanced** menu I explained in the last section.
+
+![][33]
+
+**Note:** _Editing any options of a rule will move it to the end of your list._
+
+You can now ether select on **Apply** to modify your rule and move it to the end of the list, or hit **Cancel**.
+
+##### Delete Rules
+
+After selecting (highlighting) a rule, you can also click on the **–** icon.
+
+![][34]
+
+##### Reports
+
+Select the **Report** tab. Here you can see services that are currently running (along with information about them, such as Protocol, Port, Address and Application name). From here, you can **Pause Listening Report (Pause Icon)** or **Create a rule from a highlighted service from the listening report (+ Icon)**.
+
+![][35]
+
+##### Logs
+
+Select the **Logs** tab. Here is where you’ll have to check for any errors are suspicious rules. I’ve tried creating some invalid rules to show you what these might look like when you don’t know why you can’t add a certain rule. In the bottom section, there are two icons. Clicking the **first icon copies the logs** to your clipboard and clicking the **second icon** **clears the log**.
+
+![][36]
+
+### Wrapping Up
+
+Having a firewall that is properly configured can greatly contribute to your Ubuntu experience, making your machine safer to use and allowing you to have full control over incoming and outgoing traffic.
+
+I have covered the different uses and modes of **GUFW** , going into how to set up different rules and configure a firewall to your needs. I hope that this guide has been helpful to you.
+
+If you are a beginner, this should prove to be a comprehensive guide; even if you are more versed in the Linux world and maybe getting your feet wet into servers and networking, I hope you learned something new.
+
+Let us know in the comments if this article helped you and why did you decide a firewall would improve your system!
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/set-up-firewall-gufw
+
+作者:[Sergiu][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/sergiu/
+[b]: https://github.com/lujun9972
+[1]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/firewall-linux.png?resize=800%2C450&ssl=1
+[2]: https://en.wikipedia.org/wiki/Firewall_(computing)
+[3]: http://gufw.org/
+[4]: https://en.wikipedia.org/wiki/Uncomplicated_Firewall
+[5]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/03/ubuntu_software_gufw-1.jpg?ssl=1
+[6]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/ubuntu_software_install_gufw.jpg?ssl=1
+[7]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/show_applications_gufw.jpg?ssl=1
+[8]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw.jpg?ssl=1
+[9]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_toggle_status.jpg?ssl=1
+[10]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_select_profile-1.jpg?ssl=1
+[11]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_open_preferences.jpg?ssl=1
+[12]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_preferences.png?fit=800%2C585&ssl=1
+[13]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_rename_profile.png?fit=800%2C551&ssl=1
+[14]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_add_profile.png?ssl=1
+[15]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_delete_profile.png?ssl=1
+[16]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_home_tab.png?ssl=1
+[17]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_rules_tab.png?ssl=1
+[18]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_add_rule.png?ssl=1
+[19]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_add_rules_menu.png?ssl=1
+[20]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_preconfigured_rule_policy.png?ssl=1
+[21]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_preconfigured_rule_direction.png?ssl=1
+[22]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_preconfigured_add_rule.png?ssl=1
+[23]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_preconfigured_rule_added.png?ssl=1
+[24]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_add_simple_rules_menu.png?ssl=1
+[25]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_simple_rule_name_policy_direction.png?ssl=1
+[26]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_add_simple_rule.png?ssl=1
+[27]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_simple_rule_added.png?ssl=1
+[28]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_add_advanced_rules_menu.png?ssl=1
+[29]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_advanced_rule_basic_options.png?ssl=1
+[30]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_add_advanced_rule.png?ssl=1
+[31]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_advanced_rule_added.png?ssl=1
+[32]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_edit_highlighted_rule.png?ssl=1
+[33]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_edit_rule_menu.png?ssl=1
+[34]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_delete_rule.png?ssl=1
+[35]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_report_tab.png?ssl=1
+[36]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_log_tab-1.png?ssl=1
+[37]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/firewall-linux.png?fit=800%2C450&ssl=1
diff --git a/sources/tech/20190319 How to set up a homelab from hardware to firewall.md b/sources/tech/20190319 How to set up a homelab from hardware to firewall.md
new file mode 100644
index 0000000000..d8bb34395b
--- /dev/null
+++ b/sources/tech/20190319 How to set up a homelab from hardware to firewall.md
@@ -0,0 +1,107 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (How to set up a homelab from hardware to firewall)
+[#]: via: (https://opensource.com/article/19/3/home-lab)
+[#]: author: (Michael Zamot https://opensource.com/users/mzamot)
+
+How to set up a homelab from hardware to firewall
+======
+
+Take a look at hardware and software options for building your own homelab.
+
+![][1]
+
+Do you want to create a homelab? Maybe you want to experiment with different technologies, create development environments, or have your own private cloud. There are many reasons to have a homelab, and this guide aims to make it easier to get started.
+
+There are three categories to consider when planning a home lab: hardware, software, and maintenance. We'll look at the first two categories here and save maintaining your computer lab for a future article.
+
+### Hardware
+
+When thinking about your hardware needs, first consider how you plan to use your lab as well as your budget, noise, space, and power usage.
+
+If buying new hardware is too expensive, search local universities, ads, and websites like eBay or Craigslist for recycled servers. They are usually inexpensive, and server-grade hardware is built to last many years. You'll need three types of hardware: a virtualization server, storage, and a router/firewall.
+
+#### Virtualization servers
+
+A virtualization server allows you to run several virtual machines that share the physical box's resources while maximizing and isolating resources. If you break one virtual machine, you won't have to rebuild the entire server, just the virtual one. If you want to do a test or try something without the risk of breaking your entire system, just spin up a new virtual machine and you're ready to go.
+
+The two most important factors to consider in a virtualization server are the number and speed of its CPU cores and its memory. If there are not enough resources to share among all the virtual machines, they'll be overallocated and try to steal each other's CPU cycles and memory.
+
+So, consider a CPU platform with multiple cores. You want to ensure the CPU supports virtualization instructions (VT-x for Intel and AMD-V for AMD). Examples of good consumer-grade processors that can handle virtualization are Intel i5 or i7 and AMD Ryzen. If you are considering server-grade hardware, the Xeon class for Intel and EPYC for AMD are good options. Memory can be expensive, especially the latest DDR4 SDRAM. When estimating memory requirements, factor at least 2GB for the host operating system's memory consumption.
+
+If your electricity bill or noise is a concern, solutions like Intel's NUC devices provide a small form factor, low power usage, and reduced noise, but at the expense of expandability.
+
+#### Network-attached storage (NAS)
+
+If you want a machine loaded with hard drives to store all your personal data, movies, pictures, etc. and provide storage for the virtualization server, network-attached storage (NAS) is what you want.
+
+In most cases, you won't need a powerful CPU; in fact, many commercial NAS solutions use low-powered ARM CPUs. A motherboard that supports multiple SATA disks is a must. If your motherboard doesn't have enough ports, use a host bus adapter (HBA) SAS controller to add extras.
+
+Network performance is critical for a NAS, so select a gigabit network interface (or better).
+
+Memory requirements will differ based on your filesystem. ZFS is one of the most popular filesystems for NAS, and you'll need more memory to use features such as caching or deduplication. Error-correcting code (ECC) memory is your best bet to protect data from corruption (but make sure your motherboard supports it before you buy). Last, but not least, don't forget an uninterruptible power supply (UPS), because losing power can cause data corruption.
+
+#### Firewall and router
+
+Have you ever realized that a cheap router/firewall is usually the main thing protecting your home network from the exterior world? These routers rarely receive timely security updates, if they receive any at all. Scared now? Well, [you should be][2]!
+
+You usually don't need a powerful CPU or a great deal of memory to build your own router/firewall, unless you are handling a huge throughput or want to do CPU-intensive tasks, like a VPN server or traffic filtering. In such cases, you'll need a multicore CPU with AES-NI support.
+
+You may want to get at least two 1-gigabit or better Ethernet network interface cards (NICs), also, not needed, but recommended, a managed switch to connect your DIY-router to create VLANs to further isolate and secure your network.
+
+![Home computer lab PfSense][4]
+
+### Software
+
+After you've selected your virtualization server, NAS, and firewall/router, the next step is exploring the different operating systems and software to maximize their benefits. While you could use a regular Linux distribution like CentOS, Debian, or Ubuntu, they usually take more time to configure and administer than the following options.
+
+#### Virtualization software
+
+**[KVM][5]** (Kernel-based Virtual Machine) lets you turn Linux into a hypervisor so you can run multiple virtual machines in the same box. The best thing is that KVM is part of Linux, and it is the go-to option for many enterprises and home users. If you are comfortable, you can install **[libvirt][6]** and **[virt-manager][7]** to manage your virtualization platform.
+
+**[Proxmox VE][8]** is a robust, enterprise-grade solution and a full open source virtualization and container platform. It is based on Debian and uses KVM as its hypervisor and LXC for containers. Proxmox offers a powerful web interface, an API, and can scale out to many clustered nodes, which is helpful because you'll never know when you'll run out of capacity in your lab.
+
+**[oVirt][9] (RHV)** is another enterprise-grade solution that uses KVM as the hypervisor. Just because it's enterprise doesn't mean you can't use it at home. oVirt offers a powerful web interface and an API and can handle hundreds of nodes (if you are running that many servers, I don't want to be your neighbor!). The potential problem with oVirt for a home lab is that it requires a minimum set of nodes: You'll need one external storage, such as a NAS, and at least two additional virtualization nodes (you can run it just on one, but you'll run into problems in maintenance of your environment).
+
+#### NAS software
+
+**[FreeNAS][10]** is the most popular open source NAS distribution, and it's based on the rock-solid FreeBSD operating system. One of its most robust features is its use of the ZFS filesystem, which provides data-integrity checking, snapshots, replication, and multiple levels of redundancy (mirroring, striped mirrors, and striping). On top of that, everything is managed from the powerful and easy-to-use web interface. Before installing FreeNAS, check its hardware support, as it is not as wide as Linux-based distributions.
+
+Another popular alternative is the Linux-based **[OpenMediaVault][11]**. One of its main features is its modularity, with plugins that extend and add features. Among its included features are a web-based administration interface; protocols like CIFS, SFTP, NFS, iSCSI; and volume management, including software RAID, quotas, access control lists (ACLs), and share management. Because it is Linux-based, it has extensive hardware support.
+
+#### Firewall/router software
+
+**[pfSense][12]** is an open source, enterprise-grade FreeBSD-based router and firewall distribution. It can be installed directly on a server or even inside a virtual machine (to manage your virtual or physical networks and save space). It has many features and can be expanded using packages. It is managed entirely using the web interface, although it also has command-line access. It has all the features you would expect from a router and firewall, like DHCP and DNS, as well as more advanced features, such as intrusion detection (IDS) and intrusion prevention (IPS) systems. You can create multiple networks listening on different interfaces or using VLANs, and you can create a secure VPN server with a few clicks. pfSense uses pf, a stateful packet filter that was developed for the OpenBSD operating system using a syntax similar to IPFilter. Many companies and organizations use pfSense.
+
+* * *
+
+With all this information in mind, it's time for you to get your hands dirty and start building your lab. In a future article, I will get into the third category of running a home lab: using automation to deploy and maintain it.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/3/home-lab
+
+作者:[Michael Zamot (Red Hat)][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/mzamot
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/computer_keyboard_laptop_development_code_woman.png?itok=vbYz6jjb
+[2]: https://opensource.com/article/18/5/how-insecure-your-router
+[3]: /file/427426
+[4]: https://opensource.com/sites/default/files/uploads/pfsense2.png (Home computer lab PfSense)
+[5]: https://www.linux-kvm.org/page/Main_Page
+[6]: https://libvirt.org/
+[7]: https://virt-manager.org/
+[8]: https://www.proxmox.com/en/proxmox-ve
+[9]: https://ovirt.org/
+[10]: https://freenas.org/
+[11]: https://www.openmediavault.org/
+[12]: https://www.pfsense.org/
diff --git a/sources/tech/20190320 4 cool terminal multiplexers.md b/sources/tech/20190320 4 cool terminal multiplexers.md
new file mode 100644
index 0000000000..e8650b4f56
--- /dev/null
+++ b/sources/tech/20190320 4 cool terminal multiplexers.md
@@ -0,0 +1,121 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (4 cool terminal multiplexers)
+[#]: via: (https://fedoramagazine.org/4-cool-terminal-multiplexers/)
+[#]: author: (Paul W. Frields https://fedoramagazine.org/author/pfrields/)
+
+4 cool terminal multiplexers
+======
+
+![][1]
+
+The Fedora OS is comfortable and easy for lots of users. It has a stunning desktop that makes it easy to get everyday tasks done. Under the hood is all the power of a Linux system, and the terminal is the easiest way for power users to harness it. By default terminals are simple and somewhat limited. However, a _terminal multiplexer_ allows you to turn your terminal into an even more incredible powerhouse. This article shows off some popular terminal multiplexers and how to install them.
+
+Why would you want to use one? Well, for one thing, it lets you logout of your system while _leaving your terminal session undisturbed_. It’s incredibly useful to logout of your console, secure it, travel somewhere else, then remotely login with SSH and continue where you left off. Here are some utilities to check out.
+
+One of the oldest and most well-known terminal multiplexers is _screen._ However, because the code is no longer maintained, this article focuses on more recent apps. (“Recent” is relative — some of these have been around for years!)
+
+### Tmux
+
+The _tmux_ utility is one of the most widely used replacements for _screen._ It has a highly configurable interface. You can program tmux to start up specific kinds of sessions based on your needs. You’ll find a lot more about tmux in this article published earlier:
+
+> [Use tmux for a more powerful terminal][2]
+
+Already a tmux user? You might like [this additional article on making your tmux sessions more effective][3].
+
+To install tmux, use the _sudo_ command along with _dnf_ , since you’re probably in a terminal already:
+
+```
+$ sudo dnf install tmux
+```
+
+To start learning, run the _tmux_ command. A single pane window starts with your default shell. Tmux uses a _modifier key_ to signal that a command is coming next. This key is **Ctrl+B** by default. If you enter **Ctrl+B, C** you’ll create a new window with a shell in it.
+
+Here’s a hint: Use **Ctrl+B, ?** to enter a help mode that lists all the keys you can use. To keep things simple, look for the lines starting with _bind-key -T prefix_ at first. These are keys you can use right after the modifier key to configure your tmux session. You can hit **Ctrl+C** to exit the help mode back to tmux.
+
+To completely exit tmux, use the standard _exit_ command or _Ctrl+D_ keystroke to exit all the shells.
+
+### Dvtm
+
+You might have recently seen the Magazine article on [dwm, a dynamic window manager][4]. Like dwm, _dvtm_ is for tiling window management — but in a terminal. It’s designed to adhere to the legacy UNIX philosophy of “do one thing well” — in this case managing windows in a terminal.
+
+Installing dvtm is easy as well. However, if you want the logout functionality mentioned earlier, you’ll also need the _abduco_ package which handles session management for dvtm.
+
+```
+$ sudo dnf install dvtm abduco
+```
+
+The dvtm utility has many keystrokes already mapped to allow you to manage windows in the terminal. By default, it uses **Ctrl+G** as its modifier key. This keystroke tells dvtm that the following character is going to be a command it should process. For instance, **Ctrl+G, C** creates a new window and **Ctrl+G, X** removes it.
+
+For more information on using dvtm, check out the dvtm [home page][5] which includes numerous tips and get-started information.
+
+### Byobu
+
+While _byobu_ isn’t truly a multiplexer on its own — it wraps _tmux_ or even the older _screen_ to add functions — it’s worth covering here too. Byobu makes terminal multiplexers better for novices, by adding a help menu and window tabs that are slightly easier to navigate.
+
+Of course it’s available in the Fedora repos as well. To install, use this command:
+
+```
+$ sudo dnf install byobu
+```
+
+By default the _byobu_ command runs _screen_ underneath, so you might want to run _byobu-tmux_ to wrap _tmux_ instead. You can then use the **F9** key to open up a help menu for more information to help you get started.
+
+### Mtm
+
+The _mtm_ utility is one of the smallest multiplexers you’ll find. In fact, it’s only about 1000 lines of code! You might find it helpful if you’re in a limited environment such as old hardware, a minimal container, and so forth. To get started, you’ll need a couple packages.
+
+```
+$ sudo dnf install git ncurses-devel make gcc
+```
+
+Then clone the repository where mtm lives:
+
+```
+$ git clone https://github.com/deadpixi/mtm.git
+```
+
+Change directory into the _mtm_ folder and build the program:
+
+```
+$ make
+```
+
+You might receive a few warnings, but when you’re done, you’ll have the very small _mtm_ utility. Run it with this command:
+
+```
+$ ./mtm
+```
+
+You can find all the documentation for the utility [on its GitHub page][6].
+
+These are just some of the terminal multiplexers out there. Got one you’d like to recommend? Leave a comment below with your tips and enjoy building windows in your terminal!
+
+* * *
+
+_Photo by _[ _Michael_][7]_ on [Unsplash][8]._
+
+--------------------------------------------------------------------------------
+
+via: https://fedoramagazine.org/4-cool-terminal-multiplexers/
+
+作者:[Paul W. Frields][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://fedoramagazine.org/author/pfrields/
+[b]: https://github.com/lujun9972
+[1]: https://fedoramagazine.org/wp-content/uploads/2018/08/tmuxers-4-816x345.jpg
+[2]: https://fedoramagazine.org/use-tmux-more-powerful-terminal/
+[3]: https://fedoramagazine.org/4-tips-better-tmux-sessions/
+[4]: https://fedoramagazine.org/lets-try-dwm-dynamic-window-manger/
+[5]: http://www.brain-dump.org/projects/dvtm/#why
+[6]: https://github.com/deadpixi/mtm
+[7]: https://unsplash.com/photos/48yI_ZyzuLo?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText
+[8]: https://unsplash.com/search/photos/windows?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText
diff --git a/sources/tech/20190320 Choosing an open messenger client- Alternatives to WhatsApp.md b/sources/tech/20190320 Choosing an open messenger client- Alternatives to WhatsApp.md
new file mode 100644
index 0000000000..5f940e9b0b
--- /dev/null
+++ b/sources/tech/20190320 Choosing an open messenger client- Alternatives to WhatsApp.md
@@ -0,0 +1,97 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Choosing an open messenger client: Alternatives to WhatsApp)
+[#]: via: (https://opensource.com/article/19/3/open-messenger-client)
+[#]: author: (Chris Hermansen https://opensource.com/users/clhermansen)
+
+Choosing an open messenger client: Alternatives to WhatsApp
+======
+
+Keep in touch with far-flung family, friends, and colleagues without sacrificing your privacy.
+
+![Team communication, chat][1]
+
+Like many families, mine is inconveniently spread around, and I have many colleagues in North and South America. So, over the years, I've relied more and more on WhatsApp to stay in touch with people. The claimed end-to-end encryption appeals to me, as I prefer to maintain some shreds of privacy, and moreover to avoid forcing those with whom I communicate to use an insecure mechanism. But all this [WhatsApp/Facebook/Instagram "convergence"][2] has led our family to decide to vote with our feet. We no longer use WhatsApp for anything except communicating with others who refuse to use anything else, and we're working on them.
+
+So what do we use instead? Before I spill the beans, I'd like to explain what other options we looked at and how we chose.
+
+### Options we considered and how we evaluated them
+
+There is an absolutely [crazy number of messaging apps out there][3], and we spent a good deal of time thinking about what we needed for a replacement. We started by reading Dan Arel's article on [five social media alternatives to protect privacy][4].
+
+Then we came up with our list of core needs:
+
+ * Our entire family uses Android phones.
+ * One of us has a Windows desktop; the rest use Linux.
+ * Our main interest is something we can use to chat, both individually and as a group, on our phones, but it would be nice to have a desktop client available.
+ * It would also be nice to have voice and video calling as well.
+ * Our privacy is important. Ideally, the code should be open source to facilitate security reviews. If the operation is not pure peer-to-peer, then the organization operating the server components should not operate a business based on the commercialization of our personal information.
+
+
+
+At that point, we narrowed the long list down to [Viber][5], [Line][6], [Signal][7], [Threema][8], [Wire][9], and [Riot.im][10]. While I lean strongly to open source, we wanted to include some closed source and paid solutions to make sure we weren't missing something important. Here's how those six alternatives measured up.
+
+### Line
+
+[Line][11] is a popular messaging application, and it's part of a larger Line "ecosystem"—online gaming, Taxi (an Uber-like service in Japan), Wow (a food delivery service), Today (a news hub), shopping, and others. For us, Line checks a few too many boxes with all those add-on features. Also, I could not determine its current security quality, and it's not open source. The business model seems to be to build a community and figure out how to make money through that community.
+
+### Riot.im
+
+[Riot.im][12] operates on top of the Matrix protocol and therefore lets the user choose a Matrix provider. It also appears to check all of our "needs" boxes, although in operation it looks more like Slack, with a room-oriented and interoperable/federated design. It offers desktop clients, and it's open source. Since the Matrix protocol can be hosted anywhere, any business model would be particular to the Matrix provider.
+
+### Signal
+
+[Signal][13] offers a similar user experience to WhatsApp. It checks all of our "needs" boxes, with solid security validated by external audit. It is open source, and it is developed and operated by a not-for-profit foundation, in principle similar to the Mozilla Foundation. Interestingly, Signal's communications protocol appears to be used by other messaging apps, [including WhatsApp][14].
+
+### Threema
+
+[Threema][15] is extremely privacy-focused. It checks some of our "needs" boxes, with decent external audit results of its security. It doesn't offer a desktop client, and it [isn't fully open source][16] though some of its core components are. Threema's business model appears to be to offer paid secure communications.
+
+### Viber
+
+[Viber][17] is a very popular messaging application. It checks most of our "needs" boxes; however, it doesn't seem to have solid proof of its security—it seems to use a proprietary encryption mechanism, and as far as I could determine, its current security mechanisms are not externally audited. It's not open source. The owner, Rakuten, seems to be planning for a paid subscription as a business model.
+
+### Wire
+
+[Wire][18] was started and is built by some ex-Skype people. It appears to check all of our "needs" boxes, although I am not completely comfortable with its security profile since it stores client data that apparently is not encrypted on its servers. It offers desktop clients and is open source. The developer and operator, Wire Swiss, appears to have a [pay-for-service track][9] as its future business model.
+
+### The final verdict
+
+In the end, we picked Signal. We liked its open-by-design approach, its serious and ongoing [privacy and security stance][7] and having a Signal app on our GNOME (and Windows) desktops. It performs very well on our Android handsets and our desktops. Moreover, it wasn't a big surprise to our small user community; it feels much more like WhatsApp than, for example, Riot.im, which we also tried extensively. Having said that, if we were trying to replace Slack, we'd probably move to Riot.im.
+
+_Have a favorite messenger? Tell us about it in the comments below._
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/3/open-messenger-client
+
+作者:[Chris Hermansen (Community Moderator)][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/clhermansen
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/talk_chat_team_mobile_desktop.png?itok=d7sRtKfQ (Team communication, chat)
+[2]: https://www.cnbc.com/2018/03/28/facebook-new-privacy-settings-dont-address-instagram-whatsapp.html
+[3]: https://en.wikipedia.org/wiki/Comparison_of_instant_messaging_clients
+[4]: https://opensource.com/article/19/1/open-source-social-media-alternatives
+[5]: https://en.wikipedia.org/wiki/Viber
+[6]: https://en.wikipedia.org/wiki/Line_(software)
+[7]: https://en.wikipedia.org/wiki/Signal_(software)
+[8]: https://en.wikipedia.org/wiki/Threema
+[9]: https://en.wikipedia.org/wiki/Wire_(software)
+[10]: https://en.wikipedia.org/wiki/Riot.im
+[11]: https://line.me/en/
+[12]: https://about.riot.im/
+[13]: https://signal.org/
+[14]: https://en.wikipedia.org/wiki/Signal_Protocol
+[15]: https://threema.ch/en
+[16]: https://threema.ch/en/faq/source_code
+[17]: https://www.viber.com/
+[18]: https://wire.com/en/
diff --git a/sources/tech/20190320 Getting started with Jaeger to build an Istio service mesh.md b/sources/tech/20190320 Getting started with Jaeger to build an Istio service mesh.md
new file mode 100644
index 0000000000..c4200355e4
--- /dev/null
+++ b/sources/tech/20190320 Getting started with Jaeger to build an Istio service mesh.md
@@ -0,0 +1,157 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Getting started with Jaeger to build an Istio service mesh)
+[#]: via: (https://opensource.com/article/19/3/getting-started-jaeger)
+[#]: author: (Daniel Oh https://opensource.com/users/daniel-oh)
+
+Getting started with Jaeger to build an Istio service mesh
+======
+
+Improve monitoring and tracing of cloud-native apps on a distributed networking system.
+
+![Mesh networking connected dots][1]
+
+[Service mesh][2] provides a dedicated network for service-to-service communication in a transparent way. [Istio][3] aims to help developers and operators address service mesh features such as dynamic service discovery, mutual transport layer security (TLS), circuit breakers, rate limiting, and tracing. [Jaeger][4] with Istio augments monitoring and tracing of cloud-native apps on a distributed networking system. This article explains how to get started with Jaeger to build an Istio service mesh on the Kubernetes platform.
+
+### Spinning up a Kubernetes cluster
+
+[Minikube][5] allows you to run a single-node Kubernetes cluster based on a virtual machine such as [KVM][6], [VirtualBox][7], or [HyperKit][8] on your local machine. [Install Minikube][9] and use the following shell script to run it:
+
+```
+#!/bin/bash
+
+export MINIKUBE_PROFILE_NAME=istio-jaeger
+minikube profile $MINIKUBE_PROFILE_NAME
+minikube config set cpus 3
+minikube config set memory 8192
+
+# You need to replace appropriate VM driver on your local machine
+minikube config set vm-driver hyperkit
+
+minikube start
+```
+
+In the above script, replace the **\--vm-driver=xxx** option with the appropriate virtual machine driver on your operating system (OS).
+
+### Deploying Istio service mesh with Jaeger
+
+Download the Istio installation file for your OS from the [Istio release page][10]. In the Istio package directory, you will find the Kubernetes installation YAML files in **install/** and the sample applications in **sample/**. Use the following commands:
+
+```
+$ curl -L | sh -
+$ cd istio-1.0.5
+$ export PATH=$PWD/bin:$PATH
+```
+
+The easiest way to deploy Istio with Jaeger on your Kubernetes cluster is to use [Custom Resource Definitions][11]. Install Istio with mutual TLS authentication between sidecars with these commands:
+
+```
+$ kubectl apply -f install/kubernetes/helm/istio/templates/crds.yaml
+$ kubectl apply -f install/kubernetes/istio-demo-auth.yaml
+```
+
+Check if all pods of Istio on your Kubernetes cluster are deployed and running correctly by using the following command and review the output:
+
+```
+$ kubectl get pods -n istio-system
+NAME READY STATUS RESTARTS AGE
+grafana-59b8896965-p2vgs 1/1 Running 0 3h
+istio-citadel-856f994c58-tk8kq 1/1 Running 0 3h
+istio-cleanup-secrets-mq54t 0/1 Completed 0 3h
+istio-egressgateway-5649fcf57-n5ql5 1/1 Running 0 3h
+istio-galley-7665f65c9c-wx8k7 1/1 Running 0 3h
+istio-grafana-post-install-nh5rw 0/1 Completed 0 3h
+istio-ingressgateway-6755b9bbf6-4lf8m 1/1 Running 0 3h
+istio-pilot-698959c67b-d2zgm 2/2 Running 0 3h
+istio-policy-6fcb6d655f-lfkm5 2/2 Running 0 3h
+istio-security-post-install-st5xc 0/1 Completed 0 3h
+istio-sidecar-injector-768c79f7bf-9rjgm 1/1 Running 0 3h
+istio-telemetry-664d896cf5-wwcfw 2/2 Running 0 3h
+istio-tracing-6b994895fd-h6s9h 1/1 Running 0 3h
+prometheus-76b7745b64-hzm27 1/1 Running 0 3h
+servicegraph-5c4485945b-mk22d 1/1 Running 1 3h
+```
+
+### Building sample microservice apps
+
+You can use the [Bookinfo][12] app to learn about Istio's features. Bookinfo consists of four microservice apps: _productpage_ , _details_ , _reviews_ , and _ratings_ deployed independently on Minikube. Each microservice will be deployed with an Envoy sidecar via Istio by using the following commands:
+
+```
+// Enable sidecar injection automatically
+$ kubectl label namespace default istio-injection=enabled
+$ kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
+
+// Export the ingress IP, ports, and gateway URL
+$ kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
+
+$ export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')
+$ export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}')
+$ export INGRESS_HOST=$(minikube ip)
+
+$ export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
+```
+
+### Accessing the Jaeger dashboard
+
+To view tracing information for each HTTP request, create some traffic by running the following commands at the command line:
+```
+
+```
+
+$ while true; do
+ curl -s http://${GATEWAY_URL}/productpage > /dev/null
+ echo -n .;
+ sleep 0.2
+done
+
+You can access the Jaeger dashboard through a web browser with [http://localhost:16686][13] if you set up port forwarding as follows:
+
+```
+kubectl port-forward -n istio-system $(kubectl get pod -n istio-system -l app=jaeger -o jsonpath='{.items[0].metadata.name}') 16686:16686 &
+```
+
+You can explore all traces by clicking "Find Traces" after selecting the _productpage_ service. Your dashboard will look similar to this:
+
+![Find traces in Jaeger][14]
+
+You can also view more details about each trace to dig into performance issues or elapsed time by clicking on a certain trace.
+
+![Viewing details about a trace][15]
+
+### Conclusion
+
+A distributed tracing platform allows you to understand what happened from service to service for individual ingress/egress traffic. Istio sends individual trace information automatically to Jaeger, the distributed tracing platform, even if your modern applications aren't aware of Jaeger at all. In the end, this capability helps developers and operators do troubleshooting easier and quicker at scale.
+
+* * *
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/3/getting-started-jaeger
+
+作者:[Daniel Oh (Red Hat)][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/daniel-oh
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/mesh_networking_dots_connected.png?itok=ovINTRR3 (Mesh networking connected dots)
+[2]: https://blog.buoyant.io/2017/04/25/whats-a-service-mesh-and-why-do-i-need-one/
+[3]: https://istio.io/docs/concepts/what-is-istio/
+[4]: https://www.jaegertracing.io/docs/1.9/
+[5]: https://opensource.com/article/18/10/getting-started-minikube
+[6]: https://www.linux-kvm.org/page/Main_Page
+[7]: https://www.virtualbox.org/wiki/Downloads
+[8]: https://github.com/moby/hyperkit
+[9]: https://kubernetes.io/docs/tasks/tools/install-minikube/
+[10]: https://github.com/istio/istio/releases
+[11]: https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/#customresourcedefinitions
+[12]: https://github.com/istio/istio/tree/master/samples/bookinfo
+[13]: http://localhost:16686/
+[14]: https://opensource.com/sites/default/files/uploads/traces_productpages.png (Find traces in Jaeger)
+[15]: https://opensource.com/sites/default/files/uploads/traces_performance.png (Viewing details about a trace)
diff --git a/sources/tech/20190320 Move your dotfiles to version control.md b/sources/tech/20190320 Move your dotfiles to version control.md
new file mode 100644
index 0000000000..7d070760c7
--- /dev/null
+++ b/sources/tech/20190320 Move your dotfiles to version control.md
@@ -0,0 +1,130 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Move your dotfiles to version control)
+[#]: via: (https://opensource.com/article/19/3/move-your-dotfiles-version-control)
+[#]: author: (Matthew Broberg https://opensource.com/users/mbbroberg)
+
+Move your dotfiles to version control
+======
+Back up or sync your custom configurations across your systems by sharing dotfiles on GitLab or GitHub.
+
+
+
+There is something truly exciting about customizing your operating system through the collection of hidden files we call dotfiles. In [What a Shell Dotfile Can Do For You][1], H. "Waldo" Grunenwald goes into excellent detail about the why and how of setting up your dotfiles. Let's dig into the why and how of sharing them.
+
+### What's a dotfile?
+
+"Dotfiles" is a common term for all the configuration files we have floating around our machines. These files usually start with a **.** at the beginning of the filename, like **.gitconfig** , and operating systems often hide them by default. For example, when I use **ls -a** on MacOS, it shows all the lovely dotfiles that would otherwise not be in the output.
+
+```
+dotfiles on master
+➜ ls
+README.md Rakefile bin misc profiles zsh-custom
+
+dotfiles on master
+➜ ls -a
+. .gitignore .oh-my-zsh README.md zsh-custom
+.. .gitmodules .tmux Rakefile
+.gemrc .global_ignore .vimrc bin
+.git .gvimrc .zlogin misc
+.gitconfig .maid .zshrc profiles
+```
+
+If I take a look at one, **.gitconfig** , which I use for Git configuration, I see a ton of customization. I have account information, terminal color preferences, and tons of aliases that make my command-line interface feel like mine. Here's a snippet from the **[alias]** block:
+
+```
+87 # Show the diff between the latest commit and the current state
+88 d = !"git diff-index --quiet HEAD -- || clear; git --no-pager diff --patch-with-stat"
+89
+90 # `git di $number` shows the diff between the state `$number` revisions ago and the current state
+91 di = !"d() { git diff --patch-with-stat HEAD~$1; }; git diff-index --quiet HEAD -- || clear; d"
+92
+93 # Pull in remote changes for the current repository and all its submodules
+94 p = !"git pull; git submodule foreach git pull origin master"
+95
+96 # Checkout a pull request from origin (of a github repository)
+97 pr = !"pr() { git fetch origin pull/$1/head:pr-$1; git checkout pr-$1; }; pr"
+```
+
+Since my **.gitconfig** has over 200 lines of customization, I have no interest in rewriting it on every new computer or system I use, and either does anyone else. This is one reason sharing dotfiles has become more and more popular, especially with the rise of the social coding site GitHub. The canonical article advocating for sharing dotfiles is Zach Holman's [Dotfiles Are Meant to Be Forked][2] from 2008. The premise is true to this day: I want to share them, with myself, with those new to dotfiles, and with those who have taught me so much by sharing their customizations.
+
+### Sharing dotfiles
+
+Many of us have multiple systems or know hard drives are fickle enough that we want to back up our carefully curated customizations. How do we keep these wonderful files in sync across environments?
+
+My favorite answer is distributed version control, preferably a service that will handle the heavy lifting for me. I regularly use GitHub and continue to enjoy GitLab as I get more experienced with it. Either one is a perfect place to share your information. To set yourself up:
+
+ 1. Sign into your preferred Git-based service.
+ 2. Create a repository called "dotfiles." (Make it public! Sharing is caring.)
+ 3. Clone it to your local environment.*
+ 4. Copy your dotfiles into the folder.
+ 5. Symbolically link (symlink) them back to their target folder (most often **$HOME** ).
+ 6. Push them to the remote repository.
+
+
+
+* You may need to set up your Git configuration commands to clone the repository. Both GitHub and GitLab will prompt you with the commands to run.
+
+
+
+Step 4 above is the crux of this effort and can be a bit tricky. Whether you use a script or do it by hand, the workflow is to symlink from your dotfiles folder to the dotfiles destination so that any updates to your dotfiles are easily pushed to the remote repository. To do this for my **.gitconfig** file, I would enter:
+
+```
+$ cd dotfiles/
+$ ln -nfs .gitconfig $HOME/.gitconfig
+```
+
+The flags added to the symlinking command offer a few additional benefits:
+
+ * **-s** creates a symbolic link instead of a hard link
+ * **-f** continues with other symlinking when an error occurs (not needed here, but useful in loops)
+ * **-n** avoids symlinking a symlink (same as **-h** for other versions of **ln** )
+
+
+
+You can review the IEEE and Open Group [specification of **ln**][3] and the version on [MacOS 10.14.3][4] if you want to dig deeper into the available parameters. I had to look up these flags since I pulled them from someone else's dotfiles.
+
+You can also make updating simpler with a little additional code, like the [Rakefile][5] I forked from [Brad Parbs][6]. Alternatively, you can keep it incredibly simple, as Jeff Geerling does [in his dotfiles][7]. He symlinks files using [this Ansible playbook][8]. Keeping everything in sync at this point is easy: you can cron job or occasionally **git push** from your dotfiles folder.
+
+### Quick aside: What not to share
+
+Before we move on, it is worth noting what you should not add to a shared dotfile repository—even if it starts with a dot. Anything that is a security risk, like files in your **.ssh/** folder, is not a good choice to share using this method. Be sure to double-check your configuration files before publishing them online and triple-check that no API tokens are in your files.
+
+### Where should I start?
+
+If Git is new to you, my [article about the terminology][9] and [a cheat sheet][10] of my most frequently used commands should help you get going.
+
+There are other incredible resources to help you get started with dotfiles. Years ago, I came across [dotfiles.github.io][11] and continue to go back to it for a broader look at what people are doing. There is a lot of tribal knowledge hidden in other people's dotfiles. Take the time to scroll through some and don't be shy about adding them to your own.
+
+I hope this will get you started on the joy of having consistent dotfiles across your computers.
+
+What's your favorite dotfile trick? Add a comment or tweet me [@mbbroberg][12].
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/3/move-your-dotfiles-version-control
+
+作者:[Matthew Broberg][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/mbbroberg
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/article/18/9/shell-dotfile
+[2]: https://zachholman.com/2010/08/dotfiles-are-meant-to-be-forked/
+[3]: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/ln.html
+[4]: https://www.unix.com/man-page/FreeBSD/1/ln/
+[5]: https://github.com/mbbroberg/dotfiles/blob/master/Rakefile
+[6]: https://github.com/bradp/dotfiles
+[7]: https://github.com/geerlingguy/dotfiles
+[8]: https://github.com/geerlingguy/mac-dev-playbook
+[9]: https://opensource.com/article/19/2/git-terminology
+[10]: https://opensource.com/downloads/cheat-sheet-git
+[11]: http://dotfiles.github.io/
+[12]: https://twitter.com/mbbroberg?lang=en
diff --git a/sources/tech/20190320 Nuvola- Desktop Music Player for Streaming Services.md b/sources/tech/20190320 Nuvola- Desktop Music Player for Streaming Services.md
new file mode 100644
index 0000000000..ba0d8d550d
--- /dev/null
+++ b/sources/tech/20190320 Nuvola- Desktop Music Player for Streaming Services.md
@@ -0,0 +1,186 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Nuvola: Desktop Music Player for Streaming Services)
+[#]: via: (https://itsfoss.com/nuvola-music-player)
+[#]: author: (Atharva Lele https://itsfoss.com/author/atharva/)
+
+Nuvola: Desktop Music Player for Streaming Services
+======
+
+[Nuvola][1] is not like your usual music players. It’s different because it allows you to play a number of streaming services in a desktop music player.
+
+Nuvola provides a runtime called [Nuvola Apps Runtime][2] which runs web apps. This is why Nuvola can support a host of streaming services. Some of the major players it supports are:
+
+ * Spotify
+ * Google Play Music
+ * YouTube, YouTube Music
+ * [Pandora][3]
+ * [SoundCloud][4]
+ * and many many more.
+
+
+
+You can find the full list [here][1] in the Music streaming services section. Apple Music is not supported, if you were wondering.
+
+Why would you use a streaming music service in a different desktop player when you can run it in a web browser? The advantage with Nuvola is that it provides tight integration with many [desktop environments][5].
+
+Ideally it should work with all DEs, but the officially supported ones are GNOME, Unity, and Pantheon (elementary OS).
+
+### Features of Nuvola Music Player
+
+Let’s see some of the main features of the open source project Nuvola:
+
+ * Supports a wide variety of music streaming services
+ * Desktop integration with GNOME, Unity, and Pantheon.
+ * Keyboard shortcuts with the ability to customize them
+ * Support for keyboard’s multimedia keys (paid feature)
+ * Background play with notifications
+ * [GNOME Media Player][6] extension support
+ * App Tray indicator
+ * Dark and Light themes
+ * Enable or disable features
+ * Password Manager for web services
+ * Remote control over internet (paid feature)
+ * Available for a lot of distros ([Flatpak][7] packages)
+
+
+
+Complete list of features is available [here][8].
+
+### How to install Nuvola on Ubuntu & other Linux distributions
+
+Installing Nuvola consists of a few more steps than simply adding a PPA and then installing the software. Since it is based on [Flatpak][7], you have to set up Flatpak first and then you can install Nuvola.
+
+[Enable Flatpak Support][9]
+
+The steps are pretty simple. You can follow the guide [here][10] if you want to install using the GUI, however I prefer terminal commands since they’re easier and faster.
+
+**Warning: If already installed, remove the older version of Nuvola (Click to expand)**
+
+If you have ever installed Nuvola before, you need to uninstall it to avoid issues. Run these commands in the terminal to do so.
+
+```
+sudo apt remove nuvolaplayer*
+```
+
+```
+rm -rf ~/.cache/nuvolaplayer3 ~/.local/share/nuvolaplayer ~/.config/nuvolaplayer3 ~/.local/share/applications/nuvolaplayer3*
+```
+
+Once you have made sure that your system has Flatpak, you can install Nuvola using this command:
+
+```
+flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
+flatpak remote-add --if-not-exists nuvola https://dl.tiliado.eu/flatpak/nuvola.flatpakrepo
+```
+
+This is an optional step but I recommend you install this since the service allows you to commonly configure settings like shortcuts for each of the streaming service that you might use.
+
+```
+flatpak install nuvola eu.tiliado.Nuvola
+```
+
+Nuvola supports 29 streaming services. To get them, you need to add those services individually. You can find all the supported music services are available on this [page][10].
+
+For the purpose of this tutorial, I’m going to go with [YouTube Music][11].
+
+```
+flatpak install nuvola eu.tiliado.NuvolaAppYoutubeMusic
+```
+
+After this, you should have the app installed and should be able to see the icon if you search for it.
+
+![Nuvola App specific icons][12]
+
+Clicking on the icon will pop-up the first time setup. You’ll have to accept the Privacy Policy and then continue.
+
+![Terms and Conditions page][13]
+
+After accepting terms and conditions, you should launch into the web app of the respective streaming service, YouTube Music in this case.
+
+![YouTube Music web app running on Nuvola Runtime][14]
+
+In case of installation on other distributions, specific guidelines are available on the [Nuvola website][15].
+
+### My experience with Nuvola Music Player
+
+Initially I thought that it wouldn’t be too different than simply running the web app in [Firefox][16], since many desktop environments like KDE support media controls and shortcuts for media playing in Firefox.
+
+However, this isn’t the case with many other desktops environments and that’s where Nuvola comes in handy. Often, it’s also faster to access than loading the website on the browser.
+
+Once loaded, it behaves pretty much like a normal web app with the benefit of keyboard shortcuts. Speaking of shortcuts, you should check out the list of must know [Ubuntu shortcuts][17].
+
+![Viewing an Artist’s page][18]
+
+Integration with the DE comes in handy when you quickly want to change a song or play/pause your music without leaving your current application. Nuvola gives you access in GNOME notifications as well as provides an app tray icon.
+
+ * ![Notification music controls][19]
+
+ * ![App tray music controls][20]
+
+
+
+
+Keyboard shortcuts work well, globally as well as in-app. You get a notification when the song changes. Whether you do it yourself or it automatically switches to the next song.
+
+![][21]
+
+By default, very few keyboard shortcuts are provided. However you can enable them for almost everything you can do with the app. For example I set the song change shortcuts to Ctrl + Arrow keys as you can see in the screenshot.
+
+![Keyboard Shortcuts][22]
+
+All in all, it works pretty well and it’s fast and responsive. Definitely more so than your usual Snap app.
+
+**Some criticism**
+
+Some thing that did not please me as much was the installation size. Since it requires a browser back-end and GNOME integration it essentially installs a browser and necessary GNOME libraries for Flatpak, so that results in having to install almost 350MB in dependencies.
+
+After that, you install individual apps. The individual apps themselves are not heavy at all. But if you just use one streaming service, having a 300+ MB installation might not be ideal if you’re concerned about disk space.
+
+Nuvola also does not support local music, at least as far as I could find.
+
+**Conclusion**
+
+Hope this article helped you to know more about Nuvola Music Player and its features. If you like such different applications, why not take a look at some of the [lesser known music players for Linux][23]?
+
+As always, if you have any suggestions or questions, I look forward to reading your comments.
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/nuvola-music-player
+
+作者:[Atharva Lele][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/atharva/
+[b]: https://github.com/lujun9972
+[1]: https://nuvola.tiliado.eu/
+[2]: https://nuvola.tiliado.eu/#fn:1
+[3]: https://itsfoss.com/install-pandora-linux-client/
+[4]: https://itsfoss.com/install-soundcloud-linux/
+[5]: https://itsfoss.com/best-linux-desktop-environments/
+[6]: https://extensions.gnome.org/extension/55/media-player-indicator/
+[7]: https://flatpak.org/
+[8]: http://tiliado.github.io/nuvolaplayer/documentation/4/explore.html
+[9]: https://itsfoss.com/flatpak-guide/
+[10]: https://nuvola.tiliado.eu/nuvola/ubuntu/bionic/
+[11]: https://nuvola.tiliado.eu/app/youtube_music/ubuntu/bionic/
+[12]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/03/nuvola_youtube_music_icon.png?resize=800%2C450&ssl=1
+[13]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/03/nuvola_eula.png?resize=800%2C450&ssl=1
+[14]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/nuvola_youtube_music.png?resize=800%2C450&ssl=1
+[15]: https://nuvola.tiliado.eu/index/
+[16]: https://itsfoss.com/why-firefox/
+[17]: https://itsfoss.com/ubuntu-shortcuts/
+[18]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/03/nuvola_web_player.png?resize=800%2C449&ssl=1
+[19]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/nuvola_music_controls.png?fit=800%2C450&ssl=1
+[20]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/03/nuvola_web_player2.png?fit=800%2C450&ssl=1
+[21]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/03/nuvola_song_change_notification-e1553077619208.png?ssl=1
+[22]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/03/nuvola_shortcuts.png?resize=800%2C450&ssl=1
+[23]: https://itsfoss.com/lesser-known-music-players-linux/
diff --git a/sources/tech/20190321 4 ways to jumpstart productivity at work.md b/sources/tech/20190321 4 ways to jumpstart productivity at work.md
new file mode 100644
index 0000000000..679fa75607
--- /dev/null
+++ b/sources/tech/20190321 4 ways to jumpstart productivity at work.md
@@ -0,0 +1,96 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (4 ways to jumpstart productivity at work)
+[#]: via: (https://opensource.com/article/19/3/guide-being-more-productive)
+[#]: author: (Sarah Wall https://opensource.com/users/sarahwall)
+
+4 ways to jumpstart productivity at work
+======
+
+This article includes six open source productivity tools.
+
+![][1]
+
+Time poverty—the idea that there's not enough time to do all the work we need to do—is it a perception or a reality?
+
+The truth is you'll never get more than 24 hours out of any day. Working longer hours doesn't help. Your productivity actually decreases the longer you work in a given day. Your perception, or intuitive understanding of your time, is what matters. One key to managing productivity is how you use the time you've got.
+
+You have lots of time that you can use more efficiently, including time lost to ineffective meetings, distractions, and context switching between tasks. By spending your time more wisely, you can get more done and achieve higher overall job performance. You will also have a higher level of job satisfaction and feel lower levels of stress.
+
+### Jumpstart your productivity
+
+#### 1\. Eliminate distractions
+
+When you have too many things vying for your attention, it slows you down and decreases your productivity. Do your best to remove every distraction that pulls you off tasks.
+
+Cellphones, email, and messaging apps are the most common drains on productivity. Set the ringer on your phone to vibrate, set specific times for checking email, and close irrelevant browser tabs. With this approach, your work will be interrupted less throughout the day.
+
+#### 2\. Make your to-do list _verb-oriented_
+
+To-do lists are a great way to help you focus on exactly what you need to accomplish each day. Some people do best with a physical list, like a notebook, and others do better with digital tools. Check out these suggestions for [open source productivity tools][2] to help you manage your workflow. Or check these six open source tools to stay organized:
+
+ * [Joplin, a note-taking app][3]
+ * [Wekan, an open source kanban board][4]
+ * [TaskBoard, a lightweight kanban board][5]
+ * [Go For It, a flexible to-do list application][6]
+ * [Org mode without Emacs][7]
+ * [Freeplane, an open source mind-mapping application][8]
+
+
+
+Your list can be as sophisticated or as simple as you like, but just making a list is not enough. What goes on your list makes all the difference. Every item that goes on your list should be actionable. The trick is to make sure there's a verb. For example, "Smith project" is not actionable enough. "Outline key deliverables on Smith project" gives you a more concrete task to complete.
+
+#### 3\. Stick to the 10-minute rule
+
+Overwhelmed by an unclear or unwieldy task? Break it into 10-minute mini-tasks instead. This can be a great way to take something unmanageable and turn it into something achievable.
+
+The beauty of 10-minute tasks is they can be fit into many parts of your day. When you get into the office in the morning and are feeling fresh, kick off your day with a burst of productivity with a few 10-minute tasks. Losing momentum in the afternoon? A 10-minute job can help you regain speed.
+
+Ten-minute tasks are also a good way to identify tasks that can be delegated to others. The ability to delegate work is often one of the most effective management techniques. By finding a simple task that can be accomplished by another member of your team, you can make short work of a big job.
+
+#### 4\. Take a break
+
+Another drain on productivity is the urge to keep pressing ahead on a task to complete it without taking a break. Suddenly you feel really fatigued or hungry, and you realize you haven't gone to the bathroom in hours! Your concentration is affected, and therefore your productivity decreases.
+
+Set benchmarks for taking breaks and stick to them. For example, commit to once per hour to get up and move around for five minutes. If you're pressed for time, stand up and stretch for two minutes. Changing your body position and focusing on the present moment will help relieve any mental tension that has built up.
+
+Hydrate your mind with a glass of water. When your body is not properly hydrated, it can put increased stress on your brain. As little as a one to three percent decrease in hydration can negatively affect your memory, concentration, and decision-making.
+
+### Don't fall into the time-poverty trap
+
+Time is limited and time poverty is just an idea. How you choose to spend the time you have each day is what's important. When you develop new, healthy habits, you can increase your productivity and direct your time in the ways that give the most value.
+
+* * *
+
+_This article was adapted from "[The Keys to Productivity][9]" on ImageX's blog._
+
+_Sarah Wall will present_ [_Mindless multitasking: a dummy's guide to productivity_][10], _at_ [_DrupalCon_][11] _in Seattle, April 8-12, 2019._
+
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/3/guide-being-more-productive
+
+作者:[Sarah Wall][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/sarahwall
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/rh_commun_4604_02_mech_connections_rhcz0.5x.png?itok=YPPU4dMj
+[2]: https://opensource.com/article/16/11/open-source-productivity-hacks
+[3]: https://opensource.com/article/19/1/productivity-tool-joplin
+[4]: https://opensource.com/article/19/1/productivity-tool-wekan
+[5]: https://opensource.com/article/19/1/productivity-tool-taskboard
+[6]: https://opensource.com/article/19/1/productivity-tool-go-for-it
+[7]: https://opensource.com/article/19/1/productivity-tool-org-mode
+[8]: https://opensource.com/article/19/1/productivity-tool-freeplane
+[9]: https://imagexmedia.com/managing-productivity
+[10]: https://events.drupal.org/seattle2019/sessions/mindless-multitasking-dummy%E2%80%99s-guide-productivity
+[11]: https://events.drupal.org/seattle2019
diff --git a/sources/tech/20190321 How To Setup Linux Media Server Using Jellyfin.md b/sources/tech/20190321 How To Setup Linux Media Server Using Jellyfin.md
new file mode 100644
index 0000000000..9c3de11bc5
--- /dev/null
+++ b/sources/tech/20190321 How To Setup Linux Media Server Using Jellyfin.md
@@ -0,0 +1,268 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (How To Setup Linux Media Server Using Jellyfin)
+[#]: via: (https://www.ostechnix.com/how-to-setup-linux-media-server-using-jellyfin/)
+[#]: author: (sk https://www.ostechnix.com/author/sk/)
+
+How To Setup Linux Media Server Using Jellyfin
+======
+
+![Setup Linux Media Server Using Jellyfin][1]
+
+We’ve already written about setting up your own streaming media server on Linux using [**Streama**][2]. Today, we will going to setup yet another media server using **Jellyfin**. Jellyfin is a free, cross-platform and open source alternative to propriety media streaming applications such as **Emby** and **Plex**. The main developer of Jellyfin forked it from Emby after the announcement of Emby transitioning to a proprietary model. Jellyfin doesn’t include any premium features, licenses or membership plans. It is completely free and open source project supported by hundreds of community members. Using jellyfin, we can instantly setup Linux media server in minutes and access it via LAN/WAN from any devices using multiple apps.
+
+### Setup Linux Media Server Using Jellyfin
+
+Jellyfin supports GNU/Linux, Mac OS and Microsoft Windows operating systems. You can install it on your Linux distribution as described below.
+
+##### Install Jellyfin On Linux
+
+As of writing this guide, Jellyfin packages are available for most popular Linux distributions, such as Arch Linux, Debian, CentOS, Fedora and Ubuntu.
+
+On **Arch Linux** and its derivatives like **Antergos** , **Manjaro Linux** , you can install Jellyfin using any AUR helper tools, for example [**YaY**][3].
+
+```
+$ yay -S jellyfin-git
+```
+
+On **CentOS/RHEL** :
+
+Download the latest Jellyfin rpm package from [**here**][4] and install it as shown below.
+
+```
+$ wget https://repo.jellyfin.org/releases/server/centos/jellyfin-10.2.2-1.el7.x86_64.rpm
+
+$ sudo yum localinstall jellyfin-10.2.2-1.el7.x86_64.rpm
+```
+
+On **Fedora** :
+
+Download Jellyfin for Fedora from [**here**][5].
+
+```
+$ wget https://repo.jellyfin.org/releases/server/fedora/jellyfin-10.2.2-1.fc29.x86_64.rpm
+
+$ sudo dnf install jellyfin-10.2.2-1.fc29.x86_64.rpm
+```
+
+On **Debian** :
+
+Install HTTPS transport for APT if it is not installed already:
+
+```
+$ sudo apt install apt-transport-https
+```
+
+Import Jellyfin GPG signing key:``
+
+```
+$ wget -O - https://repo.jellyfin.org/debian/jellyfin_team.gpg.key | sudo apt-key add -
+```
+
+Add Jellyfin repository:
+
+```
+$ sudo touch /etc/apt/sources.list.d/jellyfin.list
+
+$ echo "deb [arch=amd64] https://repo.jellyfin.org/debian $( lsb_release -c -s ) main" | sudo tee /etc/apt/sources.list.d/jellyfin.list
+```
+
+Finally, update Jellyfin repository and install Jellyfin using commands:``
+
+```
+$ sudo apt update
+
+$ sudo apt install jellyfin
+```
+
+On **Ubuntu 18.04 LTS** :
+
+Install HTTPS transport for APT if it is not installed already:
+
+```
+$ sudo apt install apt-transport-https
+```
+
+Import and add Jellyfin GPG signing key:``
+
+```
+$ wget -O - https://repo.jellyfin.org/debian/jellyfin_team.gpg.key | sudo apt-key add -
+```
+
+Add the Jellyfin repository:
+
+```
+$ sudo touch /etc/apt/sources.list.d/jellyfin.list
+
+$ echo "deb https://repo.jellyfin.org/ubuntu bionic main" | sudo tee /etc/apt/sources.list.d/jellyfin.list
+```
+
+For Ubuntu 16.04, just replace **bionic** with **xenial** in the above URL.
+
+Finally, update Jellyfin repository and install Jellyfin using commands:``
+
+```
+$ sudo apt update
+
+$ sudo apt install jellyfin
+```
+
+##### Start Jellyfin service
+
+Run the following commands to enable and start jellyfin service on every reboot:
+
+```
+$ sudo systemctl enable jellyfin
+
+$ sudo systemctl start jellyfin
+```
+
+To check if the service has been started or not, run:
+
+```
+$ sudo systemctl status jellyfin
+```
+
+Sample output:
+
+```
+● jellyfin.service - Jellyfin Media Server
+Loaded: loaded (/lib/systemd/system/jellyfin.service; enabled; vendor preset: enabled)
+Drop-In: /etc/systemd/system/jellyfin.service.d
+└─jellyfin.service.conf
+Active: active (running) since Wed 2019-03-20 12:20:19 UTC; 1s ago
+Main PID: 4556 (jellyfin)
+Tasks: 11 (limit: 2320)
+CGroup: /system.slice/jellyfin.service
+└─4556 /usr/bin/jellyfin --datadir=/var/lib/jellyfin --configdir=/etc/jellyfin --logdir=/var/log/jellyfin --cachedir=/var/cache/jellyfin --r
+
+Mar 20 12:20:21 ubuntuserver jellyfin[4556]: [12:20:21] [INF] Loading Emby.Photos, Version=10.2.2.0, Culture=neutral, PublicKeyToken=null
+Mar 20 12:20:21 ubuntuserver jellyfin[4556]: [12:20:21] [INF] Loading Emby.Server.Implementations, Version=10.2.2.0, Culture=neutral, PublicKeyToken=nu
+Mar 20 12:20:21 ubuntuserver jellyfin[4556]: [12:20:21] [INF] Loading MediaBrowser.MediaEncoding, Version=10.2.2.0, Culture=neutral, PublicKeyToken=nul
+Mar 20 12:20:21 ubuntuserver jellyfin[4556]: [12:20:21] [INF] Loading Emby.Dlna, Version=10.2.2.0, Culture=neutral, PublicKeyToken=null
+Mar 20 12:20:21 ubuntuserver jellyfin[4556]: [12:20:21] [INF] Loading MediaBrowser.LocalMetadata, Version=10.2.2.0, Culture=neutral, PublicKeyToken=nul
+Mar 20 12:20:21 ubuntuserver jellyfin[4556]: [12:20:21] [INF] Loading Emby.Notifications, Version=10.2.2.0, Culture=neutral, PublicKeyToken=null
+Mar 20 12:20:21 ubuntuserver jellyfin[4556]: [12:20:21] [INF] Loading MediaBrowser.XbmcMetadata, Version=10.2.2.0, Culture=neutral, PublicKeyToken=null
+Mar 20 12:20:21 ubuntuserver jellyfin[4556]: [12:20:21] [INF] Loading jellyfin, Version=10.2.2.0, Culture=neutral, PublicKeyToken=null
+Mar 20 12:20:21 ubuntuserver jellyfin[4556]: [12:20:21] [INF] Sqlite version: 3.26.0
+Mar 20 12:20:21 ubuntuserver jellyfin[4556]: [12:20:21] [INF] Sqlite compiler options: COMPILER=gcc-5.4.0 20160609,DEFAULT_FOREIGN_KEYS,ENABLE_COLUMN_M
+```
+
+If you see an output something, congratulations! Jellyfin service has been started.
+
+Next, we should do some initial configuration.
+
+##### Configure Jellyfin
+
+Once jellyfin is installed, open the browser and navigate to – **http:// :8096** or **http:// :8096** URL.
+
+You will see the following welcome screen. Select your preferred language and click Next.
+
+![][6]
+
+Enter your user details. You can add more users later from the Jellyfin Dashboard.
+
+![][7]
+
+The next step is to select media files which we want to stream. To do so, click “Add media Library” button:
+
+![][8]
+
+Choose the content type (i.e audio, video, movies etc.,), display name and click plus (+) sign next to the Folders icon to choose the location where you kept your media files. You can further choose other library settings such as the preferred download language, country etc. Click Ok after choosing the preferred options.
+
+![][9]
+
+Similarly, add all of the media files. Once you have chosen everything to stream, click Next.
+
+![][10]
+
+Choose the Metadata language and click Next:
+
+![][11]
+
+Next, you need to configure whether you want to allow remote connections to this media server. Make sure you have allowed the remote connections. Also, enable automatic port mapping and click Next:
+
+![][12]
+
+You’re all set! Click Finish to complete Jellyfin configuration.
+
+![][13]
+
+You will now be redirected to Jellyfin login page. Click on the username and enter it’s password which we setup earlier.
+
+![][14]
+
+This is how Jellyfin dashboard looks like.
+
+![][15]
+
+As you see in the screenshot, all of your media files are shown in the dashboard itself under My Media section. Just click on the any media file of your choice and start watching it!!
+
+![][16]
+
+You can access this Jellyfin media server from any systems on the network using URL – . You need not to install any extra apps. All you need is a modern web browser.
+
+If you want to change anything or reconfigure, click on the three horizontal bars from the Home screen. Here, you can add users, media files, change playback settings, add TV/DVR, install plugins, change default port no and a lot more settings.
+
+![][17]
+
+For more details, check out [**Jellyfin official documentation**][18] page.
+
+And, that’s all for now. As you can see setting up a streaming media server on Linux is no big-deal. I tested it on my Ubuntu 18.04 LTS VM. It worked fine out of the box. I can be able to watch the movies from other systems in my LAN. If you’re looking for easy, quick and free solution for hosting a media server, Jellyfin is a good choice.
+
+Cheers!
+
+
+
+--------------------------------------------------------------------------------
+
+via: https://www.ostechnix.com/how-to-setup-linux-media-server-using-jellyfin/
+
+作者:[sk][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.ostechnix.com/author/sk/
+[b]: https://github.com/lujun9972
+[1]: data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7
+[2]: https://www.ostechnix.com/streama-setup-your-own-streaming-media-server-in-minutes/
+[3]: https://www.ostechnix.com/yay-found-yet-another-reliable-aur-helper/
+[4]: https://repo.jellyfin.org/releases/server/centos/
+[5]: https://repo.jellyfin.org/releases/server/fedora/
+[6]: http://www.ostechnix.com/wp-content/uploads/2019/03/jellyfin-1.png
+[7]: http://www.ostechnix.com/wp-content/uploads/2019/03/jellyfin-2-1.png
+[8]: http://www.ostechnix.com/wp-content/uploads/2019/03/jellyfin-3-1.png
+[9]: http://www.ostechnix.com/wp-content/uploads/2019/03/jellyfin-4-1.png
+[10]: http://www.ostechnix.com/wp-content/uploads/2019/03/jellyfin-5-1.png
+[11]: http://www.ostechnix.com/wp-content/uploads/2019/03/jellyfin-6.png
+[12]: http://www.ostechnix.com/wp-content/uploads/2019/03/jellyfin-7.png
+[13]: http://www.ostechnix.com/wp-content/uploads/2019/03/jellyfin-8-1.png
+[14]: http://www.ostechnix.com/wp-content/uploads/2019/03/jellyfin-9.png
+[15]: http://www.ostechnix.com/wp-content/uploads/2019/03/jellyfin-10.png
+[16]: http://www.ostechnix.com/wp-content/uploads/2019/03/jellyfin-11.png
+[17]: http://www.ostechnix.com/wp-content/uploads/2019/03/jellyfin-12.png
+[18]: https://jellyfin.readthedocs.io/en/latest/
+[19]: https://github.com/jellyfin/jellyfin
+[20]: http://feedburner.google.com/fb/a/mailverify?uri=ostechnix (Subscribe to our Email newsletter)
+[21]: https://www.paypal.me/ostechnix (Donate Via PayPal)
+[22]: http://ostechnix.tradepub.com/category/information-technology/1207/
+[23]: https://www.facebook.com/ostechnix/
+[24]: https://twitter.com/ostechnix
+[25]: https://plus.google.com/+SenthilkumarP/
+[26]: https://www.linkedin.com/in/ostechnix
+[27]: http://feeds.feedburner.com/Ostechnix
+[28]: https://www.ostechnix.com/how-to-setup-linux-media-server-using-jellyfin/?share=reddit (Click to share on Reddit)
+[29]: https://www.ostechnix.com/how-to-setup-linux-media-server-using-jellyfin/?share=twitter (Click to share on Twitter)
+[30]: https://www.ostechnix.com/how-to-setup-linux-media-server-using-jellyfin/?share=facebook (Click to share on Facebook)
+[31]: https://www.ostechnix.com/how-to-setup-linux-media-server-using-jellyfin/?share=linkedin (Click to share on LinkedIn)
+[32]: https://www.ostechnix.com/how-to-setup-linux-media-server-using-jellyfin/?share=pocket (Click to share on Pocket)
+[33]: https://api.whatsapp.com/send?text=How%20To%20Setup%20Linux%20Media%20Server%20Using%20Jellyfin%20https%3A%2F%2Fwww.ostechnix.com%2Fhow-to-setup-linux-media-server-using-jellyfin%2F (Click to share on WhatsApp)
+[34]: https://www.ostechnix.com/how-to-setup-linux-media-server-using-jellyfin/?share=telegram (Click to share on Telegram)
+[35]: https://www.ostechnix.com/how-to-setup-linux-media-server-using-jellyfin/?share=email (Click to email this to a friend)
+[36]: https://www.ostechnix.com/how-to-setup-linux-media-server-using-jellyfin/#print (Click to print)
diff --git a/sources/tech/20190321 How to use Spark SQL- A hands-on tutorial.md b/sources/tech/20190321 How to use Spark SQL- A hands-on tutorial.md
new file mode 100644
index 0000000000..0e4be0aa01
--- /dev/null
+++ b/sources/tech/20190321 How to use Spark SQL- A hands-on tutorial.md
@@ -0,0 +1,540 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (How to use Spark SQL: A hands-on tutorial)
+[#]: via: (https://opensource.com/article/19/3/apache-spark-and-dataframes-tutorial)
+[#]: author: (Dipanjan Sarkar https://opensource.com/users/djsarkar)
+
+How to use Spark SQL: A hands-on tutorial
+======
+
+This tutorial explains how to leverage relational databases at scale using Spark SQL and DataFrames.
+
+![Team checklist and to dos][1]
+
+In the [first part][2] of this series, we looked at advances in leveraging the power of relational databases "at scale" using [Apache Spark SQL and DataFrames][3]. We will now do a simple tutorial based on a real-world dataset to look at how to use Spark SQL. We will be using Spark DataFrames, but the focus will be more on using SQL. In a separate article, I will cover a detailed discussion around Spark DataFrames and common operations.
+
+I love using cloud services for my machine learning, deep learning, and even big data analytics needs, instead of painfully setting up my own Spark cluster. I will be using the Databricks Platform for my Spark needs. Databricks is a company founded by the creators of Apache Spark that aims to help clients with cloud-based big data processing using Spark.
+
+![Apache Spark and Databricks][4]
+
+The simplest (and free of charge) way is to go to the [Try Databricks page][5] and [sign up for a community edition][6] account. You get a cloud-based cluster, which is a single-node cluster with 6GB and unlimited notebooks—not bad for a free version! I recommend using the Databricks Platform if you have serious needs for analyzing big data.
+
+Let's get started with our case study now. Feel free to create a new notebook from your home screen in Databricks or your own Spark cluster.
+
+![Create a notebook][7]
+
+You can also import my notebook containing the entire tutorial, but please make sure to run every cell and play around and explore with it, instead of just reading through it. Unsure of how to use Spark on Databricks? Follow [this short but useful tutorial][8].
+
+This tutorial will familiarize you with essential Spark capabilities to deal with structured data often obtained from databases or flat files. We will explore typical ways of querying and aggregating relational data by leveraging concepts of DataFrames and SQL using Spark. We will work on an interesting dataset from the [KDD Cup 1999][9] and try to query the data using high-level abstractions like the dataframe that has already been a hit in popular data analysis tools like R and Python. We will also look at how easy it is to build data queries using the SQL language and retrieve insightful information from our data. This also happens at scale without us having to do a lot more since Spark distributes these data structures efficiently in the backend, which makes our queries scalable and as efficient as possible. We'll start by loading some basic dependencies.
+
+```
+import pandas as pd
+import matplotlib.pyplot as plt
+plt.style.use('fivethirtyeight')
+```
+
+#### Data retrieval
+
+The [KDD Cup 1999][9] dataset was used for the Third International Knowledge Discovery and Data Mining Tools Competition, which was held in conjunction with KDD-99, the Fifth International Conference on Knowledge Discovery and Data Mining. The competition task was to build a network-intrusion detector, a predictive model capable of distinguishing between _bad connections_ , called intrusions or attacks, and _good, normal connections_. This database contains a standard set of data to be audited, which includes a wide variety of intrusions simulated in a military network environment.
+
+We will be using the reduced dataset **kddcup.data_10_percent.gz** that contains nearly a half-million network interactions. We will download this Gzip file from the web locally and then work on it. If you have a good, stable internet connection, feel free to download and work with the full dataset, **kddcup.data.gz**.
+
+#### Working with data from the web
+
+Dealing with datasets retrieved from the web can be a bit tricky in Databricks. Fortunately, we have some excellent utility packages like **dbutils** that help make our job easier. Let's take a quick look at some essential functions for this module.
+
+```
+dbutils.help()
+```
+
+```
+This module provides various utilities for users to interact with the rest of Databricks.
+
+fs: DbfsUtils -> Manipulates the Databricks filesystem (DBFS) from the console
+meta: MetaUtils -> Methods to hook into the compiler (EXPERIMENTAL)
+notebook: NotebookUtils -> Utilities for the control flow of a notebook (EXPERIMENTAL)
+preview: Preview -> Utilities under preview category
+secrets: SecretUtils -> Provides utilities for leveraging secrets within notebooks
+widgets: WidgetsUtils -> Methods to create and get bound value of input widgets inside notebooks
+```
+
+#### Retrieve and store data in Databricks
+
+We will now leverage the Python **urllib** library to extract the KDD Cup 99 data from its web repository, store it in a temporary location, and move it to the Databricks filesystem, which can enable easy access to this data for analysis
+
+> **Note:** If you skip this step and download the data directly, you may end up getting a **InvalidInputException: Input path does not exist** error.
+
+```
+import urllib
+urllib.urlretrieve("", "/tmp/kddcup_data.gz")
+dbutils.fs.mv("file:/tmp/kddcup_data.gz", "dbfs:/kdd/kddcup_data.gz")
+display(dbutils.fs.ls("dbfs:/kdd"))
+```
+
+![Spark Job kddcup_data.gz][10]
+
+#### Build the KDD dataset
+
+Now that we have our data stored in the Databricks filesystem, let's load up our data from the disk into Spark's traditional abstracted data structure, the [Resilient Distributed Dataset][11] (RDD).
+
+```
+data_file = "dbfs:/kdd/kddcup_data.gz"
+raw_rdd = sc.textFile(data_file).cache()
+raw_rdd.take(5)
+```
+
+![Data in Resilient Distributed Dataset \(RDD\)][12]
+
+You can also verify the type of data structure of our data (RDD) using the following code.
+
+```
+type(raw_rdd)
+```
+
+![output][13]
+
+#### Build a Spark DataFrame on our data
+
+A Spark DataFrame is an interesting data structure representing a distributed collecion of data. Typically the entry point into all SQL functionality in Spark is the **SQLContext** class. To create a basic instance of this call, all we need is a **SparkContext** reference. In Databricks, this global context object is available as **sc** for this purpose.
+
+```
+from pyspark.sql import SQLContext
+sqlContext = SQLContext(sc)
+sqlContext
+```
+
+![output][14]
+
+#### Split the CSV data
+
+Each entry in our RDD is a comma-separated line of data, which we first need to split before we can parse and build our dataframe.
+
+```
+csv_rdd = raw_rdd.map(lambda row: row.split(","))
+print(csv_rdd.take(2))
+print(type(csv_rdd))
+```
+
+![Splitting RDD entries][15]
+
+#### Check the total number of features (columns)
+
+We can use the following code to check the total number of potential columns in our dataset.
+
+```
+len(csv_rdd.take(1)[0])
+
+Out[57]: 42
+```
+
+#### Understand and parse data
+
+The KDD 99 Cup data consists of different attributes captured from connection data. You can obtain the [full list of attributes in the data][16] and further details pertaining to the [description for each attribute/column][17]. We will just be using some specific columns from the dataset, the details of which are specified as follows.
+
+feature num | feature name | description | type
+---|---|---|---
+1 | duration | length (number of seconds) of the connection | continuous
+2 | protocol_type | type of the protocol, e.g., tcp, udp, etc. | discrete
+3 | service | network service on the destination, e.g., http, telnet, etc. | discrete
+4 | src_bytes | number of data bytes from source to destination | continuous
+5 | dst_bytes | number of data bytes from destination to source | continuous
+6 | flag | normal or error status of the connection | discrete
+7 | wrong_fragment | number of "wrong" fragments | continuous
+8 | urgent | number of urgent packets | continuous
+9 | hot | number of "hot" indicators | continuous
+10 | num_failed_logins | number of failed login attempts | continuous
+11 | num_compromised | number of "compromised" conditions | continuous
+12 | su_attempted | 1 if "su root" command attempted; 0 otherwise | discrete
+13 | num_root | number of "root" accesses | continuous
+14 | num_file_creations | number of file creation operations | continuous
+
+We will be extracting the following columns based on their positions in each data point (row) and build a new RDD as follows.
+
+```
+from pyspark.sql import Row
+
+parsed_rdd = csv_rdd.map(lambda r: Row(
+ duration=int(r[0]),
+ protocol_type=r[1],
+ service=r[2],
+ flag=r[3],
+ src_bytes=int(r[4]),
+ dst_bytes=int(r[5]),
+ wrong_fragment=int(r[7]),
+ urgent=int(r[8]),
+ hot=int(r[9]),
+ num_failed_logins=int(r[10]),
+ num_compromised=int(r[12]),
+ su_attempted=r[14],
+ num_root=int(r[15]),
+ num_file_creations=int(r[16]),
+ label=r[-1]
+ )
+)
+parsed_rdd.take(5)
+```
+
+![Extracting columns][18]
+
+#### Construct the DataFrame
+
+Now that our data is neatly parsed and formatted, let's build our DataFrame!
+```
+
+```
+
+df = sqlContext.createDataFrame(parsed_rdd)
+display(df.head(10))
+
+![DataFrame][19]
+
+You can also now check out the schema of our DataFrame using the following code.
+
+```
+df.printSchema()
+```
+
+![Dataframe schema][20]
+
+#### Build a temporary table
+
+We can leverage the **registerTempTable()** function to build a temporary table to run SQL commands on our DataFrame at scale! A point to remember is that the lifetime of this temp table is tied to the session. It creates an in-memory table that is scoped to the cluster in which it was created. The data is stored using Hive's highly optimized, in-memory columnar format.
+
+You can also check out **saveAsTable()** , which creates a permanent, physical table stored in S3 using the Parquet format. This table is accessible to all clusters. The table metadata, including the location of the file(s), is stored within the Hive metastore.
+
+```
+help(df.registerTempTable)
+```
+
+![help\(df.registerTempTable\)][21]
+
+```
+df.registerTempTable("connections")
+```
+
+### Execute SQL at Scale
+
+Let's look at a few examples of how we can run SQL queries on our table based off of our dataframe. We will start with some simple queries and then look at aggregations, filters, sorting, sub-queries, and pivots in this tutorial.
+
+#### Connections based on the protocol type
+
+Let's look at how we can get the total number of connections based on the type of connectivity protocol. First, we will get this information using normal DataFrame DSL syntax to perform aggregations.
+
+```
+display(df.groupBy('protocol_type')
+.count()
+.orderBy('count', ascending=False))
+```
+
+![Total number of connections][22]
+
+Can we also use SQL to perform the same aggregation? Yes, we can leverage the table we built earlier for this!
+
+```
+protocols = sqlContext.sql("""
+ SELECT protocol_type, count(*) as freq
+ FROM connections
+ GROUP BY protocol_type
+ ORDER BY 2 DESC
+ """)
+display(protocols)
+```
+
+![protocol type and frequency][23]
+
+You can clearly see that you get the same results and don't need to worry about your background infrastructure or how the code is executed. Just write simple SQL!
+
+#### Connections based on good or bad (attack types) signatures
+
+We will now run a simple aggregation to check the total number of connections based on good (normal) or bad (intrusion attacks) types.
+
+```
+labels = sqlContext.sql("""
+ SELECT label, count(*) as freq
+ FROM connections
+ GROUP BY label
+ ORDER BY 2 DESC
+""")
+display(labels)
+```
+
+![Connection by type][24]
+
+We have a lot of different attack types. We can visualize this in the form of a bar chart. The simplest way is to use the excellent interface options in the Databricks notebook.
+
+![Databricks chart types][25]
+
+This gives us a nice-looking bar chart, which you can customize further by clicking on **Plot Options**.
+
+![Bar chart][26]
+
+Another way is to write the code to do it. You can extract the aggregated data as a Pandas DataFrame and plot it as a regular bar chart.
+
+```
+labels_df = pd.DataFrame(labels.toPandas())
+labels_df.set_index("label", drop=True,inplace=True)
+labels_fig = labels_df.plot(kind='barh')
+
+plt.rcParams["figure.figsize"] = (7, 5)
+plt.rcParams.update({'font.size': 10})
+plt.tight_layout()
+display(labels_fig.figure)
+```
+
+![Bar chart][27]
+
+### Connections based on protocols and attacks
+
+Let's look at which protocols are most vulnerable to attacks by using the following SQL query.
+
+```
+
+attack_protocol = sqlContext.sql("""
+ SELECT
+ protocol_type,
+ CASE label
+ WHEN 'normal.' THEN 'no attack'
+ ELSE 'attack'
+ END AS state,
+ COUNT(*) as freq
+ FROM connections
+ GROUP BY protocol_type, state
+ ORDER BY 3 DESC
+""")
+display(attack_protocol)
+```
+
+![Protocols most vulnerable to attacks][28]
+
+Well, it looks like ICMP connections, followed by TCP connections have had the most attacks.
+
+#### Connection stats based on protocols and attacks
+
+Let's take a look at some statistical measures pertaining to these protocols and attacks for our connection requests.
+
+```
+attack_stats = sqlContext.sql("""
+ SELECT
+ protocol_type,
+ CASE label
+ WHEN 'normal.' THEN 'no attack'
+ ELSE 'attack'
+ END AS state,
+ COUNT(*) as total_freq,
+ ROUND(AVG(src_bytes), 2) as mean_src_bytes,
+ ROUND(AVG(dst_bytes), 2) as mean_dst_bytes,
+ ROUND(AVG(duration), 2) as mean_duration,
+ SUM(num_failed_logins) as total_failed_logins,
+ SUM(num_compromised) as total_compromised,
+ SUM(num_file_creations) as total_file_creations,
+ SUM(su_attempted) as total_root_attempts,
+ SUM(num_root) as total_root_acceses
+ FROM connections
+ GROUP BY protocol_type, state
+ ORDER BY 3 DESC
+""")
+display(attack_stats)
+```
+
+![Statistics pertaining to protocols and attacks][29]
+
+Looks like the average amount of data being transmitted in TCP requests is much higher, which is not surprising. Interestingly, attacks have a much higher average payload of data being transmitted from the source to the destination.
+
+#### Filtering connection stats based on the TCP protocol by service and attack type
+
+Let's take a closer look at TCP attacks, given that we have more relevant data and statistics for the same. We will now aggregate different types of TCP attacks based on service and attack type and observe different metrics.
+
+```
+tcp_attack_stats = sqlContext.sql("""
+SELECT
+service,
+label as attack_type,
+COUNT(*) as total_freq,
+ROUND(AVG(duration), 2) as mean_duration,
+SUM(num_failed_logins) as total_failed_logins,
+SUM(num_file_creations) as total_file_creations,
+SUM(su_attempted) as total_root_attempts,
+SUM(num_root) as total_root_acceses
+FROM connections
+WHERE protocol_type = 'tcp'
+AND label != 'normal.'
+GROUP BY service, attack_type
+ORDER BY total_freq DESC
+""")
+display(tcp_attack_stats)
+```
+
+![TCP attack data][30]
+
+There are a lot of attack types, and the preceding output shows a specific section of them.
+
+#### Filtering connection stats based on the TCP protocol by service and attack type
+
+We will now filter some of these attack types by imposing some constraints in our query based on duration, file creations, and root accesses.
+
+```
+tcp_attack_stats = sqlContext.sql("""
+SELECT
+service,
+label as attack_type,
+COUNT(*) as total_freq,
+ROUND(AVG(duration), 2) as mean_duration,
+SUM(num_failed_logins) as total_failed_logins,
+SUM(num_file_creations) as total_file_creations,
+SUM(su_attempted) as total_root_attempts,
+SUM(num_root) as total_root_acceses
+FROM connections
+WHERE (protocol_type = 'tcp'
+AND label != 'normal.')
+GROUP BY service, attack_type
+HAVING (mean_duration >= 50
+AND total_file_creations >= 5
+AND total_root_acceses >= 1)
+ORDER BY total_freq DESC
+""")
+display(tcp_attack_stats)
+```
+
+![Filtered by attack type][31]
+
+It's interesting to see that [multi-hop attacks][32] can get root accesses to the destination hosts!
+
+#### Subqueries to filter TCP attack types based on service
+
+Let's try to get all the TCP attacks based on service and attack type such that the overall mean duration of these attacks is greater than zero ( **> 0** ). For this, we can do an inner query with all aggregation statistics and extract the relevant queries and apply a mean duration filter in the outer query, as shown below.
+
+```
+tcp_attack_stats = sqlContext.sql("""
+SELECT
+t.service,
+t.attack_type,
+t.total_freq
+FROM
+(SELECT
+service,
+label as attack_type,
+COUNT(*) as total_freq,
+ROUND(AVG(duration), 2) as mean_duration,
+SUM(num_failed_logins) as total_failed_logins,
+SUM(num_file_creations) as total_file_creations,
+SUM(su_attempted) as total_root_attempts,
+SUM(num_root) as total_root_acceses
+FROM connections
+WHERE protocol_type = 'tcp'
+AND label != 'normal.'
+GROUP BY service, attack_type
+ORDER BY total_freq DESC) as t
+WHERE t.mean_duration > 0
+""")
+display(tcp_attack_stats)
+```
+
+![TCP attacks based on service and attack type][33]
+
+This is nice! Now another interesting way to view this data is to use a pivot table, where one attribute represents rows and another one represents columns. Let's see if we can leverage Spark DataFrames to do this!
+
+#### Build a pivot table from aggregated data
+
+We will build upon the previous DataFrame object where we aggregated attacks based on type and service. For this, we can leverage the power of Spark DataFrames and the DataFrame DSL.
+
+```
+display((tcp_attack_stats.groupby('service')
+.pivot('attack_type')
+.agg({'total_freq':'max'})
+.na.fill(0))
+)
+```
+
+![Pivot table][34]
+
+We get a nice, neat pivot table showing all the occurrences based on service and attack type!
+
+### Next steps
+
+I would encourage you to go out and play with Spark SQL and DataFrames. You can even [import my notebook][35] and play with it in your own account.
+
+Feel free to refer to [my GitHub repository][36] also for all the code and notebooks used in this article. It covers things we didn't cover here, including:
+
+ * Joins
+ * Window functions
+ * Detailed operations and transformations of Spark DataFrames
+
+
+
+You can also access my tutorial as a [Jupyter Notebook][37], in case you want to use it offline.
+
+There are plenty of articles and tutorials available online, so I recommend you check them out. One useful resource is Databricks' complete [guide to Spark SQL][38].
+
+Thinking of working with JSON data but unsure of using Spark SQL? Databricks supports it! Check out this excellent guide to [JSON support in Spark SQL][39].
+
+Interested in advanced concepts like window functions and ranks in SQL? Take a look at "[Introducing Window Functions in Spark SQL][40]."
+
+I will write another article covering some of these concepts in an intuitive way, which should be easy for you to understand. Stay tuned!
+
+In case you have any feedback or queries, you can reach out to me on [LinkedIn][41].
+
+* * *
+
+*This article originally appeared on Medium's [Towards Data Science][42] channel and is republished with permission. *
+
+* * *
+
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/3/apache-spark-and-dataframes-tutorial
+
+作者:[Dipanjan (DJ) Sarkar (Red Hat)][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/djsarkar
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/todo_checklist_team_metrics_report.png?itok=oB5uQbzf (Team checklist and to dos)
+[2]: https://opensource.com/article/19/3/sql-scale-apache-spark-sql-and-dataframes
+[3]: https://spark.apache.org/sql/
+[4]: https://opensource.com/sites/default/files/uploads/13_spark-databricks.png (Apache Spark and Databricks)
+[5]: https://databricks.com/try-databricks
+[6]: https://databricks.com/signup#signup/community
+[7]: https://opensource.com/sites/default/files/uploads/14_create-notebook.png (Create a notebook)
+[8]: https://databricks.com/spark/getting-started-with-apache-spark
+[9]: http://kdd.ics.uci.edu/databases/kddcup99/kddcup99.html
+[10]: https://opensource.com/sites/default/files/uploads/15_dbfs-kdd-kddcup_data-gz.png (Spark Job kddcup_data.gz)
+[11]: https://spark.apache.org/docs/latest/rdd-programming-guide.html#resilient-distributed-datasets-rdds
+[12]: https://opensource.com/sites/default/files/uploads/16_rdd-data.png (Data in Resilient Distributed Dataset (RDD))
+[13]: https://opensource.com/sites/default/files/uploads/16a_output.png (output)
+[14]: https://opensource.com/sites/default/files/uploads/16b_output.png (output)
+[15]: https://opensource.com/sites/default/files/uploads/17_split-csv.png (Splitting RDD entries)
+[16]: http://kdd.ics.uci.edu/databases/kddcup99/kddcup.names
+[17]: http://kdd.ics.uci.edu/databases/kddcup99/task.html
+[18]: https://opensource.com/sites/default/files/uploads/18_extract-columns.png (Extracting columns)
+[19]: https://opensource.com/sites/default/files/uploads/19_build-dataframe.png (DataFrame)
+[20]: https://opensource.com/sites/default/files/uploads/20_dataframe-schema.png (Dataframe schema)
+[21]: https://opensource.com/sites/default/files/uploads/21_registertemptable.png (help(df.registerTempTable))
+[22]: https://opensource.com/sites/default/files/uploads/22_number-of-connections.png (Total number of connections)
+[23]: https://opensource.com/sites/default/files/uploads/23_sql.png (protocol type and frequency)
+[24]: https://opensource.com/sites/default/files/uploads/24_intrusion-type.png (Connection by type)
+[25]: https://opensource.com/sites/default/files/uploads/25_chart-interface.png (Databricks chart types)
+[26]: https://opensource.com/sites/default/files/uploads/26_plot-options-chart.png (Bar chart)
+[27]: https://opensource.com/sites/default/files/uploads/27_pandas-barchart.png (Bar chart)
+[28]: https://opensource.com/sites/default/files/uploads/28_most-attacked.png (Protocols most vulnerable to attacks)
+[29]: https://opensource.com/sites/default/files/uploads/29_data-transmissions.png (Statistics pertaining to protocols and attacks)
+[30]: https://opensource.com/sites/default/files/uploads/30_tcp-attack-metrics.png (TCP attack data)
+[31]: https://opensource.com/sites/default/files/uploads/31_attack-type.png (Filtered by attack type)
+[32]: https://attack.mitre.org/techniques/T1188/
+[33]: https://opensource.com/sites/default/files/uploads/32_tcp-attack-types.png (TCP attacks based on service and attack type)
+[34]: https://opensource.com/sites/default/files/uploads/33_pivot-table.png (Pivot table)
+[35]: https://databricks-prod-cloudfront.cloud.databricks.com/public/4027ec902e239c93eaaa8714f173bcfc/3137082781873852/3704545280501166/1264763342038607/latest.html
+[36]: https://github.com/dipanjanS/data_science_for_all/tree/master/tds_spark_sql_intro
+[37]: http://nbviewer.jupyter.org/github/dipanjanS/data_science_for_all/blob/master/tds_spark_sql_intro/Working%20with%20SQL%20at%20Scale%20-%20Spark%20SQL%20Tutorial.ipynb
+[38]: https://docs.databricks.com/spark/latest/spark-sql/index.html
+[39]: https://databricks.com/blog/2015/02/02/an-introduction-to-json-support-in-spark-sql.html
+[40]: https://databricks.com/blog/2015/07/15/introducing-window-functions-in-spark-sql.html
+[41]: https://www.linkedin.com/in/dipanzan/
+[42]: https://towardsdatascience.com/sql-at-scale-with-apache-spark-sql-and-dataframes-concepts-architecture-and-examples-c567853a702f
diff --git a/sources/tech/20190321 NVIDIA Jetson Nano is a -99 Raspberry Pi Rival for AI Development.md b/sources/tech/20190321 NVIDIA Jetson Nano is a -99 Raspberry Pi Rival for AI Development.md
new file mode 100644
index 0000000000..52f02edc95
--- /dev/null
+++ b/sources/tech/20190321 NVIDIA Jetson Nano is a -99 Raspberry Pi Rival for AI Development.md
@@ -0,0 +1,98 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (NVIDIA Jetson Nano is a $99 Raspberry Pi Rival for AI Development)
+[#]: via: (https://itsfoss.com/nvidia-jetson-nano/)
+[#]: author: (Atharva Lele https://itsfoss.com/author/atharva/)
+
+NVIDIA Jetson Nano is a $99 Raspberry Pi Rival for AI Development
+======
+
+At the [GPU Technology Conference][1] NVIDIA announced the [Jetson Nano Module][2] and the [Jetson Nano Developer Kit][3]. Compared to other Jetson boards which cost between $299 and $1099, the Jetson Nano bears a low cost of $99. This puts it within the reach of many developers, educators, and researchers who could not spend hundreds of dollars to get such a product.
+
+![The Jetson Nano Development Kit \(left\) and the Jetson Nano Module \(right\)][4]
+
+### Bringing back AI development from ‘cloud’
+
+In the last few years, we have seen a lot of [advances in AI research][5]. Traditionally AI computing was always done in the cloud, where there was plenty of processing power available.
+
+Recently, there’s been a trend in shifting this computation away from the cloud and do it locally. This is called [Edge Computing][6]. Now at the embedded level, products which could do such complex calculations required for AI and Machine Learning were sparse, but we’re seeing a great explosion these days in this product segment.
+
+Products like the [SparkFun Edge][7] and [OpenMV Board][8] are good examples. The Jetson Nano, is NVIDIA’s latest offering in this market. When connected to your system, it will be able to supply the processing power needed for Machine Learning and AI tasks without having to rely on the cloud.
+
+This is great for privacy as well as saving on internet bandwidth. It is also more secure since your data always stays on the device itself.
+
+### Jetson Nano focuses on smaller AI projects
+
+![Jetson Nano powered JetBot][9]
+
+Previously released Jetson Boards like the [TX2][10] and [AGX Xavier][11] were used in products like drones and cars, the Jetson Nano is targeting smaller projects, projects where you need to have the processing power which boards like the [Raspberry Pi][12] cannot provide.
+
+Did you know?
+
+NVIDIA’s JetPack SDK provides a ‘complete desktop Linux environment based on Ubuntu 18.04 LTS’. In other words, the Jetson Nano is powered by Ubuntu Linux.
+
+### NVIDIA Jetson Nano Specifications
+
+For $99, you get 472 GFLOPS of processing power due to 128 NVIDIA Maxwell Architecture CUDA Cores, a quad-core ARM A57 processor, 4GB of LP-DDR4 RAM, 16GB of on-board storage, and 4k video encode/decode capabilities. The port selection is also pretty decent with the Nano having Gigabit Ethernet, MIPI Camera, Display outputs, and a couple of USB ports (1×3.0, 3×2.0). Full range of specifications can be found [here][13].
+
+CPU | Quad-core ARM® Cortex®-A57 MPCore processor
+---|---
+GPU | NVIDIA Maxwell™ architecture with 128 NVIDIA CUDA® cores
+RAM | 4 GB 64-bit LPDDR4
+Storage | 16 GB eMMC 5.1 Flash
+Camera | 12 lanes (3×4 or 4×2) MIPI CSI-2 DPHY 1.1 (1.5 Gbps)
+Connectivity | Gigabit Ethernet
+Display Ports | HDMI 2.0 and DP 1.2
+USB Ports | 1 USB 3.0 and 3 USB 2.0
+Other | 1 x1/2/4 PCIE, 1x SDIO / 2x SPI / 6x I2C / 2x I2S / GPIOs
+Size | 69.6 mm x 45 mm
+
+Along with good hardware, you get support for the majority of popular AI frameworks like TensorFlow, PyTorch, Keras, etc. It also has support for NVIDIA’s [JetPack][14] and [DeepStream][15] SDKs, same as the more expensive TX2 and AGX Boards.
+
+“Jetson Nano makes AI more accessible to everyone — and is supported by the same underlying architecture and software that powers our nation’s supercomputer. Bringing AI to the maker movement opens up a whole new world of innovation, inspiring people to create the next big thing.” said Deepu Talla, VP and GM of Autonomous Machines at NVIDIA.
+
+[Subscribe to It’s FOSS YouTube Channel][16]
+
+**What do you think of Jetson Nano?**
+
+The availability of Jetson Nano differs from country to country.
+
+The [Intel Neural Stick][17], is also one such accelerator which is competitively prices at $79. It’s good to see competition stirring up at these lower price points from the big manufacturers.
+
+I’m looking forward to getting my hands on the product if possible.
+
+What do you guys think about a product like this? Let us know in the comments below.
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/nvidia-jetson-nano/
+
+作者:[Atharva Lele][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/atharva/
+[b]: https://github.com/lujun9972
+[1]: https://www.nvidia.com/en-us/gtc/
+[2]: https://www.nvidia.com/en-us/autonomous-machines/embedded-systems/jetson-nano/
+[3]: https://developer.nvidia.com/embedded/buy/jetson-nano-devkit
+[4]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/03/jetson-nano-family-press-image-hd.jpg?ssl=1
+[5]: https://itsfoss.com/nanotechnology-open-science-ai/
+[6]: https://en.wikipedia.org/wiki/Edge_computing
+[7]: https://www.sparkfun.com/news/2886
+[8]: https://openmv.io/
+[9]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/nvidia_jetson_bot.jpg?ssl=1
+[10]: https://www.nvidia.com/en-us/autonomous-machines/embedded-systems/jetson-tx2/
+[11]: https://www.nvidia.com/en-us/autonomous-machines/embedded-systems/jetson-agx-xavier/
+[12]: https://itsfoss.com/things-you-need-to-get-your-raspberry-pi-working/
+[13]: https://www.nvidia.com/en-us/autonomous-machines/embedded-systems/jetson-nano/#specifications
+[14]: https://developer.nvidia.com/embedded/jetpack
+[15]: https://developer.nvidia.com/deepstream-sdk
+[16]: https://www.youtube.com/c/itsfoss?sub_confirmation=1
+[17]: https://software.intel.com/en-us/movidius-ncs-get-started
diff --git a/sources/tech/20190321 Top 10 New Linux SBCs to Watch in 2019.md b/sources/tech/20190321 Top 10 New Linux SBCs to Watch in 2019.md
new file mode 100644
index 0000000000..f3f1f7c72b
--- /dev/null
+++ b/sources/tech/20190321 Top 10 New Linux SBCs to Watch in 2019.md
@@ -0,0 +1,101 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Top 10 New Linux SBCs to Watch in 2019)
+[#]: via: (https://www.linux.com/blog/2019/3/top-10-new-linux-sbcs-watch-2019)
+[#]: author: (Eric Brown https://www.linux.com/users/ericstephenbrown)
+
+Top 10 New Linux SBCs to Watch in 2019
+======
+
+![UP Xtreme][1]
+
+Aaeon's Linux-ready UP Xtreme SBC.
+
+[Used with permission][2]
+
+A recent [Global Market Insights report][3] projects the single board computer market will grow from $600 million in 2018 to $1 billion by 2025. Yet, you don’t need to read a market research report to realize the SBC market is booming. Driven by the trends toward IoT and AI-enabled edge computing, new boards keep rolling off the assembly lines, many of them [tailored for highly specific applications][4].
+
+Much of the action has been in Linux-compatible boards, including the insanely popular Raspberry Pi. The number of different vendors and models has exploded thanks in part to the rise of [community-backed, open-spec SBCs][5].
+
+Here we examine 10 of the most intriguing, Linux-driven SBCs among the many products announced in the last four weeks that bookended the recent [Embedded World show][6] in Nuremberg. (There was also some [interesting Linux software news][7] at the show.) Two of the SBCs—the Intel Whiskey Lake based UP Xtreme and Nvidia Jetson Nano driven Jetson Nano Dev Kit—were announced only this week.
+
+Our mostly open source list also includes a few commercial boards. Processors range from the modest, Cortex-A7 driven STM32MP1 to the high-powered Whiskey Lake and Snapdragon 845. Mid-range models include Google’s i.MX8M powered Coral Dev Board and a similarly AI-enhanced, TI AM5729 based BeagleBone AI. Deep learning acceleration chips—and standard RPi 40-pin or 96Boards expansion connectors—are common themes among most of these boards.
+
+The SBCs are listed in reverse chronological order according to their announcement dates. The links in the product names go to recent LinuxGizmos reports, which link to vendor product pages.
+
+**[UP Xtreme][8]** —The latest in Aaeon’s line of community-backed SBCs taps Intel’s 8th Gen Whiskey Lake-U CPUs, which maintain a modest 15W TDP while boosting performance with up to quad-core, dual threaded configurations. Depending on when it ships, this Linux-ready model will likely be the most powerful community-backed SBC around -- and possibly the most expensive.
+
+The SBC supports up to 16GB DDR4 and 128GB eMMC and offers 4K displays via HDMI, DisplayPort, and eDP. Other features include SATA, 2x GbE, 4x USB 3.0, and 40-pin “HAT” and 100-pin GPIO add-on board connectors. You also get mini-PCIe and dual M.2 slots that support wireless modems and more SATA options. The slots also support Aaeon’s new AI Core X modules, which offer Intel’s latest Movidius Myriad X VPUs for 1TOPS neural processing acceleration.
+
+**[Jetson Nano Dev Kit][9]** —Nvidia just announced a low-end Jetson Nano compute module that’s sort of like a smaller (70 x 45mm) version of the old Jetson TX1. It offers the same 4x Cortex-A57 cores but has an even lower-end 128-core Maxwell GPU. The module has half the RAM and flash (4GB/16GB) of the TX1 and TX2, and no WiFi/Bluetooth radios. Like the hexa-core Jetson TX2, however, it supports 4K video and the GPU offers similar CUDA-X deep learning libraries.
+
+Although Nvidia has backed all its Linux-driven Jetson modules with development kits, the Jetson Nano Dev Kit is its first community-backed, maker-oriented kit. It does not appear to offer open specifications, but it costs only $99 and there’s a forum and other community resources. Many of the specs match or surpass the Raspberry Pi 3B+, including the addition of a 40-pin GPIO. Highlights include an M.2 slot, GbE with Power-over-Ethernet, HDMI 2.0 and eDP links, and 4x USB 3.0 ports.
+
+**[Coral Dev Board][10]** —Google’s very first Linux maker board arrived earlier this month featuring an NXP i.MX8M and Google’s Edge TPU AI chip—a stripped-down version of Google’s TPU Unit is designed to run TensorFlow Lite ML models. The $150, Raspberry Pi-like Coral Dev Board was joined by a similarly Edge TPU-enabled Coral USB Accelerator USB stick. These will be followed by an Edge TPU based Coral PCIe Accelerator and a Coral SOM compute module. All these devices are backed with schematics, community resources, and other open-spec resources.
+
+The Coral Dev Board combines the Edge TPU chip with NXP’s quad-core, 1.5GHz Cortex-A53 i.MX8M with a 3D Vivante GPU/VPU and a Cortex-M4 MCU. The SBC is even more like the Raspberry Pi 3B+ than Nvidia’s Dev Kit, mimicking the size and much of the layout and I/O, including the 40-pin GPIO connector. Highlights include 4K-ready GbE, HDMI 2.0a, 4-lane MIPI-DSI and CSI, and USB 3.0 host and Type-C ports.
+
+**[SBC-C43][11]** —Seco’s commercial, industrial temperature SBC-C43 board is the first SBC based on NXP’s high-end, up to hexa-core i.MX8. The 3.5-inch SBC supports the i.MX8 QuadMax with 2x Cortex-A72 cores and 4x Cortex-A53 cores, the QuadPlus with a single Cortex-A72 and 4x -A53, and the Quad with no -A72 cores and 4x -A53. There are also 2x Cortex-M4F real-time cores and 2x Vivante GPU/VPU cores. Yocto Project, Wind River Linux, and Android are available.
+
+The feature-rich SBC-C43 supports up to 8GB DDR4 and 32GB eMMC, both soldered for greater reliability. Highlights include dual GbE, HDMI 2.0a in and out ports, WiFi/Bluetooth, and a variety of industrial interfaces. Dual M.2 slots support SATA, wireless, and more.
+
+**[Nitrogen8M_Mini][12]** —This Boundary Devices cousin to the earlier, i.MX8M based Nitrogen8M is available for $135, with shipments due this Spring. The open-spec Nitrogen8M_Mini is the first SBC to feature NXP’s new i.MX8M Mini SoC. The Mini uses a more advanced 14LPC FinFET process than the i.MX8M, resulting in lower power consumption and higher clock rates for both the 4x Cortex-A53 (1.5GHz to 2GHz) and Cortex-M4 (400MHz) cores. The drawback is that you’re limited to HD video resolution.
+
+Supported with Linux and Android, the Nitrogen8M_Mini ships with 2GB to 4GB LPDDR4 RAM and 8GB to 128GB eMMC. MIPI-DSI and -CSI interfaces support optional touchscreens and cameras, respectively. A GbE port is standard and PoE and WiFi/BT are optional. Other features include 3x USB ports, one or two PCIe slots, and optional -40 to 85°C support. A Nitrogen8M_Mini SOM module with similar specs is also in the works.
+
+**[Pine H64 Model B][13]** —Pine64’s latest hacker board was teased in late January as part of an [ambitious roll-out][14] of open source products, including a laptop, tablet, and phone. The Raspberry Pi semi-clone, which recently went on sale for $39 (2GB) or $49 (3GB), showcases the high-end, but low-cost Allwinner H64. The quad -A53 SoC is notable for its 4K video with HDR support.
+
+The Pine H64 Model B offers up to 128GB eMMC storage, WiFi/BT, and a GbE port. I/O includes 2x USB 2.0 and single USB 3.0 and HDMI 2.0a ports plus SPDIF audio and an RPi-like 40-pin connector. Images include Android 7.0 and an “in progress” Armbian Debian Stretch.
+
+**[AI-ML Board][15]** —Arrow unveiled this i.MX8X based SBC early this month along with a similarly 96Boards CE Extended format, i.MX8M based Thor96 SBC. While there are plenty of i.MX8M boards these days, we’re more intrigued with the lowest-end i.MX8X member of the i.MX8 family. The AI-ML Board is the first SBC we’ve seen to feature the low-power i.MX8X, which offers up to 4x 64-bit, 1.2GHz Cortex-A35 cores, a 4-shader, 4K-ready Vivante GPU/VPU, a Cortex-M4F chip, and a Tensilica HiFi 4 DSP.
+
+The open-spec, Yocto Linux driven AI-ML Board is targeted at low-power, camera-equipped applications such as drones. The board has 2GB LPDDR4, Ethernet, WiFi/BT, and a pair each of MIPI-DSI and USB 3.0 ports. Cameras are controlled via the 96Boards 60-pin, high-power GPIO connector, which is joined by the usual 40-pin low-power link. The launch is expected June 1.
+
+**[BeagleBone AI][16]** —The long-awaited successor to the Cortex-A8 AM3358 based BeagleBone family of boards advances to TIs dual-core Cortex-A15 AM5729, with similar PowerVR GPU and MCU-like PRU cores. The real story, however, is the AI firepower enabled by the SoC’s dual TI C66x DSPs and four embedded-vision-engine (EVE) neural processing cores. BeagleBoard.org claims that calculations for computer-vision models using EVE run at 8x times the performance per watt compared to the similar, but EVE-less, AM5728. The EVE and DSP chips are supported through a TIDL machine learning OpenCL API and pre-installed tools.
+
+Due to go on sale in April for about $100, the Linux-powered BeagleBone AI is based closely on the BeagleBone Black and offers backward header, mechanical, and software compatibility. It doubles the RAM to 1GB and quadruples the eMMC storage to 16GB. You now get GbE and high-speed WiFi, as well as a USB Type-C port.
+
+**[Robotics RB3 Platform (DragonBoard 845c)][17]** —Qualcomm and Thundercomm are initially launching their 96Boards CE form factor, Snapdragon 845-based upgrade to the Snapdragon 820-based [DragonBoard 820c][18] SBC as part of a Qualcomm Robotics RB3 Platform. Yet, 96Boards.org has already posted a [DragonBoard 845c product page][17], and we imagine the board will be available in the coming months without all the robotics bells and whistles. A compute module version is also said to be in the works.
+
+The 10nm, octa-core, “Kryo” based Snapdragon 845 is one of the most powerful Arm SoCs around. It features an advanced Adreno 630 GPU with “eXtended Reality” (XR) VR technology and a Hexagon 685 DSP with a third-gen Neural Processing Engine (NPE) for AI applications. On the RB3 kit, the board’s expansion connectors are pre-stocked with Qualcomm cellular and robotics camera mezzanines. The $449 and up kit also includes standard 4K video and tracking cameras, and there are optional Time-of-Flight (ToF) and stereo SLM camera depth cameras. The SBC runs Linux with ROS (Robot Operating System).
+
+**[Avenger96][19]** —Like Arrow’s AI-ML Board, the Avenger96 is a 96Boards CE Extended SBC aimed at low-power IoT applications. Yet, the SBC features an even more power-efficient (and slower) SoC: ST’s recently announced [STM32MP153][20]. The Avenger96 runs Linux on the high-end STM32MP157 model, which has dual, 650MHz Cortex-A7 cores, a Cortex-M4, and a Vivante 3D GPU.
+
+This sandwich-style board features an Avenger96 module with the STM32MP157 SoC, 1GB of DDR3L, 2MB SPI flash, and a power management IC. It’s unclear if the 8GB eMMC and WiFi-ac/Bluetooth 4.2 module are on the module or carrier board. The Avenger96 SBC is further equipped with GbE, HDMI, micro-USB OTG, and dual USB 2.0 host ports. There’s also a microSD slot and the usual 40- and 60-pin GPIO connectors. The board is expected to go on sale in April.
+
+--------------------------------------------------------------------------------
+
+via: https://www.linux.com/blog/2019/3/top-10-new-linux-sbcs-watch-2019
+
+作者:[Eric Brown][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.linux.com/users/ericstephenbrown
+[b]: https://github.com/lujun9972
+[1]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/aaeon_upxtreme.jpg?itok=QnwAt3mp (UP Xtreme)
+[2]: /LICENSES/CATEGORY/USED-PERMISSION
+[3]: https://www.globenewswire.com/news-release/2019/02/13/1724445/0/en/Single-Board-Computer-Market-to-surpass-1bn-by-2025-Global-Market-Insights-Inc.html
+[4]: https://www.linux.com/blog/2019/1/linux-hacker-board-trends-2018-and-beyond
+[5]: http://linuxgizmos.com/catalog-of-122-open-spec-linux-hacker-boards/
+[6]: https://www.embedded-world.de/en
+[7]: https://www.linux.com/news/2019/2/embedded-linux-software-highlights-embedded-world
+[8]: http://linuxgizmos.com/latest-up-board-combines-whiskey-lake-with-ai-core-x-modules/
+[9]: http://linuxgizmos.com/trimmed-down-jetson-nano-modules-ships-on-99-linux-dev-kit/
+[10]: http://linuxgizmos.com/google-launches-i-mx8m-dev-board-with-edge-tpu-ai-chip/
+[11]: http://linuxgizmos.com/first-i-mx8-quadmax-sbc-breaks-cover/
+[12]: http://linuxgizmos.com/open-spec-nitrogen8m_mini-sbc-ships-along-with-new-mini-based-som/
+[13]: http://linuxgizmos.com/revised-allwiner-h64-based-pine-h64-sbc-has-rpi-size-and-gpio/
+[14]: https://www.linux.com/blog/2019/2/pine64-launch-open-source-phone-laptop-tablet-and-camera
+[15]: http://linuxgizmos.com/arrows-latest-96boards-sbcs-tap-i-mx8x-and-i-mx8m/
+[16]: http://linuxgizmos.com/beaglebone-ai-sbc-features-dual-a15-soc-with-eve-ai-cores/
+[17]: http://linuxgizmos.com/robotics-kit-runs-linux-on-new-dragonboard-845c-96boards-sbc/
+[18]: http://linuxgizmos.com/debian-driven-dragonboard-expands-to-96boards-extended-spec/
+[19]: http://linuxgizmos.com/sandwich-style-96boards-sbc-runs-linux-on-sts-new-cortex-a7-m4-soc/
+[20]: https://www.linux.com/news/2019/2/st-spins-its-first-linux-powered-cortex-soc
diff --git a/sources/tech/20190322 12 open source tools for natural language processing.md b/sources/tech/20190322 12 open source tools for natural language processing.md
new file mode 100644
index 0000000000..9d2822926f
--- /dev/null
+++ b/sources/tech/20190322 12 open source tools for natural language processing.md
@@ -0,0 +1,113 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (12 open source tools for natural language processing)
+[#]: via: (https://opensource.com/article/19/3/natural-language-processing-tools)
+[#]: author: (Dan Barker https://opensource.com/users/barkerd427)
+
+12 open source tools for natural language processing
+======
+
+Take a look at a dozen options for your next NLP application.
+
+![Chat bubbles][1]
+
+Natural language processing (NLP), the technology that powers all the chatbots, voice assistants, predictive text, and other speech/text applications that permeate our lives, has evolved significantly in the last few years. There are a wide variety of open source NLP tools out there, so I decided to survey the landscape to help you plan your next voice- or text-based application.
+
+For this review, I focused on tools that use languages I'm familiar with, even though I'm not familiar with all the tools. (I didn't find a great selection of tools in the languages I'm not familiar with anyway.) That said, I excluded tools in three languages I am familiar with, for various reasons.
+
+The most obvious language I didn't include might be R, but most of the libraries I found hadn't been updated in over a year. That doesn't always mean they aren't being maintained well, but I think they should be getting updates more often to compete with other tools in the same space. I also chose languages and tools that are most likely to be used in production scenarios (rather than academia and research), and I have mostly used R as a research and discovery tool.
+
+I was also surprised to see that the Scala libraries are fairly stagnant. It has been a couple of years since I last used Scala, when it was pretty popular. Most of the libraries haven't been updated since that time—or they've only had a few updates.
+
+Finally, I excluded C++. This is mostly because it's been many years since I last wrote in C++, and the organizations I've worked in have not used C++ for NLP or any data science work.
+
+### Python tools
+
+#### Natural Language Toolkit (NLTK)
+
+It would be easy to argue that [Natural Language Toolkit (NLTK)][2] is the most full-featured tool of the ones I surveyed. It implements pretty much any component of NLP you would need, like classification, tokenization, stemming, tagging, parsing, and semantic reasoning. And there's often more than one implementation for each, so you can choose the exact algorithm or methodology you'd like to use. It also supports many languages. However, it represents all data in the form of strings, which is fine for simple constructs but makes it hard to use some advanced functionality. The documentation is also quite dense, but there is a lot of it, as well as [a great book][3]. The library is also a bit slow compared to other tools. Overall, this is a great toolkit for experimentation, exploration, and applications that need a particular combination of algorithms.
+
+#### SpaCy
+
+[SpaCy][4] is probably the main competitor to NLTK. It is faster in most cases, but it only has a single implementation for each NLP component. Also, it represents everything as an object rather than a string, which simplifies the interface for building applications. This also helps it integrate with many other frameworks and data science tools, so you can do more once you have a better understanding of your text data. However, SpaCy doesn't support as many languages as NLTK. It does have a simple interface with a simplified set of choices and great documentation, as well as multiple neural models for various components of language processing and analysis. Overall, this is a great tool for new applications that need to be performant in production and don't require a specific algorithm.
+
+#### TextBlob
+
+[TextBlob][5] is kind of an extension of NLTK. You can access many of NLTK's functions in a simplified manner through TextBlob, and TextBlob also includes functionality from the Pattern library. If you're just starting out, this might be a good tool to use while learning, and it can be used in production for applications that don't need to be overly performant. Overall, TextBlob is used all over the place and is great for smaller projects.
+
+#### Textacy
+
+This tool may have the best name of any library I've ever used. Say "[Textacy][6]" a few times while emphasizing the "ex" and drawing out the "cy." Not only is it great to say, but it's also a great tool. It uses SpaCy for its core NLP functionality, but it handles a lot of the work before and after the processing. If you were planning to use SpaCy, you might as well use Textacy so you can easily bring in many types of data without having to write extra helper code.
+
+#### PyTorch-NLP
+
+[PyTorch-NLP][7] has been out for just a little over a year, but it has already gained a tremendous community. It is a great tool for rapid prototyping. It's also updated often with the latest research, and top companies and researchers have released many other tools to do all sorts of amazing processing, like image transformations. Overall, PyTorch is targeted at researchers, but it can also be used for prototypes and initial production workloads with the most advanced algorithms available. The libraries being created on top of it might also be worth looking into.
+
+### Node tools
+
+#### Retext
+
+[Retext][8] is part of the [unified collective][9]. Unified is an interface that allows multiple tools and plugins to integrate and work together effectively. Retext is one of three syntaxes used by the unified tool; the others are Remark for markdown and Rehype for HTML. This is a very interesting idea, and I'm excited to see this community grow. Retext doesn't expose a lot of its underlying techniques, but instead uses plugins to achieve the results you might be aiming for with NLP. It's easy to do things like checking spelling, fixing typography, detecting sentiment, or making sure text is readable with simple plugins. Overall, this is an excellent tool and community if you just need to get something done without having to understand everything in the underlying process.
+
+#### Compromise
+
+[Compromise][10] certainly isn't the most sophisticated tool. If you're looking for the most advanced algorithms or the most complete system, this probably isn't the right tool for you. However, if you want a performant tool that has a wide breadth of features and can function on the client side, you should take a look at Compromise. Overall, its name is accurate in that the creators compromised on functionality and accuracy by focusing on a small package with much more specific functionality that benefits from the user understanding more of the context surrounding the usage.
+
+#### Natural
+
+[Natural][11] includes most functions you might expect in a general NLP library. It is mostly focused on English, but some other languages have been contributed, and the community is open to additional contributions. It supports tokenizing, stemming, classification, phonetics, term frequency–inverse document frequency, WordNet, string similarity, and some inflections. It might be most comparable to NLTK, in that it tries to include everything in one package, but it is easier to use and isn't necessarily focused around research. Overall, this is a pretty full library, but it is still in active development and may require additional knowledge of underlying implementations to be fully effective.
+
+#### Nlp.js
+
+[Nlp.js][12] is built on top of several other NLP libraries, including Franc and Brain.js. It provides a nice interface into many components of NLP, like classification, sentiment analysis, stemming, named entity recognition, and natural language generation. It also supports quite a few languages, which is helpful if you plan to work in something other than English. Overall, this is a great general tool with a simplified interface into several other great tools. This will likely take you a long way in your applications before you need something more powerful or more flexible.
+
+### Java tools
+
+#### OpenNLP
+
+[OpenNLP][13] is hosted by the Apache Foundation, so it's easy to integrate it into other Apache projects, like Apache Flink, Apache NiFi, and Apache Spark. It is a general NLP tool that covers all the common processing components of NLP, and it can be used from the command line or within an application as a library. It also has wide support for multiple languages. Overall, OpenNLP is a powerful tool with a lot of features and ready for production workloads if you're using Java.
+
+#### StanfordNLP
+
+[Stanford CoreNLP][14] is a set of tools that provides statistical NLP, deep learning NLP, and rule-based NLP functionality. Many other programming language bindings have been created so this tool can be used outside of Java. It is a very powerful tool created by an elite research institution, but it may not be the best thing for production workloads. This tool is dual-licensed with a special license for commercial purposes. Overall, this is a great tool for research and experimentation, but it may incur additional costs in a production system. The Python implementation might also interest many readers more than the Java version. Also, one of the best Machine Learning courses is taught by a Stanford professor on Coursera. [Check it out][15] along with other great resources.
+
+#### CogCompNLP
+
+[CogCompNLP][16], developed by the University of Illinois, also has a Python library with similar functionality. It can be used to process text, either locally or on remote systems, which can remove a tremendous burden from your local device. It provides processing functions such as tokenization, part-of-speech tagging, chunking, named-entity tagging, lemmatization, dependency and constituency parsing, and semantic role labeling. Overall, this is a great tool for research, and it has a lot of components that you can explore. I'm not sure it's great for production workloads, but it's worth trying if you plan to use Java.
+
+* * *
+
+What are your favorite open source tools and libraries for NLP? Please share in the comments—especially if there's one I didn't include.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/3/natural-language-processing-tools
+
+作者:[Dan Barker (Community Moderator)][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/barkerd427
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/talk_chat_communication_team.png?itok=CYfZ_gE7 (Chat bubbles)
+[2]: http://www.nltk.org/
+[3]: http://www.nltk.org/book_1ed/
+[4]: https://spacy.io/
+[5]: https://textblob.readthedocs.io/en/dev/
+[6]: https://readthedocs.org/projects/textacy/
+[7]: https://pytorchnlp.readthedocs.io/en/latest/
+[8]: https://www.npmjs.com/package/retext
+[9]: https://unified.js.org/
+[10]: https://www.npmjs.com/package/compromise
+[11]: https://www.npmjs.com/package/natural
+[12]: https://www.npmjs.com/package/node-nlp
+[13]: https://opennlp.apache.org/
+[14]: https://stanfordnlp.github.io/CoreNLP/
+[15]: https://opensource.com/article/19/2/learn-data-science-ai
+[16]: https://github.com/CogComp/cogcomp-nlp
diff --git a/sources/tech/20190322 Easy means easy to debug.md b/sources/tech/20190322 Easy means easy to debug.md
new file mode 100644
index 0000000000..4b0b4d52d2
--- /dev/null
+++ b/sources/tech/20190322 Easy means easy to debug.md
@@ -0,0 +1,83 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Easy means easy to debug)
+[#]: via: (https://arp242.net/weblog/easy.html)
+[#]: author: (Martin Tournoij https://arp242.net/)
+
+
+What does it mean for a framework, library, or tool to be “easy”? There are many possible definitions one could use, but my definition is usually that it’s easy to debug. I often see people advertise a particular program, framework, library, file format, or something else as easy because “look with how little effort I can do task X, this is so easy!” That’s great, but an incomplete picture.
+
+You only write software once, but will almost always go through several debugging cycles. With debugging cycle I don’t mean “there is a bug in the code you need to fix”, but rather “I need to look at this code to fix the bug”. To debug code, you need to understand it, so “easy to debug” by extension means “easy to understand”.
+
+Abstractions which make something easier to write often come at the cost of make things harder to understand. Sometimes this is a good trade-off, but often it’s not. In general I will happily spend a little but more effort writing something now if that makes things easier to understand and debug later on, as it’s often a net time-saver.
+
+Simplicity isn’t the only thing that makes programs easier to debug, but it is probably the most important. Good documentation helps too, but unfortunately good documentation is uncommon (note that quality is not measured by word count!)
+
+This is not exactly a novel insight; from the 1974 The Elements of Programming Style by Brian W. Kernighan and P. J. Plauger:
+
+> Everyone knows that debugging is twice as hard as writing a program in the first place. So if you’re as clever as you can be when you write it, how will you ever debug it?
+
+A lot of stuff I see seems to be written “as clever as can be” and is consequently hard to debug. I’ll list a few examples of this pattern below. It’s not my intention to argue that any of these things are bad per se, I just want to highlight the trade-offs in “easy to use” vs. “easy to debug”.
+
+ * When I tried running [Let’s Encrypt][1] a few years ago it required running a daemon as root(!) to automatically rewrite nginx files. I looked at the source a bit to understand how it worked and it was all pretty complex, so I was “let’s not” and opted to just pay €10 to the CA mafia, as not much can go wrong with putting a file in /etc/nginx/, whereas a lot can go wrong with complex Python daemons running as root.
+
+(I don’t know the current state/options for Let’s Encrypt; at a quick glance there may be better/alternative ACME clients that suck less now.)
+
+ * Some people claim that systemd is easier than SysV init.d scripts because it’s easier to write systemd unit files than it is to write shell scripts. In particular, this is the argument Lennart Poettering used in his [systemd myths][2] post (point 5).
+
+I think is completely missing the point. I agree with Poettering that shell scripts are hard – [I wrote an entire post about that][3] – but by making the interface easier doesn’t mean the entire system becomes easier. Look at [this issue][4] I encountered and [the fix][5] for it. Does that look easy to you?
+
+ * Many JavaScript frameworks I’ve used can be hard to fully understand. Clever state keeping logic is great and all, until that state won’t work as you expect, and then you better hope there’s a Stack Overflow post or GitHub issue to help you out.
+
+ * Docker is great, right up to the point you get:
+
+```
+ ERROR: for elasticsearch Cannot start service elasticsearch:
+oci runtime error: container_linux.go:247: starting container process caused "process_linux.go:258:
+applying cgroup configuration for process caused \"failed to write 898 to cgroup.procs: write
+/sys/fs/cgroup/cpu,cpuacct/docker/b13312efc203e518e3864fc3f9d00b4561168ebd4d9aad590cc56da610b8dd0e/cgroup.procs:
+invalid argument\""
+```
+
+or
+
+```
+ERROR: for elasticsearch Cannot start service elasticsearch: EOF
+```
+
+And … now what?
+
+ * Many testing libraries can make things harder to debug. Ruby’s rspec is a good example where I’ve occasionally used the library wrong by accident and had to spend quite a long time figuring out what exactly went wrong (as the errors it gave me were very confusing!)
+
+I wrote a bit more about that in my [Testing isn’t everything][6] post.
+
+ * ORM libraries can make database queries a lot easier, at the cost of making things a lot harder to understand once you want to solve a problem.
+
+
+
+
+
+--------------------------------------------------------------------------------
+
+via: https://arp242.net/weblog/easy.html
+
+作者:[Martin Tournoij][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://arp242.net/
+[b]: https://github.com/lujun9972
+[1]: https://en.wikipedia.org/wiki/Let%27s_Encrypt
+[2]: http://0pointer.de/blog/projects/the-biggest-myths.html
+[3]: https://arp242.net/weblog/shell-scripting-trap.html
+[4]: https://unix.stackexchange.com/q/185495/33645
+[5]: https://cgit.freedesktop.org/systemd/systemd/commit/?id=6e392c9c45643d106673c6643ac8bf4e65da13c1
+[6]: /weblog/testing.html
+[7]: mailto:martin@arp242.net
+[8]: https://github.com/Carpetsmoker/arp242.net/issues/new
diff --git a/sources/tech/20190322 How to Install OpenLDAP on Ubuntu Server 18.04.md b/sources/tech/20190322 How to Install OpenLDAP on Ubuntu Server 18.04.md
new file mode 100644
index 0000000000..a4325fe74b
--- /dev/null
+++ b/sources/tech/20190322 How to Install OpenLDAP on Ubuntu Server 18.04.md
@@ -0,0 +1,205 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (How to Install OpenLDAP on Ubuntu Server 18.04)
+[#]: via: (https://www.linux.com/blog/2019/3/how-install-openldap-ubuntu-server-1804)
+[#]: author: (Jack Wallen https://www.linux.com/users/jlwallen)
+
+How to Install OpenLDAP on Ubuntu Server 18.04
+======
+
+![OpenLDAP][1]
+
+In part one of this short tutorial series, Jack Wallen explains how to install OpenLDAP.
+
+[Creative Commons Zero][2]
+
+The Lightweight Directory Access Protocol (LDAP) allows for the querying and modification of an X.500-based directory service. In other words, LDAP is used over a Local Area Network (LAN) to manage and access a distributed directory service. LDAPs primary purpose is to provide a set of records in a hierarchical structure. What can you do with those records? The best use-case is for user validation/authentication against desktops. If both server and client are set up properly, you can have all your Linux desktops authenticating against your LDAP server. This makes for a great single point of entry so that you can better manage (and control) user accounts.
+
+The most popular iteration of LDAP for Linux is [OpenLDAP][3]. OpenLDAP is a free, open-source implementation of the Lightweight Directory Access Protocol, and makes it incredibly easy to get your LDAP server up and running.
+
+In this three-part series, I’ll be walking you through the steps of:
+
+ 1. Installing OpenLDAP server.
+
+ 2. Installing the web-based LDAP Account Manager.
+
+ 3. Configuring Linux desktops, such that they can communicate with your LDAP server.
+
+
+
+
+In the end, all of your Linux desktop machines (that have been configured properly) will be able to authenticate against a centralized location, which means you (as the administrator) have much more control over the management of users on your network.
+
+In this first piece, I’ll be demonstrating the installation and configuration of OpenLDAP on Ubuntu Server 18.04. All you will need to make this work is a running instance of Ubuntu Server 18.04 and a user account with sudo privileges.
+Let’s get to work.
+
+### Update/Upgrade
+
+The first thing you’ll want to do is update and upgrade your server. Do note, if the kernel gets updated, the server will need to be rebooted (unless you have Live Patch, or a similar service running). Because of this, run the update/upgrade at a time when the server can be rebooted.
+To update and upgrade Ubuntu, log into your server and run the following commands:
+
+```
+sudo apt-get update
+
+sudo apt-get upgrade -y
+```
+
+When the upgrade completes, reboot the server (if necessary), and get ready to install and configure OpenLDAP.
+
+### Installing OpenLDAP
+
+Since we’ll be using OpenLDAP as our LDAP server software, it can be installed from the standard repository. To install the necessary pieces, log into your Ubuntu Server and issue the following command:
+
+### sudo apt-get instal slapd ldap-utils -y
+
+During the installation, you’ll be first asked to create an administrator password for the LDAP directory. Type and verify that password (Figure 1).
+
+![password][4]
+
+Figure 1: Creating an administrator password for LDAP.
+
+[Used with permission][5]
+
+Configuring LDAP
+
+With the installation of the components complete, it’s time to configure LDAP. Fortunately, there’s a handy tool we can use to make this happen. From the terminal window, issue the command:
+
+```
+sudo dpkg-reconfigure slapd
+```
+
+In the first window, hit Enter to select No and continue on. In the second window of the configuration tool (Figure 2), you must type the DNS domain name for your server. This will serve as the base DN (the point from where a server will search for users) for your LDAP directory. In my example, I’ve used example.com (you’ll want to change this to fit your needs).
+
+![domain name][6]
+
+Figure 2: Configuring the domain name for LDAP.
+
+[Used with permission][5]
+
+In the next window, type your Organizational name (ie the name of your company or department). You will then be prompted to (once again) create an administrator password (you can use the same one as you did during the installation). Once you’ve taken care of that, you’ll be asked the following questions:
+
+ * Database backend to use - select **MDB**.
+
+ * Do you want the database to be removed with slapd is purged? - Select **No.**
+
+ * Move old database? - Select **Yes.**
+
+
+
+
+OpenLDAP is now ready for data.
+
+### Adding Initial Data
+
+Now that OpenLDAP is installed and running, it’s time to populate the directory with a bit of initial data. In the second piece of this series, we’ll be installing a web-based GUI that makes it much easier to handle this task, but it’s always good to know how to add data the manual way.
+
+One of the best ways to add data to the LDAP directory is via text file, which can then be imported in with the __ldapadd__ command. Create a new file with the command:
+
+```
+nano ldap_data.ldif
+```
+
+In that file, paste the following contents:
+
+```
+dn: ou=People,dc=example,dc=com
+
+objectClass: organizationalUnit
+
+ou: People
+
+
+dn: ou=Groups,dc=EXAMPLE,dc=COM
+
+objectClass: organizationalUnit
+
+ou: Groups
+
+
+dn: cn=DEPARTMENT,ou=Groups,dc=EXAMPLE,dc=COM
+
+objectClass: posixGroup
+
+cn: SUBGROUP
+
+gidNumber: 5000
+
+
+dn: uid=USER,ou=People,dc=EXAMPLE,dc=COM
+
+objectClass: inetOrgPerson
+
+objectClass: posixAccount
+
+objectClass: shadowAccount
+
+uid: USER
+
+sn: LASTNAME
+
+givenName: FIRSTNAME
+
+cn: FULLNAME
+
+displayName: DISPLAYNAME
+
+uidNumber: 10000
+
+gidNumber: 5000
+
+userPassword: PASSWORD
+
+gecos: FULLNAME
+
+loginShell: /bin/bash
+
+homeDirectory: USERDIRECTORY
+```
+
+In the above file, every entry in all caps needs to be modified to fit your company needs. Once you’ve modified the above file, save and close it with the [Ctrl]+[x] key combination.
+
+To add the data from the file to the LDAP directory, issue the command:
+
+```
+ldapadd -x -D cn=admin,dc=EXAMPLE,dc=COM -W -f ldap_data.ldif
+```
+
+Remember to alter the dc entries (EXAMPLE and COM) in the above command to match your domain name. After running the command, you will be prompted for the LDAP admin password. When you successfully authentication to the LDAP server, the data will be added. You can then ensure the data is there, by running a search like so:
+
+```
+ldapsearch -x -LLL -b dc=EXAMPLE,dc=COM 'uid=USER' cn gidNumber
+```
+
+Where EXAMPLE and COM is your domain name and USER is the user to search for. The command should report the entry you searched for (Figure 3).
+
+![search][7]
+
+Figure 3: Our search was successful.
+
+[Used with permission][5]
+
+Now that you have your first entry into your LDAP directory, you can edit the above file to create even more. Or, you can wait until the next entry into the series (installing LDAP Account Manager) and take care of the process with the web-based GUI. Either way, you’re one step closer to having LDAP authentication on your network.
+
+--------------------------------------------------------------------------------
+
+via: https://www.linux.com/blog/2019/3/how-install-openldap-ubuntu-server-1804
+
+作者:[Jack Wallen][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.linux.com/users/jlwallen
+[b]: https://github.com/lujun9972
+[1]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/ldap.png?itok=r9viT8n6 (OpenLDAP)
+[2]: /LICENSES/CATEGORY/CREATIVE-COMMONS-ZERO
+[3]: https://www.openldap.org/
+[4]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/ldap_1.jpg?itok=vbWScztB (password)
+[5]: /LICENSES/CATEGORY/USED-PERMISSION
+[6]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/ldap_2.jpg?itok=10CSCm6Z (domain name)
+[7]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/ldap_3.jpg?itok=df2Y65Dv (search)
diff --git a/sources/tech/20190322 How to set up Fedora Silverblue as a gaming station.md b/sources/tech/20190322 How to set up Fedora Silverblue as a gaming station.md
new file mode 100644
index 0000000000..2d794f2d29
--- /dev/null
+++ b/sources/tech/20190322 How to set up Fedora Silverblue as a gaming station.md
@@ -0,0 +1,100 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (How to set up Fedora Silverblue as a gaming station)
+[#]: via: (https://fedoramagazine.org/set-up-fedora-silverblue-gaming-station/)
+[#]: author: (Michal Konečný https://fedoramagazine.org/author/zlopez/)
+
+How to set up Fedora Silverblue as a gaming station
+======
+
+![][1]
+
+This article gives you a step by step guide to turn your Fedora Silverblue into an awesome gaming station with the help of Flatpak and Steam.
+
+Note: Do you need the NVIDIA proprietary driver on Fedora 29 Silverblue for a complete experience? Check out [this blog post][2] for pointers.
+
+### Add the Flathub repository
+
+This process starts with a clean Fedora 29 Silverblue installation with a user already created for you.
+
+First, go to and enable the Flathub repository on your system. To do this, click the _Quick setup_ button on the main page.
+
+![Quick setup button on flathub.org/home][3]
+
+This redirects you to where you should click on the Fedora icon.
+
+![Fedora icon on flatpak.org/setup][4]
+
+Now you just need to click on _Flathub repository file._ Open the downloaded file with the _Software Install_ application.
+
+![Flathub repository file button on flatpak.org/setup/Fedora][5]
+
+The GNOME Software application opens. Next, click on the _Install_ button. This action needs _sudo_ permissions, because it installs the Flathub repository for use by the whole system.
+
+![Install button in GNOME Software][6]
+
+### Install the Steam flatpak
+
+You can now search for the S _team_ flatpak in _GNOME Software_. If you can’t find it, try rebooting — or logout and login — in case _GNOME Software_ didn’t read the metadata. That happens automatically when you next login.
+
+![Searching for Steam][7]
+
+Click on the _Steam_ row and the _Steam_ page opens in _GNOME Software._ Next, click on _Install_.
+
+![Steam page in GNOME Software][8]
+
+And now you have installed _Steam_ flatpak on your system.
+
+### Enable Steam Play in Steam
+
+Now that you have _Steam_ installed, launch it and log in. To play Windows games too, you need to enable _Steam Play_ in _Steam._ To enable it, choose _Steam > Settings_ from the menu in the main window.
+
+![Settings button in Steam][9]
+
+Navigate to the _Steam Play_ section. You should see the option _Enable Steam Play for supported titles_ is already ticked, but it’s recommended you also tick the _Enable Steam Play_ option for all other titles. There are plenty of games that are actually playable, but not whitelisted yet on _Steam._ To see which games are playable, visit [ProtonDB][10] and search for your favorite game. Or just look for the games with the most platinum reports.
+
+![Steam Play settings menu on Steam][11]
+
+If you want to know more about Steam Play, you can read the [article][12] about it here on Fedora Magazine:
+
+> [Play Windows games on Fedora with Steam Play and Proton][12]
+
+### Appendix
+
+You’re now ready to play plenty of games on Linux. Please remember to share your experience with others using the _Contribute_ button on [ProtonDB][10] and report bugs you find on [GitHub][13], because sharing is nice. 🙂
+
+* * *
+
+_Photo by _[ _Hardik Sharma_][14]_ on _[_Unsplash_][15]_._
+
+--------------------------------------------------------------------------------
+
+via: https://fedoramagazine.org/set-up-fedora-silverblue-gaming-station/
+
+作者:[Michal Konečný][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://fedoramagazine.org/author/zlopez/
+[b]: https://github.com/lujun9972
+[1]: https://fedoramagazine.org/wp-content/uploads/2019/03/silverblue-gaming-816x345.jpg
+[2]: https://blogs.gnome.org/alexl/2019/03/06/nvidia-drivers-in-fedora-silverblue/
+[3]: https://fedoramagazine.org/wp-content/uploads/2019/03/Screenshot-from-2019-03-15-12-29-00.png
+[4]: https://fedoramagazine.org/wp-content/uploads/2019/03/Screenshot-from-2019-03-15-12-36-35-1024x713.png
+[5]: https://fedoramagazine.org/wp-content/uploads/2019/03/Screenshot-from-2019-03-15-12-45-12.png
+[6]: https://fedoramagazine.org/wp-content/uploads/2019/03/Screenshot-from-2019-03-15-12-57-37.png
+[7]: https://fedoramagazine.org/wp-content/uploads/2019/03/Screenshot-from-2019-03-15-13-08-21.png
+[8]: https://fedoramagazine.org/wp-content/uploads/2019/03/Screenshot-from-2019-03-15-13-13-59-1024x769.png
+[9]: https://fedoramagazine.org/wp-content/uploads/2019/03/Screenshot-from-2019-03-15-13-30-20.png
+[10]: https://www.protondb.com/
+[11]: https://fedoramagazine.org/wp-content/uploads/2019/03/Screenshot-from-2019-03-15-13-41-53.png
+[12]: https://fedoramagazine.org/play-windows-games-steam-play-proton/
+[13]: https://github.com/ValveSoftware/Proton
+[14]: https://unsplash.com/photos/I7rXyzBNVQM?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText
+[15]: https://unsplash.com/search/photos/video-game-laptop?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText
diff --git a/sources/tech/20190322 Printing from the Linux command line.md b/sources/tech/20190322 Printing from the Linux command line.md
new file mode 100644
index 0000000000..75aec13bb3
--- /dev/null
+++ b/sources/tech/20190322 Printing from the Linux command line.md
@@ -0,0 +1,177 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Printing from the Linux command line)
+[#]: via: (https://www.networkworld.com/article/3373502/printing-from-the-linux-command-line.html)
+[#]: author: (Sandra Henry-Stocker https://www.networkworld.com/author/Sandra-Henry_Stocker/)
+
+Printing from the Linux command line
+======
+
+There's a lot more to printing from the Linux command line than the lp command. Check out some of the many available options.
+
+![Sherry \(CC BY 2.0\)][1]
+
+Printing from the Linux command line is easy. You use the **lp** command to request a print, and **lpq** to see what print jobs are in the queue, but things get a little more complicated when you want to print double-sided or use portrait mode. And there are lots of other things you might want to do — such as printing multiple copies of a document or canceling a print job. Let's check out some options for getting your printouts to look just the way you want them to when you're printing from the command line.
+
+### Displaying printer settings
+
+To view your printer settings from the command line, use the **lpoptions** command. The output should look something like this:
+
+```
+$ lpoptions
+copies=1 device-uri=dnssd://HP%20Color%20LaserJet%20CP2025dn%20(F47468)._pdl-datastream._tcp.local/ finishings=3 job-cancel-after=10800 job-hold-until=no-hold job-priority=50 job-sheets=none,none marker-change-time=1553023232 marker-colors=#000000,#00FFFF,#FF00FF,#FFFF00 marker-levels=18,62,62,63 marker-names='Black\ Cartridge\ HP\ CC530A,Cyan\ Cartridge\ HP\ CC531A,Magenta\ Cartridge\ HP\ CC533A,Yellow\ Cartridge\ HP\ CC532A' marker-types=toner,toner,toner,toner number-up=1 printer-commands=none printer-info='HP Color LaserJet CP2025dn (F47468)' printer-is-accepting-jobs=true printer-is-shared=true printer-is-temporary=false printer-location printer-make-and-model='HP Color LaserJet cp2025dn pcl3, hpcups 3.18.7' printer-state=3 printer-state-change-time=1553023232 printer-state-reasons=none printer-type=167964 printer-uri-supported=ipp://localhost/printers/Color-LaserJet-CP2025dn sides=one-sided
+```
+
+This output is likely to be a little more human-friendly if you turn its blanks into carriage returns. Notice how many settings are listed.
+
+NOTE: In the output below, some lines have been reconnected to make this output more readable.
+
+```
+$ lpoptions | tr " " '\n'
+copies=1
+device-uri=dnssd://HP%20Color%20LaserJet%20CP2025dn%20(F47468)._pdl-datastream._tcp.local/
+finishings=3
+job-cancel-after=10800
+job-hold-until=no-hold
+job-priority=50
+job-sheets=none,none
+marker-change-time=1553023232
+marker-colors=#000000,#00FFFF,#FF00FF,#FFFF00
+marker-levels=18,62,62,63
+marker-names='Black\ Cartridge\ HP\ CC530A,
+Cyan\ Cartridge\ HP\ CC531A,
+Magenta\ Cartridge\ HP\ CC533A,
+Yellow\ Cartridge\ HP\ CC532A'
+marker-types=toner,toner,toner,toner
+number-up=1
+printer-commands=none
+printer-info='HP Color LaserJet CP2025dn (F47468)'
+printer-is-accepting-jobs=true
+printer-is-shared=true
+printer-is-temporary=false
+printer-location
+printer-make-and-model='HP Color LaserJet cp2025dn pcl3, hpcups 3.18.7'
+printer-state=3
+printer-state-change-time=1553023232
+printer-state-reasons=none
+printer-type=167964
+printer-uri-supported=ipp://localhost/printers/Color-LaserJet-CP2025dn
+sides=one-sided
+```
+
+With the **-v** option, the **lpinfo** command will list drivers and related information.
+
+```
+$ lpinfo -v
+network ipp
+network https
+network socket
+network beh
+direct hp
+network lpd
+file cups-brf:/
+network ipps
+network http
+direct hpfax
+network dnssd://HP%20Color%20LaserJet%20CP2025dn%20(F47468)._pdl-datastream._tcp.local/ <== printer
+network socket://192.168.0.23 <== printer IP
+```
+
+The lpoptions command will show the settings of your default printer. Use the **-p** option to specify one of a number of available printers.
+
+```
+$ lpoptions -p LaserJet
+```
+
+The **lpstat -p** command displays the status of a printer while **lpstat -p -d** also lists available printers.
+
+```
+$ lpstat -p -d
+printer Color-LaserJet-CP2025dn is idle. enabled since Tue 19 Mar 2019 05:07:45 PM EDT
+system default destination: Color-LaserJet-CP2025dn
+```
+
+### Useful commands
+
+To print a document on the default printer, just use the **lp** command followed by the name of the file you want to print. If the filename includes blanks (rare on Linux systems), either put the name in quotes or start entering the file name and press the tab key to invoke file completion (as shown in the second example below).
+
+```
+$ lp "never leave home angry"
+$ lp never\ leave\ home\ angry
+```
+
+The **lpq** command displays the print queue.
+
+```
+$ lpq
+Color-LaserJet-CP2025dn is ready and printing
+Rank Owner Job File(s) Total Size
+active shs 234 agenda 2048 bytes
+```
+
+With the **-n** option, the lp command allows you to specify the number of copies of a printout you want.
+
+```
+$ lp -n 11 agenda
+```
+
+To cancel a print job, you can use the **cancel** or **lprm** command. If you don't act quickly, you might see this:
+
+```
+$ cancel 229
+cancel: cancel-job failed: Job #229 is already completed - can't cancel.
+```
+
+### Two-sided printing
+
+To print in two-sided mode, you can issue your lp command with a **sides** option that says both to print on both sides of the paper and which edge to turn the paper on. This setting represents the normal way that you would expect two-sided portrait documents to look.
+
+```
+$ lp -o sides=two-sided-long-edge Notes.pdf
+```
+
+If you want all of your documents to print in two-side mode, you can change your lp settings by using the **lpoptions** command to change the setting for **sides**.
+
+```
+$ lpoptions -o sides=two-sided-short-edge
+```
+
+To revert to single-sided printing, you would use a command like this one:
+
+```
+$ lpoptions -o sides=one-sided
+```
+
+#### Printing in landscape mode
+
+To print in landscape mode, you would use the **landscape** option with the lp command.
+
+```
+$ lp -o landscape penguin.jpg
+```
+
+### CUPS
+
+The print system used on Linux systems is the standards-based, open source printing system called CUPS, originally standing for **Common Unix Printing System**. It allows a computer to act as a print server.
+
+Join the Network World communities on [Facebook][2] and [LinkedIn][3] to comment on topics that are top of mind.
+
+--------------------------------------------------------------------------------
+
+via: https://www.networkworld.com/article/3373502/printing-from-the-linux-command-line.html
+
+作者:[Sandra Henry-Stocker][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.networkworld.com/author/Sandra-Henry_Stocker/
+[b]: https://github.com/lujun9972
+[1]: https://images.idgesg.net/images/article/2019/03/printouts-paper-100791390-large.jpg
+[2]: https://www.facebook.com/NetworkWorld/
+[3]: https://www.linkedin.com/company/network-world
diff --git a/sources/tech/20190325 Backup on Fedora Silverblue with Borg.md b/sources/tech/20190325 Backup on Fedora Silverblue with Borg.md
new file mode 100644
index 0000000000..8aa5c65139
--- /dev/null
+++ b/sources/tech/20190325 Backup on Fedora Silverblue with Borg.md
@@ -0,0 +1,314 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Backup on Fedora Silverblue with Borg)
+[#]: via: (https://fedoramagazine.org/backup-on-fedora-silverblue-with-borg/)
+[#]: author: (Steven Snow https://fedoramagazine.org/author/jakfrost/)
+
+Backup on Fedora Silverblue with Borg
+======
+
+![][1]
+
+When it comes to backing up a Fedora Silverblue system, some of the traditional tools may not function as expected. BorgBackup (Borg) is an alternative available that can provide backup capability for your Silverblue based systems. This how-to explains the steps for using BorgBackup 1.1.8 as a layered package to back up Fedora Silverblue 29 system.
+
+On a normal Fedora Workstation system, _dnf_ is used to install a package. However, on Fedora Silverblue, _rpm-ostree install_ is used to install new software. This is termed layering on the Silverblue system, since the core ostree is an immutable image and the rpm package is layered onto the core system during the install process resulting in a new local image with the layered package.
+
+> “BorgBackup (short: Borg) is a deduplicating backup program. Optionally, it supports compression and authenticated encryption.”
+>
+> From the Borg website
+
+Additionally, the main way to interact with Borg is via the command line. Reading the Quick Start guide it becomes apparent that Borg is well suited to scripting. In fact, it is pretty much necessary to use some form of shell script when performing repeated thorough backup’s of a system. A basic script is provided in the [Borg Quick Start guide][2] , as a point to get started.
+
+### Installing Borg
+
+In a terminal, type the following command to install BorgBackup as a layered package:
+
+```
+$rpm-ostree install borgbackup
+```
+This installs BorgBackup to the Fedora Silverblue system. To use it, reboot into the new ostree with:
+
+```
+$systemctl reboot
+```
+
+Now Borg is installed, and ready to use.
+
+### Some notes about Silverblue and its file system, layered packages and flatpaks
+
+#### The file system
+
+Silverblue is an immutable operating system based on ostree, with support for layering rpm’s through the use of rpm-ostree. At the user level, this means the path that appears as _/home_ in a flatpak, will actually be _/var/home_ to the system. For programs like Borg, and other backup tools this is important to remember since they often require the actual path, so in this example that would be _/var/home_ instead of just _/home_.
+
+Before starting a backup it’s a good idea to understand where potential data could be stored, and then if that data should be backed up. Silverblue’s file system layout is very specific with respect to what is writable and what is not. On Silverblue _/etc_ and _/var_ are the only places that are not immutable, therefore writable. On a single user system, typically the user home directory would be a likely choice for data backup. Normally excluding Downloads, but including Documents and more. Also, _/etc_ is a logical choice for some configuration options you don’t want to go through again. Take notes of what to exclude from your home directory and from _/etc_. Some files and subdirectories of /etc you need root or sudo privileges to access.
+
+#### Flatpaks
+
+Flatpak applications store data in your home directory under _$HOME/.var/app/flatpakapp_ , regardless of whether they were installed as user or system. If installed at a user level, there is also data found in _$HOME/.local/share/flatpak/app/_ , or if installed at a system level it will be found in _/var/lib/flatpak/app_ For the purposes of this article, it was enough to list the flatpak’s installed and redirect the output to a file for backing up. Reasoning that if there is a need to reinstall them (flatpaks) the list file could be used to do it from. For a more robust approach, examining the flatpak file system layouts can be done [here.][3]
+
+#### Layering and rpm-ostree
+
+There is no easy way for a user to retrieve the layered package information aside from the
+
+$rpm-ostree status
+
+command. Which shows the current and previous ostree commit’s layered packages, and if any commits are pinned they would be listed too. Below is the output on my system, note the LayeredPackages label at the end of each commit listing.
+
+![][4]
+
+The command
+
+$ostree log
+
+is useful to retrieve a history of commits for the system. Type it in your terminal to see the output.
+
+### Preparing the backup repo
+
+In order to use Borg to back up a system, you need to first initialize a Borg repo. Before initializing, the decision must be made to use encryption (or not) and if so, what mode.
+
+With Borg the data can be protected using 256-bit AES encryption. The integrity and authenticity of the data, which is encrypted on the clientside, is verified using HMAC-SHA256. The encryption modes are listed below.
+
+#### Encryption modes
+
+Hash/MAC | Not encrypted no auth | Not encrypted, but authenticated | Encrypted (AEAD w/ AES) and authenticated
+---|---|---|---
+SHA-256 | none | authenticated | repokey keyfile
+BLAKE2b | n/a | authenticated-blake2 | repokey-blake2 keyfile-blake2
+
+The encryption mode decided on was keyfile-blake2, which requires a passphrase to be entered as well as the keyfile being needed.
+
+Borg can use the following compression types which you can specify at backup creation time.
+
+ * lz4 (super fast, low compression)
+ * zstd (wide range from high speed and low compression to high compression and lower speed)
+ * zlib (medium speed and compression)
+ * lzma (low speed, high compression)
+
+
+
+For compression lzma was chosen at setting 6, the highest sensible compression level. The initial backup took 4 minutes 59.98 seconds to complete, while subsequent ones have taken less than 20 seconds as a rule.
+
+#### Borg init
+
+To be able to perform backups with Borg, first, create a directory for your Borg repo:
+
+```
+$mkdir borg_testdir
+```
+
+and then change to it.
+
+```
+$cd borg_testdir
+```
+
+Next, initialize the Borg repo with the borg init command:
+
+```
+$borg init -e=keyfile-blake2 .
+```
+
+Borg will prompt for your passphrase, which is case sensitive, and at creation must be entered twice. A suitable passphrase of alpha-numeric characters and symbols, and of a reasonable length should be created. It can be changed later on if needed without affecting the keyfile, or your encrypted data. The keyfile can be exported and should be for backup purposes, along with the passphrase, and stored somewhere secure.
+
+#### Creating a backup
+
+Next, create a test backup of the Documents directory, remember on Silverblue the actual path to the user Documents directory is _/var/home/username/Documents_. In practice on Silverblue, it is suitable to use _~/_ or _$HOME_ to indicate your home directory. The distinction between the actual path and environment variables being the real path does not change whereas the environment variable can be changed. From within the Borg repo, type the following command
+
+```
+$borg create .::borgtest /var/home/username/Documents
+```
+
+and that will create a backup of the Documents directory named **borgtest**. To break down the command a bit; **create** requires a **repo location** , in this case **.** since we are in the **top level** of the **repo**. That makes the path **.::borgtest** for the backup name. Finally **/var/home/username/Documents** is the location of the data we are backing up.
+
+The following command
+
+```
+$borg list
+```
+
+returns a listing of your backups, after a few days it look similar to this:
+
+![Output of borg list command in my backup repo.][5]
+
+To delete the test backup, type the following in the terminal
+
+```
+$borg delete .::borgtest
+```
+
+at this time Borg will prompt for the encryption passphrase in order to delete the backup.
+
+### Pulling it together into a shell script
+
+As mentioned Borg is an eminently script friendly tool. The Borg documentation links provided are great places to find out more about BorgBackup, and there is more. The example script provided by Borg was modified to suit this article. Below is a version with the basic parts that others could use as a starting point if desired. It tries to capture the three information pieces of the system and apps mentioned earlier. The output of _flatpak list_ , _rpm-ostree status_ , and _ostree log_ as human readable files given the same names each time so overwritten each time. The repo setup had to be changed since the original example is for a remote server login with ssh, and this was intended to be used locally. The other changes mostly involved correcting directory paths, tailoring the excluded content to suit this systems home directory, and choosing the compression.
+```
+#!/bin/sh
+
+
+
+# This gets the ostree commit data, this file is overwritten each time
+
+sudo ostree log fedora-workstation:fedora/29/x86_64/silverblue > ostree.log
+
+
+
+rpm-ostree status > rpm-ostree-status.lst
+
+
+
+# Flatpaks get listed too
+
+flatpak list > flatpak.lst
+
+
+
+# Setting this, so the repo does not need to be given on the commandline:
+
+export BORG_REPO=/var/home/usernamehere/borg_testdir
+
+
+
+# Setting this, so you won't be asked for your repository passphrase:(Caution advised!)
+
+export BORG_PASSPHRASE='usercomplexpassphrasehere'
+
+
+
+# some helpers and error handling:
+
+info() { printf "\n%s %s\n\n" "$( date )" "$*" >&2; }
+
+trap 'echo $( date ) Backup interrupted >&2; exit 2' INT TERM
+
+
+
+info "Starting backup"
+
+
+
+# Backup the most important directories into an archive named after
+
+# the machine this script is currently running on:
+
+borg create \
+
+ --verbose \
+
+ --filter AME \
+
+ --list \
+
+ --stats \
+
+ --show-rc \
+
+ --compression auto,lzma,6 \
+
+ --exclude-caches \
+
+ --exclude '/var/home/*/borg_testdir'\
+
+ --exclude '/var/home/*/Downloads/'\
+
+ --exclude '/var/home/*/.var/' \
+
+ --exclude '/var/home/*/Desktop/'\
+
+ --exclude '/var/home/*/bin/' \
+
+ \
+
+ ::'{hostname}-{now}' \
+
+ /etc \
+
+ /var/home/ssnow \
+
+
+
+ backup_exit=$?
+
+
+
+ info "Pruning repository"
+
+
+
+ # Use the `prune` subcommand to maintain 7 daily, 4 weekly and 6 monthly
+
+ # archives of THIS machine. The '{hostname}-' prefix is very important to
+
+ # limit prune's operation to this machine's archives and not apply to
+
+ # other machines' archives also:
+
+
+
+ borg prune \
+
+ --list \
+
+ --prefix '{hostname}-' \
+
+ --show-rc \
+
+ --keep-daily 7 \
+
+ --keep-weekly 4 \
+
+ --keep-monthly 6 \
+
+
+
+ prune_exit=$?
+
+
+
+ # use highest exit code as global exit code
+
+ global_exit=$(( backup_exit > prune_exit ? backup_exit : prune_exit ))
+
+
+
+ if [ ${global_exit} -eq 0 ]; then
+
+ info "Backup and Prune finished successfully"
+
+ elif [ ${global_exit} -eq 1 ]; then
+
+ info "Backup and/or Prune finished with warnings"
+
+ else
+
+ info "Backup and/or Prune finished with errors"
+
+ fi
+
+
+
+ exit ${global_exit}
+```
+
+This listing is missing some more excludes that were specific to the test system setup and backup intentions, and is very basic with room for customization and improvement. For this test to write an article it wasn’t a problem having the passphrase inside of a shell script file. Under normal use it is better to enter the passphrase each time when performing the backup.
+
+--------------------------------------------------------------------------------
+
+via: https://fedoramagazine.org/backup-on-fedora-silverblue-with-borg/
+
+作者:[Steven Snow][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://fedoramagazine.org/author/jakfrost/
+[b]: https://github.com/lujun9972
+[1]: https://fedoramagazine.org/wp-content/uploads/2019/03/borg-816x345.jpg
+[2]: https://borgbackup.readthedocs.io/en/stable/quickstart.html
+[3]: https://github.com/flatpak/flatpak/wiki/Filesystem
+[4]: https://fedoramagazine.org/wp-content/uploads/2019/03/Screenshot-from-2019-03-18-17-11-21-1024x285.png
+[5]: https://fedoramagazine.org/wp-content/uploads/2019/03/Screenshot-from-2019-03-18-18-56-03.png
diff --git a/sources/tech/20190325 Contribute at the Fedora Test Day for Fedora Modularity.md b/sources/tech/20190325 Contribute at the Fedora Test Day for Fedora Modularity.md
new file mode 100644
index 0000000000..3de297db06
--- /dev/null
+++ b/sources/tech/20190325 Contribute at the Fedora Test Day for Fedora Modularity.md
@@ -0,0 +1,50 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Contribute at the Fedora Test Day for Fedora Modularity)
+[#]: via: (https://fedoramagazine.org/contribute-at-the-fedora-test-day-for-fedora-modularity/)
+[#]: author: (Sumantro Mukherjee https://fedoramagazine.org/author/sumantrom/)
+
+Contribute at the Fedora Test Day for Fedora Modularity
+======
+
+![][1]
+
+Modularity lets you keep the right version of an application, language runtime, or other software on your Fedora system even as the operating system is updated. You can read more about Modularity in general on the [Fedora documentation site][2].
+
+The Modularity folks have been working on Modules for everyone. As a result, the Fedora Modularity and QA teams have organized a test day for **Tuesday, March 26, 2019**. Refer to the [wiki page][3] for links to the test images you’ll need to participate. Read on for more information on the test day.
+
+### How do test days work?
+
+A test day is an event where anyone can help make sure changes in Fedora work well in an upcoming release. Fedora community members often participate, and the public is welcome at these events. If you’ve never contributed before, this is a perfect way to get started.
+
+To contribute, you only need to be able to do the following things:
+
+ * Download test materials, which include some large files
+ * Read and follow directions step by step
+
+
+
+The [wiki page][3] for the modularity test day has a lot of good information on what and how to test. After you’ve done some testing, you can log your results in the test day [web application][4]. If you’re available on or around the day of the event, please do some testing and report your results.
+
+Happy testing, and we hope to see you on test day.
+
+--------------------------------------------------------------------------------
+
+via: https://fedoramagazine.org/contribute-at-the-fedora-test-day-for-fedora-modularity/
+
+作者:[Sumantro Mukherjee][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://fedoramagazine.org/author/sumantrom/
+[b]: https://github.com/lujun9972
+[1]: https://fedoramagazine.org/wp-content/uploads/2015/03/test-days-945x400.png
+[2]: https://docs.fedoraproject.org/en-US/modularity/
+[3]: https://fedoraproject.org/wiki/Test_Day:2019-03-26_Modularity_Test_Day
+[4]: http://testdays.fedorainfracloud.org/events/61
diff --git a/sources/tech/20190325 How Open Source Is Accelerating NFV Transformation.md b/sources/tech/20190325 How Open Source Is Accelerating NFV Transformation.md
new file mode 100644
index 0000000000..22f7df8876
--- /dev/null
+++ b/sources/tech/20190325 How Open Source Is Accelerating NFV Transformation.md
@@ -0,0 +1,77 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (How Open Source Is Accelerating NFV Transformation)
+[#]: via: (https://www.linux.com/blog/2019/3/how-open-source-accelerating-nfv-transformation)
+[#]: author: (Pam Baker https://www.linux.com/users/pambaker)
+
+How Open Source Is Accelerating NFV Transformation
+======
+
+![NFV][1]
+
+In anticipation of the upcoming Open Networking Summit, we talked with Thomas Nadeau, Technical Director NFV at Red Hat, about the role of open source in innovation for telecommunications service providers.
+
+[Creative Commons Zero][2]
+
+Red Hat is noted for making open source a culture and business model, not just a way of developing software, and its message of [open source as the path to innovation][3] resonates on many levels.
+
+In anticipation of the upcoming [Open Networking Summit][4], we talked with [Thomas Nadeau][5], Technical Director NFV at Red Hat, who gave a [keynote address][6] at last year’s event, to hear his thoughts regarding the role of open source in innovation for telecommunications service providers.
+
+One reason for open source’s broad acceptance in this industry, he said, was that some very successful projects have grown too large for any one company to manage, or single-handedly push their boundaries toward additional innovative breakthroughs.
+
+“There are projects now, like Kubernetes, that are too big for any one company to do. There's technology that we as an industry need to work on, because no one company can push it far enough alone,” said Nadeau. “Going forward, to solve these really hard problems, we need open source and the open source software development model.”
+
+Here are more insights he shared on how and where open source is making an innovative impact on telecommunications companies.
+
+**Linux.com: Why is open source central to innovation in general for telecommunications service providers?**
+
+**Nadeau:** The first reason is that the service providers can be in more control of their own destiny. There are some service providers that are more aggressive and involved in this than others. Second, open source frees service providers from having to wait for long periods for the features they need to be developed.
+
+And third, open source frees service providers from having to struggle with using and managing monolith systems when all they really wanted was a handful of features. Fortunately, network equipment providers are responding to this overkill problem. They're becoming much more flexible, more modular, and open source is the best means to achieve that.
+
+**Linux.com: In your ONS keynote presentation, you said open source levels the playing field for traditional carriers in competing with cloud-scale companies in creating digital services and revenue streams. Please explain how open source helps.**
+
+**Nadeau:** Kubernetes again. OpenStack is another one. These are tools that these businesses really need, not to just expand, but to exist in today's marketplace. Without open source in that virtualization space, you’re stuck with proprietary monoliths, no control over your future, and incredibly long waits to get the capabilities you need to compete.
+
+There are two parts in the NFV equation: the infrastructure and the applications. NFV is not just the underlying platforms, but this constant push and pull between the platforms and the applications that use the platforms.
+
+NFV is really virtualization of functions. It started off with monolithic virtual machines (VMs). Then came "disaggregated VMs" where individual functions, for a variety of reasons, were run in a more distributed way. To do so meant separating them, and this is where SDN came in, with the separation of the control plane from the data plane. Those concepts were driving changes in the underlying platforms too, which drove up the overhead substantially. That in turn drove interest in container environments as a potential solution, but it's still NFV.
+
+You can think of it as the latest iteration of SOA with composite applications. Kubernetes is the kind of SOA model that they had at Google, which dropped the worry about the complicated networking and storage underneath and simply allowed users to fire up applications that just worked. And for the enterprise application model, this works great.
+
+But not in the NFV case. In the NFV case, in the previous iteration of the platform at OpenStack, everybody enjoyed near one-for-one network performance. But when we move it over here to OpenShift, we're back to square one where you lose 80% of the performance because of the latest SOA model that they've implemented. And so now evolving the underlying platform rises in importance, and so the pendulum swing goes, but it's still NFV. Open source allows you to adapt to these changes and influences effectively and quickly. Thus innovations happen rapidly and logically, and so do their iterations.
+
+**Linux.com: Tell us about the underlying Linux in NFV, and why that combo is so powerful.**
+
+**Nadeau:** Linux is open source and it always has been in some of the purest senses of open source. The other reason is that it's the predominant choice for the underlying operating system. The reality is that all major networks and all of the top networking companies run Linux as the base operating system on all their high-performance platforms. Now it's all in a very flexible form factor. You can lay it on a Raspberry Pi, or you can lay it on a gigantic million-dollar router. It's secure, it's flexible, and scalable, so operators can really use it as a tool now.
+
+**Linux.com: Carriers are always working to redefine themselves. Indeed, many are actively seeking ways to move out of strictly defensive plays against disruptors, and onto offense where they ARE the disruptor. How can network function virtualization (NFV) help in either or both strategies?**
+
+**Nadeau:** Telstra and Bell Canada are good examples. They are using open source code in concert with the ecosystem of partners they have around that code which allows them to do things differently than they have in the past. There are two main things they do differently today. One is they design their own network. They design their own things in a lot of ways, whereas before they would possibly need to use a turnkey solution from a vendor that looked a lot, if not identical, to their competitors’ businesses.
+
+These telcos are taking a real “in-depth, roll up your sleeves” approach. ow that they understand what they're using at a much more intimate level, they can collaborate with the downstream distro providers or vendors. This goes back to the point that the ecosystem, which is analogous to partner programs that we have at Red Hat, is the glue that fills in gaps and rounds out the network solution that the telco envisions.
+
+_Learn more at[Open Networking Summit][4], happening April 3-5 at the San Jose McEnery Convention Center._
+
+--------------------------------------------------------------------------------
+
+via: https://www.linux.com/blog/2019/3/how-open-source-accelerating-nfv-transformation
+
+作者:[Pam Baker][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.linux.com/users/pambaker
+[b]: https://github.com/lujun9972
+[1]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/nfv-443852_1920.jpg?itok=uFbzmEPY (NFV)
+[2]: /LICENSES/CATEGORY/CREATIVE-COMMONS-ZERO
+[3]: https://www.linuxfoundation.org/blog/2018/02/open-source-standards-team-red-hat-measures-open-source-success/
+[4]: https://events.linuxfoundation.org/events/open-networking-summit-north-america-2019/
+[5]: https://www.linkedin.com/in/tom-nadeau/
+[6]: https://onseu18.sched.com/event/Fmpr
diff --git a/sources/tech/20190325 Reducing sysadmin toil with Kubernetes controllers.md b/sources/tech/20190325 Reducing sysadmin toil with Kubernetes controllers.md
new file mode 100644
index 0000000000..80ddb77264
--- /dev/null
+++ b/sources/tech/20190325 Reducing sysadmin toil with Kubernetes controllers.md
@@ -0,0 +1,166 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Reducing sysadmin toil with Kubernetes controllers)
+[#]: via: (https://opensource.com/article/19/3/reducing-sysadmin-toil-kubernetes-controllers)
+[#]: author: (Paul Czarkowski https://opensource.com/users/paulczar)
+
+Reducing sysadmin toil with Kubernetes controllers
+======
+
+Controllers can ease a sysadmin's workload by handling things like creating and managing DNS addresses and SSL certificates.
+
+![][1]
+
+Kubernetes is a platform for reducing toil cunningly disguised as a platform for running containers. The element that allows for both running containers and reducing toil is the Kubernetes concept of a **Controller**.
+
+Most resources in Kubernetes are managed by **kube-controller-manager** , or "controller" for short. A [controller][2] is defined as "a control loop that watches the shared state of a cluster … and makes changes attempting to move the current state toward the desired state." Think of it like this: A Kubernetes controller is to a microservice as a Chef recipe (or an Ansible playbook) is to a monolith.
+
+Each Kubernetes resource is controlled by its own control loop. This is a step forward from previous systems like Chef or Puppet, which both have control loops at the server level, but not the resource level. A controller is a fairly simple piece of code that creates a control loop over a single resource to ensure the resource is behaving correctly. These control loops can stack together to create complex functionality with simple interfaces.
+
+The canonical example of this in action is in how we manage Pods in Kubernetes. A Pod is effectively a running copy of an application that a specific worker node is asked to run. If that application crashes, the kubelet running on that node will start it again. However, if that node crashes, the Pod is not recovered, as the control loop (via the kubelet process) responsible for the resource no longer exists. To make applications more resilient, Kubernetes has the ReplicaSet controller.
+
+The ReplicaSet controller is bundled inside the Kubernetes **controller-manager** , which runs on the Kubernetes master node and contains the controllers for these more advanced resources. The ReplicaSet controller is responsible for ensuring that a set number of copies of your application is always running. To do this, the ReplicaSet controller requests that a given number of Pods is created. It then routinely checks that the correct number of Pods is still running and will request more Pods or destroy existing Pods to do so.
+
+By requesting a ReplicaSet from Kubernetes, you get a self-healing deployment of your application. You can further add lifecycle management to your workload by requesting [a Deployment][3], which is a controller that manages ReplicaSets and provides rolling upgrades by managing multiple versions of your application's ReplicaSets.
+
+These controllers are great for managing Kubernetes resources and fantastic for managing resources outside of Kubernetes. The [Cloud Controller Manager][4] is a grouping of Kubernetes controllers that acts on resources external to Kubernetes, specifically resources that provide functionality to Kubernetes on the underlying cloud infrastructure. This is what drives Kubernetes' ability to do things like having a **LoadBalancer** [Service][5] type create and manage a cloud-specific load-balancer (e.g., an Elastic Load Balancer on AWS).
+
+Furthermore, you can extend Kubernetes by writing a controller that watches for events and annotations and performs extra work, acting on Kubernetes resources or external resources that have some form of programmable API.
+
+To review:
+
+ * Controllers are a fundamental building block of Kubernetes' functionality.
+ * A controller forms a control loop to ensure that the state of a given resource matches the requested state.
+ * Kubernetes provides controllers via Controller Manager and Cloud Controller Manager processes that provide additional resilience and functionality.
+ * The ReplicaSet controller adds resiliency to pods by ensuring the correct number of replicas is running.
+ * A Deployment controller adds rolling upgrade capabilities to ReplicaSets.
+ * You can extend Kubernetes' functionality by writing your own controllers.
+
+
+
+### Controllers reduce sysadmin toil
+
+Some of the most common tickets in a sysadmin's queue are for fairly simple tasks that should be automated, but for various reasons are not. For example, creating or updating a DNS record generally requires updating a [zone file][6], but one bad entry and you can take down your entire DNS infrastructure. Or how about those tickets that look like _[SYSAD-42214] Expired SSL Certificate - Production is down_?
+
+[![DNS Haiku][7]][8]
+
+DNS haiku, image by HasturHasturHamster
+
+What if I told you that Kubernetes could manage these things for you by running some additional controllers?
+
+Imagine a world where asking Kubernetes to run applications for you would automatically create and manage DNS addresses and SSL certificates. What a world we live in!
+
+#### Example: External DNS controller
+
+The **[external-dns][9]** controller is a perfect example of Kubernetes treating operations as a microservice. You configure it with your DNS provider, and it will watch resources including Services and Ingress controllers. When one of those resources changes, it will inspect them for annotations that will tell it when it needs to perform an action.
+
+With the **external-dns** controller running in your cluster, you can add the following annotation to a service, and it will go out and create a matching [DNS A record][10] for that resource:
+```
+kubectl annotate service nginx \
+"external-dns.alpha.kubernetes.io/hostname=nginx.example.org."
+```
+You can change other characteristics, such as the DNS record's TTL value:
+```
+kubectl annotate service nginx \
+"external-dns.alpha.kubernetes.io/ttl=10"
+```
+Just like that, you now have automatic DNS management for your applications and services in Kubernetes that reacts to any changes in your cluster to ensure your DNS is correct.
+
+#### Example: Certificate manager operator
+
+Like the **external-dns** controller, the [**cert-manager**][11] will react to changes in resources, but it also comes with a custom resource definition (CRD) that will allow you to request certificates as a resource on their own, not just as a byproduct of an annotation.
+
+**cert-manager** works with [Let's Encrypt][12] and other sources of certificates to request valid, signed Transport Layer Security (TLS) certificates. You can even use it in combination with **external-dns** , like in the following example, which registers **web.example.com** , retrieves a TLS certificate from Let's Encrypt, and stores it in a Secret.
+
+```
+apiVersion: extensions/v1beta1
+kind: Ingress
+metadata:
+ annotations:
+ certmanager.k8s.io/acme-http01-edit-in-place: "true"
+ certmanager.k8s.io/cluster-issuer: letsencrypt-prod
+ kubernetes.io/tls-acme: "true"
+ name: example
+spec:
+ rules:
+ - host: web.example.com
+ http:
+ paths:
+ - backend:
+ serviceName: example
+ servicePort: 80
+ path: /*
+ tls:
+ - hosts:
+ - web.example.com
+ secretName: example-tls
+```
+
+You can also request a certificate directly from the **cert-manager** CRD, like in the following example. As in the above, it will result in a certificate key pair stored in a Kubernetes Secret:
+```
+apiVersion: certmanager.k8s.io/v1alpha1
+kind: Certificate
+metadata:
+ name: example-com
+ namespace: default
+spec:
+ secretName: example-com-tls
+ issuerRef:
+ name: letsencrypt-staging
+ commonName: example.com
+ dnsNames:
+ - www.example.com
+ acme:
+ config:
+ - http01:
+ ingressClass: nginx
+ domains:
+ - example.com
+ - http01:
+ ingress: my-ingress
+ domains:
+ - www.example.com
+```
+
+### Conclusion
+
+This was a quick look at one way Kubernetes is helping enable a new wave of changes in how we operate software. This is one of my favorite topics, and I look forward to sharing more on [Opensource.com][14] and my [blog][15]. I'd also like to hear how you use controllers—message me on Twitter [@pczarkowski][16].
+
+* * *
+
+_This article is based on[Cloud Native Operations - Kubernetes Controllers][17] originally published on Paul Czarkowski's blog._
+
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/3/reducing-sysadmin-toil-kubernetes-controllers
+
+作者:[Paul Czarkowski][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/paulczar
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/ship_wheel_gear_devops_kubernetes.png?itok=xm4a74Kv
+[2]: https://kubernetes.io/docs/reference/command-line-tools-reference/kube-controller-manager/
+[3]: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/
+[4]: https://kubernetes.io/docs/tasks/administer-cluster/running-cloud-controller/
+[5]: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types
+[6]: https://en.wikipedia.org/wiki/Zone_file
+[7]: https://opensource.com/sites/default/files/uploads/dns_haiku.png (DNS Haiku)
+[8]: https://www.reddit.com/r/sysadmin/comments/4oj7pv/network_solutions_haiku/
+[9]: https://github.com/kubernetes-incubator/external-dns
+[10]: https://en.wikipedia.org/wiki/List_of_DNS_record_types#Resource_records
+[11]: http://docs.cert-manager.io/en/latest/
+[12]: https://letsencrypt.org/
+[13]: http://www.example.com
+[14]: http://Opensource.com
+[15]: https://tech.paulcz.net/blog/
+[16]: https://twitter.com/pczarkowski
+[17]: https://tech.paulcz.net/blog/cloud-native-operations-k8s-controllers/
diff --git a/sources/tech/20190326 An inside look at an IIoT-powered smart factory.md b/sources/tech/20190326 An inside look at an IIoT-powered smart factory.md
new file mode 100644
index 0000000000..52c7c925dd
--- /dev/null
+++ b/sources/tech/20190326 An inside look at an IIoT-powered smart factory.md
@@ -0,0 +1,74 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (An inside look at an IIoT-powered smart factory)
+[#]: via: (https://www.networkworld.com/article/3384378/an-inside-look-at-tempo-automations-iiot-powered-smart-factory.html#tk.rss_all)
+[#]: author: (Fredric Paul https://www.networkworld.com/author/Fredric-Paul/)
+
+An inside look at an IIoT-powered smart factory
+======
+
+### Despite housing some 50 robots and 50 people, Tempo Automation’s gleaming connected factory relies on industrial IoT and looks more like a high-tech startup office than a manufacturing plant.
+
+![Tempo Automation][1]
+
+As someone who’s spent his whole career working in offices, not factories, I had very little idea what a modern “smart factory” powered by the industrial Internet of Things (IIoT) might look like. That’s why I was so interested in [Tempo Automation][2]’s new 42,000-square-foot facility in San Francisco’s trendy Design District.
+
+Frankly, I pictured the company’s facility, which uses IIoT to automatically configure, operate, and monitor the prototyping and low-volume production of printed circuit board assemblies (PCBAs), as a cacophony of robots and conveyor belts attended to by a grizzled band of grease-stained technicians. You know, a 21stcentury update of Charlie Chaplin’s 1936 classic *Modern Times *making equipment for customers in the aerospace, medtech, industrial automation, consumer electronics, and automotive industries. (The company just inked a [new contract with Lockheed Martin][3].)
+
+**[ Learn more about the[industrial Internet of Things][4]. | Get regularly scheduled insights by [signing up for Network World newsletters][5]. ]**
+
+Not exactly. As you can see from the below pictures, despite housing some 50 robots and 50 people, this gleaming “connected factory” looks more like a high-tech startup office, with just as many computers and few more hard-to-identify machines, including Solder Jet and Stencil Printers, zone reflow ovens, 3D X-ray devices and many more.
+
+![Tempo Automation office space][6]
+
+![Tempo Automation factory floor][7]
+
+## How Tempo Automation's 'smart factory' works
+
+On the front end, Tempo’s customers upload CAD files with their board designs and Bills of Materials (BOM) listing the required parts to be used. After performing feature extraction on the design and developing a virtual model of the finished product, the Tempo system, the platform (called Tempocom) creates a manufacturing plan and automatically programs the factory’s machines. Tempocom also creates work plans for the factory employees, uploading them to the networked IIoT mobile devicesthey all carry. Updated in real time based on design and process changes, this“digital traveler” tells workers where to go and what to work on next.
+
+While Tempocom is planning and organizing the internal work of production, the system is also connected to supplier databases, seeking and ordering the parts that will be used in assembly, optimizing for speed of delivery to the Tempo factory.
+
+## Connecting the digital thread
+
+“There could be up to 20 robots, 400 unique parts, and 25 people working on the factory floor to produce one order start to finish in a matter of hours,” explained [Shashank Samala][8], Tempo’s co-founder and vice president of product in an email. Tempo “employs IIoT to automatically configure, operate, and monitor” the entire process, coordinated by a “connected manufacturing system” that creates an “unbroken digital thread from design intent of the engineer captured on the website, to suppliers distributed across the country, to robots and people on the factory floor.”
+
+Rather than the machines on the floor functioning as “isolated islands of technology,” Samala added, Tempo Automation uses [Amazon Web Services (AWS) GovCloud][9] to network everything in a bi-directional feedback loop.
+
+“After customers upload their design to the Tempo platform, our software extracts the design features and then streams relevant data down to all the devices, processes, and robots on the factory floor,” he said. “This loop then works the other way: As the robots build the products, they collect data and feedback about the design during production. This data is then streamed back through the Tempo secure cloud architecture to the customer as a ‘Production Forensics’ report.”
+
+Samala claimed the system has “streamlined operations, improved collaboration, and simplified remote management and control.”
+
+## Traditional IoT, too
+
+Of course, the Tempo factory isn’t all fancy, cutting-edge IIoT implementations. According to Ryan Saul, vice president of manufacturing,the plant also includes an array of IoT sensors that track temperature, humidity, equipment status, job progress, reported defects, and so on to help engineers and executives understand how the facility is operating.
+
+Join the Network World communities on [Facebook][10] and [LinkedIn][11] to comment on topics that are top of mind.
+
+--------------------------------------------------------------------------------
+
+via: https://www.networkworld.com/article/3384378/an-inside-look-at-tempo-automations-iiot-powered-smart-factory.html#tk.rss_all
+
+作者:[Fredric Paul][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.networkworld.com/author/Fredric-Paul/
+[b]: https://github.com/lujun9972
+[1]: https://images.idgesg.net/images/article/2019/03/tempo-automation-iiot-factory-floor-100791923-large.jpg
+[2]: http://www.tempoautomation.com/
+[3]: https://www.businesswire.com/news/home/20190325005097/en/Tempo-Automation-Announces-Contract-Lockheed-Martin
+[4]: https://www.networkworld.com/article/3243928/internet-of-things/what-is-the-industrial-iot-and-why-the-stakes-are-so-high.html#nww-fsb
+[5]: https://www.networkworld.com/newsletters/signup.html#nww-fsb
+[6]: https://images.idgesg.net/images/article/2019/03/tempo-automation-iiot-factory-2-100791921-large.jpg
+[7]: https://images.idgesg.net/images/article/2019/03/tempo-automation-iiot-factory-100791922-large.jpg
+[8]: https://www.linkedin.com/in/shashanksamala/
+[9]: https://aws.amazon.com/govcloud-us/
+[10]: https://www.facebook.com/NetworkWorld/
+[11]: https://www.linkedin.com/company/network-world
diff --git a/sources/tech/20190326 Bringing Kubernetes to the bare-metal edge.md b/sources/tech/20190326 Bringing Kubernetes to the bare-metal edge.md
new file mode 100644
index 0000000000..836eac23be
--- /dev/null
+++ b/sources/tech/20190326 Bringing Kubernetes to the bare-metal edge.md
@@ -0,0 +1,72 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Bringing Kubernetes to the bare-metal edge)
+[#]: via: (https://opensource.com/article/19/3/bringing-kubernetes-bare-metal-edge)
+[#]: author: (John Studarus https://opensource.com/users/studarus)
+
+Bringing Kubernetes to the bare-metal edge
+======
+New Kubespray features enable Kubernetes clusters to be deployed across
+next-generation edge locations.
+![cubes coming together to create a larger cube][1]
+
+[Kubespray][2], a community project that provides Ansible playbooks for the deployment and management of Kubernetes clusters, recently added support for the bare-metal cloud [Packet][3]. This allows Kubernetes clusters to be deployed across next-generation edge locations, including [cell-tower based micro datacenters][4].
+
+Packet, which is unique in its bare-metal focus, expands Kubespray's support beyond the usual clouds—Amazon Web Services, Google Compute Engine, Azure, OpenStack, vSphere, and Oracle Cloud Infrastructure. Kubespray removes the complexities of standing up a Kubernetes cluster through automation using Terraform and Ansible. Terraform provisions the infrastructure and installs the prerequisites for the Ansible installation. Terraform provider plugins enable support for a variety of different cloud providers. The Ansible playbook then deploys and configures Kubernetes.
+
+Since there are already [detailed instructions online][5] for deploying with Kubespray on Packet, I'll focus on why bare-metal support is important for Kubernetes and what's required to make it happen.
+
+### Why bare metal?
+
+Historically, Kubernetes deployments relied upon the "creature comforts" of a public cloud or a fully managed private cloud to provide virtual machines and networking infrastructure for running Kubernetes. This adds a layer of abstraction (e.g., a hypervisor with virtual machines) that Kubernetes doesn't necessarily need. In fact, Kubernetes began its life on bare metal as Google's Borg.
+
+As we move workloads closer to the end user (in the form of edge computing) and deploy to more diverse environments (including hybrid and on-premises infrastructure of different architectures and sizes), relying on a homogenous public cloud substrate isn't always possible or ideal. For instance, with edge locations being resource constrained, it is more efficient and practical to run Kubernetes directly on bare metal.
+
+### Mind the gaps
+
+Without a full-featured public cloud underneath a bare-metal cluster, some traditional capabilities, such as load balancing and storage orchestration, will need to be managed directly within the Kubernetes cluster. Luckily there are projects, such as [MetalLB][6] and [Rook][7], that provide this support for Kubernetes.
+
+MetalLB, a Layer 2 and Layer 3 load balancer, is integrated into Kubespray, and it's easy to install support for Rook, which orchestrates Ceph to provide distributed and replicated storage for a Kubernetes cluster, on a bare-metal cluster. In addition to enabling full functionality, this "bring your own" approach to storage and load balancing removes reliance upon specific cloud services, helping you avoid lock-in with an approach that can be installed anywhere.
+
+Kubespray has support for ARM64 processors. The ARM architecture (which is starting to show up regularly in datacenter-grade hardware, SmartNICs, and other custom accelerators) has a long history in mobile and embedded devices, making it well-suited for edge deployments.
+
+Going forward, I hope to see deeper integration with MetalLB and Rook as well as bare-metal continuous integration (CI) of daily builds atop a number of different hardware configurations. Access to automated bare metal at Packet enables testing and maintaining support across various processor types, storage options, and networking setups. This will help ensure that Kubespray-powered Kubernetes can be deployed and managed confidently across public clouds, bare metal, and edge environments.
+
+### It takes a village
+
+Kubespray is an open source project driven by the community, indebted to its core developers and contributors as well as the folks that assisted with the Packet integration. Contributors include [Maxime Guyot][8] and [Aivars Sterns][9] for the initial commits and code reviews, [Rong Zhang][10] and [Ed Vielmetti][11] for document reviews, as well as [Tomáš Karásek][12] (who maintains the Packet Go library and Terraform provider).
+
+* * *
+
+_John Studarus will present[The Open Micro Edge Data Center][13] at the [Open Infrastructure Summit][14], April 29-May 1 in Denver._
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/3/bringing-kubernetes-bare-metal-edge
+
+作者:[John Studarus][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/studarus
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/cube_innovation_process_block_container.png?itok=vkPYmSRQ (cubes coming together to create a larger cube)
+[2]: https://kubespray.io/
+[3]: https://www.packet.com/
+[4]: https://twitter.com/packethost/status/1062147355108085760
+[5]: https://github.com/kubernetes-sigs/kubespray/blob/master/docs/packet.md
+[6]: https://metallb.universe.tf/
+[7]: https://rook.io/
+[8]: https://twitter.com/Miouge
+[9]: https://github.com/Atoms
+[10]: https://github.com/riverzhang
+[11]: https://twitter.com/vielmetti
+[12]: https://t0mk.github.io/
+[13]: https://www.openstack.org/summit/denver-2019/summit-schedule/events/23153/the-open-micro-edge-data-center
+[14]: https://openstack.org/summit
diff --git a/sources/tech/20190326 Changes in SD-WAN Purchase Drivers Show Maturity of the Technology.md b/sources/tech/20190326 Changes in SD-WAN Purchase Drivers Show Maturity of the Technology.md
new file mode 100644
index 0000000000..803b6a993d
--- /dev/null
+++ b/sources/tech/20190326 Changes in SD-WAN Purchase Drivers Show Maturity of the Technology.md
@@ -0,0 +1,65 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Changes in SD-WAN Purchase Drivers Show Maturity of the Technology)
+[#]: via: (https://www.networkworld.com/article/3384103/changes-in-sd-wan-purchase-drivers-show-maturity-of-the-technology.html#tk.rss_all)
+[#]: author: (Cliff Grossner https://www.networkworld.com/author/Cliff-Grossner/)
+
+Changes in SD-WAN Purchase Drivers Show Maturity of the Technology
+======
+
+![istock][1]
+
+[SD-WANs][2] have been available now for the past five years, but adoption has been light compared to that of the overall WAN market. This should be no surprise, as the technology was immature, and customers were dipping their toes in the water first as a test. Recently, however, there are signs that the market is maturing, which also happens to coincide with an acceleration of the market.
+
+Evidence of the maturation of SD-WANs can be seen in the most recent IHS Markit _Campus LAN and WAN SDN Strategies and Leadership North American Enterprise Survey_. Exhibit 1 shows that the top drivers of SD-WAN deployments are the simplification of WAN provisioning, automation capabilities. and direct cloud connectivity—all of which require an architectural change.
+
+This is in stark contrast to the approach of early adopters looking for a reduction in opex and capex savings, doing so in the past by shifting to cheap broadband and low-cost branch hardware. The survey data finds that opex savings now ranks tied in fifth place among the purchase drivers of SD-WAN; and that reduced capex is last, indicating that cost savings no longer possess the same level of importance as with early adopters.
+
+The shift in purchase drivers indicates companies are looking for SD-WAN to provide more value than legacy WAN.
+
+With [SD-WAN][3], the “software defined” indicates that the control plane has been separated from the data plane, enabling the control plane to be abstracted away from the hardware and allowing centralized, distributed, and hybrid control architectures, working alongside the centralized management of those architectures. This provides many benefits, the biggest of which is to make WAN provisioning easier.
+
+![Exhibit 1: Simplification and automation are top drivers for SD-WAN.][4]
+
+With SD-WAN, most mainstream buyers now demand Zero Touch Provisioning, where the SD-WAN appliance automatically calls home when it attaches to the network and pulls its configuration down from a centralized location. Also, changes can be made through a centralized console and then immediately pushed out to every device. This can automate many of the mundane and repetitive tasks associated with running a network.
+
+Such a setup carries many benefits—the most important being that highly skilled network engineers can dedicate more time to innovation and less time to working on tasks associated with “keeping the lights on.”
+
+At present, most resources—time and money—associated with running the WAN are allocated to maintaining the status quo. In the cloud era, however, business leaders embracing digital transformation are looking to their IT organization to help drive innovation and leapfrog the competition. SD-WANs can modernize the network, and the technology will tip the IT resource scale back in favor of innovation.
+
+### Mainstream buyers set new expectations for SD-WAN
+
+With early adopters, technology innovation is key because adopters are generally tech-savvy buyers and are always looking to use the latest and greatest to gain an edge. With mainstream buyers, other concerns arise. Exhibit 2 from the IHS Markit survey shows that technological innovation now ranks tied in fourth place in what buyers look for from an SD-WAN provider. While innovation is still important, factors such as security, financial stability, and product service and reliability rank higher. And although businesses need a strong technical solution, it cannot be achieved at the expense of security, vendor stability, or quality without putting operations at risk.
+
+It’s not surprising, then, that security turned out to be the overwhelming top evaluation criterion, as SD-WANs enable businesses to implement local internet breakout and cloud on-ramp features. Overall, SD-WANs help make applications perform better, especially as enterprises deploy workloads in off-premises, cloud-service-provider-operated data centers as they build their hybrid and multi-clouds.
+
+Another security capability of SD-WANs is their ability to easily implement segmentation, which enables businesses to establish centrally defined and globally consistent security policies that isolate traffic. For example, a retailer could isolate point-of-sale systems from its guest Wi-Fi network. [SD-WAN vendors][5] can also establish partnerships with well-known security vendors that enable the SD-WAN software to be service chained into application traffic flows, in the process allowing mainstream buyers their choice of security technology.
+
+![Exhibit 2: SD-WAN buyers now want security and financially viable vendors.][6]
+
+### The bottom line
+
+The SD-WAN market is maturing, and the shift from early adopters to mainstream businesses will create a “rising tide” that will benefit all SD-WAN buyers in the WAN ecosystem. As a result, vendors will work to meet calls emphasizing greater simplicity and risk reduction, as well as bring about features that provide an integrated connectivity fabric for enterprise edge, hybrid, and multi-clouds.
+
+--------------------------------------------------------------------------------
+
+via: https://www.networkworld.com/article/3384103/changes-in-sd-wan-purchase-drivers-show-maturity-of-the-technology.html#tk.rss_all
+
+作者:[Cliff Grossner][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.networkworld.com/author/Cliff-Grossner/
+[b]: https://github.com/lujun9972
+[1]: https://images.idgesg.net/images/article/2019/03/istock-998475736-100791932-large.jpg
+[2]: https://www.silver-peak.com/sd-wan
+[3]: https://www.silver-peak.com/sd-wan/sd-wan-explained
+[4]: https://images.idgesg.net/images/article/2019/03/chart-1_post-10-100791930-large.jpg
+[5]: https://www.silver-peak.com/sd-wan/choosing-an-sd-wan-vendor
+[6]: https://images.idgesg.net/images/article/2019/03/chart-2_post-10-100791931-large.jpg
diff --git a/sources/tech/20190326 How to use NetBSD on a Raspberry Pi.md b/sources/tech/20190326 How to use NetBSD on a Raspberry Pi.md
new file mode 100644
index 0000000000..37c14fec39
--- /dev/null
+++ b/sources/tech/20190326 How to use NetBSD on a Raspberry Pi.md
@@ -0,0 +1,229 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (How to use NetBSD on a Raspberry Pi)
+[#]: via: (https://opensource.com/article/19/3/netbsd-raspberry-pi)
+[#]: author: (Seth Kenlon https://opensource.com/users/seth)
+
+How to use NetBSD on a Raspberry Pi
+======
+
+Experiment with NetBSD, an open source OS with direct lineage back to the original UNIX source code, on your Raspberry Pi.
+
+![][1]
+
+Do you have an old Raspberry Pi lying around gathering dust, maybe after a recent Pi upgrade? Are you curious about [BSD Unix][2]? If you answered "yes" to both of these questions, you'll be pleased to know that the first is the solution to the second, because you can run [NetBSD][3], as far back as the very first release, on a Raspberry Pi.
+
+BSD is the Berkley Software Distribution of [Unix][4]. In fact, it's the only open source Unix with direct lineage back to the original source code written by Dennis Ritchie and Ken Thompson at Bell Labs. Other modern versions are either proprietary (such as AIX and Solaris) or clever re-implementations (such as Minix and GNU/Linux). If you're used to Linux, you'll feel mostly right at home with BSD, but there are plenty of new commands and conventions to discover. If you're still relatively new to open source, trying BSD is a good way to experience a traditional Unix.
+
+Admittedly, NetBSD isn't an operating system that's perfectly suited for the Pi. It's a minimal install compared to many Linux distributions designed specifically for the Pi, and not all components of recent Pi models are functional under NetBSD yet. However, it's arguably an ideal OS for the older Pi models, since it's lightweight and lovingly maintained. And if nothing else, it's a lot of fun for any die-hard Unix geek to experience another side of the [POSIX][5] world.
+
+### Download NetBSD
+
+There are different versions of BSD. NetBSD has cultivated a reputation for being lightweight and versatile (its website features the tagline "Of course it runs NetBSD"). It offers an image of the latest version of the OS for every version of the Raspberry Pi since the original. To download a version for your Pi, you must first [determine what variant of the ARM architecture your Pi uses][6]. Some information about this is available on the NetBSD site, but for a comprehensive overview, you can also refer to [RPi Hardware History][7].
+
+The Pi I used for this article is, as far as I can tell, a Raspberry Pi Model B Rev 2.0 (with two USB ports and no mounting holes). According to the [Raspberry Pi FAQ][8], this means the architecture is ARMv6, which translates to **earmv6hf** in NetBSD's architecture notation.
+
+![NetBSD on Raspberry Pi][9]
+
+If you're not sure what kind of Pi you have, the good news is that there are only two Pi images, so try **earmv7hf** first; if it doesn't work, fall back to **earmv6hf**.
+
+For the easiest and quickest install, use the binary image instead of an installer. Using the image is the most common method of getting an OS onto your Pi: you copy the image to your SD card and boot it up. There's no install necessary, because the image is a generic installation of the OS, and you've just copied it, bit for bit, onto the media that the Pi uses as its boot drive.
+
+The image files are found in the **binary > gzimg** directories of the NetBSD installation media server, which you can reach from the [front page][3] of NetBSD.org. The image is **rpi.img.gz** , a compressed **.img** file. Download it to your hard drive.
+
+Once you have downloaded the entire image, extract it. If you're running Linux, BSD, or MacOS, you can use the **gunzip** command:
+
+```
+$ gunzip ~/Downloads/rpi.img.gz
+```
+
+If you're working on Windows, you can install the open source [7-Zip][10] archive utility.
+
+### Copy the image to your SD card
+
+Once the image file is uncompressed, you must copy it to your Pi's SD card. There are two ways to do this, so use the one that works best for you.
+
+#### 1\. Using Etcher
+
+Etcher is a cross-platform application specifically designed to copy OS images to USB drives and SD cards. Download it from [Etcher.io][11] and launch it.
+
+In the Etcher interface, select the image file on your hard drive and the SD card you want to flash, then click the Flash button.
+
+![Etcher][12]
+
+That's it.
+
+#### 2\. Using the dd command
+
+On Linux, BSD, or MacOS, you can use the **dd** command to copy the image to your SD card.
+
+ 1. First, insert your SD card into a card reader. Don't mount the card to your system because **dd** needs the device to be disengaged to copy data onto it.
+
+ 2. Run **dmesg | tail** to find out where the card is located without it being mounted. On MacOS, use **diskutil list**.
+
+ 3. Copy the image file to the SD card:
+
+```
+$ sudo dd if=~/Downloads/rpi.img of=/dev/mmcblk0 bs=2M status=progress
+```
+
+Before doing this, you _must be sure_ you have the correct location of the SD card. If you copy the image file to the incorrect device, you could lose data. If you are at all unsure about this, use Etcher instead!
+
+
+
+
+When either **dd** or Etcher has written the image to the SD card, place the card in your Pi and power it on.
+
+### First boot
+
+The first time it's booted, NetBSD detects that the SD card's filesystem does not occupy all the free space available and resizes the filesystem accordingly.
+
+![Booting NetBSD on Raspberry Pi][13]
+
+Once that's finished, the Pi reboots and presents a login prompt. Log into your NetBSD system using **root** as the user name. No password is required.
+
+### Set up a user account
+
+First, set a password for the root user:
+
+```
+# passwd
+```
+
+Then create a user account for yourself with the **-m** option to prompt NetBSD to create a home directory and the **-G wheel** option to add your account to the wheel group so that you can become the administrative user (root) as needed:
+
+```
+# useradd -m -G wheel seth
+```
+
+Use the **passwd** command again to set a password for your user account:
+
+```
+# passwd seth
+```
+
+Log out, and then log back in with your new credentials.
+
+### Add software to NetBSD
+
+If you've ever used a Pi, you probably know that the way to add more software to your system is with a special command like **apt** or **dnf** (depending on whether you prefer to run [Raspbian][14] or [FedBerry][15] on your Pi). On NetBSD, use the **pkg_add** command. But some setup is required before the command knows where to go to get the packages you want to install.
+
+There are ready-made (pre-compiled) packages for NetBSD on NetBSD's servers using the scheme **<[ftp://ftp.netbsd.org/pub/pkgsrc/packages/NetBSD/[PORT]/[VERSION]/All>][16]**. Replace PORT with the architecture you are using, either **earmv6hf** or **earmv7hf**. Replace VERSION with the NetBSD release you are using; at the time of this writing, that's **8.0**.
+
+Place this value in a file called **/etc/pkg_install.conf**. Since that's a system file outside your user folder, you must invoke root privileges to create it:
+
+```
+$ su -
+
+# echo "PKG_PATH=" >> /etc/pkg_install.conf
+```
+
+Now you can install packages from the NetBSD software distribution. A good first candidate is Bash, commonly the default shell on a Linux (and Mac) system. Also, if you're not already a Vi text editor user, you may want to try something more intuitive such as [Jove][17] or [Nano][18]:
+
+```
+# pkg_add -v bash jove nano
+# exit
+$
+```
+
+Unlike many Linux distributions ([Slackware][19] being a notable exception), NetBSD does very little configuration on your behalf, and this is considered a feature. So, to use Bash, Jove, or Nano as your default toolset, you must set the configuration yourself.
+
+You can set many of your preferences dynamically using environment variables, which are special variables that your whole system can access. For instance, most applications in Unix know that if there is a **VISUAL** or **EDITOR** variable set, the value of those variables should be used as the default text editor. You can set these two variables temporarily, just for your current login session:
+
+```
+$ export EDITOR=nano
+# export VISUAL=nano
+```
+
+Or you can make them permanent by adding them to the default NetBSD **.profile** file:
+
+```
+$ sed -i 's/EDITOR=vi/EDITOR=nano/' ~/.profile
+```
+
+Load your new settings:
+
+```
+$ . ~/.profile
+```
+
+To make Bash your default shell, use the **chsh** (change shell) command, which now loads into your preferred editor. Before running **chsh** , though, make sure you know where Bash is located:
+
+```
+$ which bash
+/usr/pkg/bin/bash
+```
+
+Set the value for **shell** in the **chsh** entry to **/usr/pkg/bin/bash** , then save the document.
+
+### Add sudo
+
+The **pkg_add** command is a privileged command, which means to use it, you must become the root user with the **su** command. If you prefer, you can also set up the **sudo** command, which allows certain users to use their own password to execute administrative tasks.
+
+First, install it:
+
+```
+# pkg_add -v sudo
+```
+
+And then use the **visudo** command to edit its configuration file. You must use the **visudo** command to edit the **sudo** configuration, and it must be run as root:
+
+```
+$ su
+# SUDO_EDITOR=nano visudo
+```
+
+Once you are in the editor, find the line allowing members of the wheel group to execute any command, and uncomment it (by removing **#** from the beginning of the line):
+
+```
+### Uncomment to allow members of group wheel to execute any command
+%wheel ALL=(ALL) ALL
+```
+
+Save the document as described in Nano's bottom menu panel and exit the root shell.
+
+Now you can use **pkg_add** with **sudo** instead of becoming root:
+
+```
+$ sudo pkg_add -v fluxbox
+```
+
+### Net gain
+
+NetBSD is a full-featured Unix operating system, and now that you have it set up on your Pi, you can explore every nook and cranny. It happens to be a pretty lightweight OS, so even an old Pi with a 700mHz processor and 256MB of RAM can run it with ease. If this article has sparked your interest and you have an old Pi sitting in a drawer somewhere, try it out!
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/3/netbsd-raspberry-pi
+
+作者:[Seth Kenlon (Red Hat, Community Moderator)][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/seth
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/code_computer_development_programming.png?itok=4OM29-82
+[2]: https://en.wikipedia.org/wiki/Berkeley_Software_Distribution
+[3]: http://netbsd.org/
+[4]: https://en.wikipedia.org/wiki/Unix
+[5]: https://en.wikipedia.org/wiki/POSIX
+[6]: http://wiki.netbsd.org/ports/evbarm/raspberry_pi
+[7]: https://elinux.org/RPi_HardwareHistory
+[8]: https://www.raspberrypi.org/documentation/faqs/
+[9]: https://opensource.com/sites/default/files/uploads/pi.jpg (NetBSD on Raspberry Pi)
+[10]: https://www.7-zip.org/
+[11]: https://www.balena.io/etcher/
+[12]: https://opensource.com/sites/default/files/uploads/etcher_0.png (Etcher)
+[13]: https://opensource.com/sites/default/files/uploads/boot.png (Booting NetBSD on Raspberry Pi)
+[14]: http://raspbian.org/
+[15]: http://fedberry.org/
+[16]: ftp://ftp.netbsd.org/pub/pkgsrc/packages/NetBSD/%5BPORT%5D/%5BVERSION%5D/All%3E
+[17]: https://opensource.com/article/17/1/jove-lightweight-alternative-vim
+[18]: https://www.nano-editor.org/
+[19]: http://www.slackware.com/
diff --git a/sources/tech/20190326 Today-s Retailer is Turning to the Edge for CX.md b/sources/tech/20190326 Today-s Retailer is Turning to the Edge for CX.md
new file mode 100644
index 0000000000..babc54c0f7
--- /dev/null
+++ b/sources/tech/20190326 Today-s Retailer is Turning to the Edge for CX.md
@@ -0,0 +1,52 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Today’s Retailer is Turning to the Edge for CX)
+[#]: via: (https://www.networkworld.com/article/3384202/today-s-retailer-is-turning-to-the-edge-for-cx.html#tk.rss_all)
+[#]: author: (Cindy Waxer https://www.networkworld.com/author/Cindy-Waxer/)
+
+Today’s Retailer is Turning to the Edge for CX
+======
+
+### Despite the increasing popularity and convenience of ecommerce, 92% of purchases continue to be made off-line, according to the U.S. Census.
+
+![iStock][1]
+
+Despite the increasing popularity and convenience of ecommerce, 92% of purchases continue to be made off-line, according to the [U.S. Census][2]. That’s putting enormous pressure on retailers to meet new consumer expectations around real-time access to merchandise and order information. In fact, 85.3% of shoppers expect retailers to provide associates with handheld or fixed devices to check inventory and price within a store, a nearly 51% increase over 2017, according to a [survey from SOTI][3].
+
+With an eye on transforming the customer experience of spending time in a store, retailers are investing aggressively in compute power located closer to the buyer, also known as [edge computing][4].
+
+So what new and innovative technologies are edge environments supporting? Here’s where retail is headed with customer service and how edge computing will help them get there.
+
+**Face forward** : Facial recognition technology is on the rise in retail as brands search for new ways to engage customers. Take, CaliBurger, for example. The restaurant chain recently tested out self-ordering kiosks that use AI and facial-recognition technology to identify registered customers and pull up their loyalty accounts and order preferences. By automatically displaying a customer’s most popular purchases, the system aims to help patrons complete their orders in seconds flat for greater speed and convenience.
+
+**Customer experience on display** : Forget about traditional counter displays. Savvy retailers are experimenting with high-tech, in-store digital signage solutions to attract consumers and gather valuable data. For instance, Glass Media’s projection-based, end-to-end digital retail signage combines display technology, a cloud-based IoT platform, and data analytic capabilities. Through projection, the solution can influence customers at the point-of-decision.
+
+**Backroom access** : Tracking inventory manually requires substantial human resources. IoT-powered backroom technologies such as RFID, real-time point of sale (POS), and smart shelving systems promise to change that by improving the accuracy of inventory tracking throughout the supply chain. These automated solutions can track and reorder items automatically, eliminating the need for humans to take inventory and reducing the risk of product shortages.
+
+**Robots to the rescue** : Hoping to transform the branch experience, HSBC recently unveiled Pepper, a concierge robot whose job is to help customers with simple tasks, from answering commonly asked questions to directing them to available tellers. Pepper also acts as an online banking station where customers can log into their mobile banking account or access information about products. By putting Pepper on the payroll, HSBC hopes to reduce customer wait times and free up its “human” bankers.
+
+These innovative technologies provide retailers with unique opportunities to enhance customer experience, develop new revenue streams, and boost customer loyalty. But many of them require edge computing to work properly. Bandwidth-intensive content and vast volumes of data can lead to latency issues, outages, and other IT headaches. Fortunately, by placing computing power and storage capabilities directly on the edge of the network, edge computing can help retailers deliver the best customer experience possible.
+
+To find out more about how edge computing is transforming the customer experience in retail, visit [APC.com][5].
+
+--------------------------------------------------------------------------------
+
+via: https://www.networkworld.com/article/3384202/today-s-retailer-is-turning-to-the-edge-for-cx.html#tk.rss_all
+
+作者:[Cindy Waxer][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.networkworld.com/author/Cindy-Waxer/
+[b]: https://github.com/lujun9972
+[1]: https://images.idgesg.net/images/article/2019/03/istock-508154656-100791924-large.jpg
+[2]: https://ycharts.com/indicators/ecommerce_sales_as_percent_retail_sales
+[3]: https://www.soti.net/resources/newsroom/2019/annual-connected-retailer-survey-new-soti-survey-reveals-us-consumers-prefer-speed-and-convenience-when-shopping-with-limited-human-interaction/
+[4]: https://www.hpe.com/us/en/servers/edgeline-iot-systems.html?pp=false&jumpid=ps_83cqske5um_aid-510380402&gclid=CjwKCAjw6djYBRB8EiwAoAF6oWwk-M6LWcfCbbZ331fXhEHShXGbLWoSwTIzue6mxQg4gDvYx59XZxoC_4oQAvD_BwE&gclsrc=aw.ds
+[5]: https://www.apc.com/us/en/solutions/business-solutions/edge-computing.jsp
diff --git a/sources/tech/20190327 Cisco forms VC firm looking to weaponize fledgling technology companies.md b/sources/tech/20190327 Cisco forms VC firm looking to weaponize fledgling technology companies.md
new file mode 100644
index 0000000000..2a0dde5fb3
--- /dev/null
+++ b/sources/tech/20190327 Cisco forms VC firm looking to weaponize fledgling technology companies.md
@@ -0,0 +1,66 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Cisco forms VC firm looking to weaponize fledgling technology companies)
+[#]: via: (https://www.networkworld.com/article/3385039/cisco-forms-vc-firm-looking-to-weaponize-fledgling-technology-companies.html#tk.rss_all)
+[#]: author: (Michael Cooney https://www.networkworld.com/author/Michael-Cooney/)
+
+Cisco forms VC firm looking to weaponize fledgling technology companies
+======
+
+### Decibel, an investment firm focused on early stage funding for enterprise-product startups, will back technologies related to Cisco's core interests.
+
+![BrianaJackson / Getty][1]
+
+Cisco this week stepped deeper into the venture capital world by announcing Decibel, an early-stage investment firm that will focus on bringing enterprise-oriented startups to market.
+
+Veteran VC groundbreaker and former general partner at New Enterprise Associates [Jon Sakoda][2] will lead Decibel. Sakoda had been with NEA since 2006 and focused on startup investments in software and Internet companies.
+
+**[ Now see[7 free network tools you must have][3]. ]**
+
+Of Decibel Sakoda said: “We want to invest in companies that are helping our customers use innovation as a weapon in the game to transform their respective industries.”
+
+“Decibel combines the speed, agility, and independent risk-taking traditionally found in the best VC firms, while offering differentiated access to the scale, entrepreneurial talent, and deep customer relationships found in one of the largest tech companies in the world,” [Sakoda said][4]. “This approach is an industry first and provides a unique way for entrepreneurs to get access to unparalleled resources at a time and stage when they need it most.”
+
+“As one of the most prolific strategic venture capitalists in the world, Cisco already has a view into future technologies shaping our markets through our rich portfolio of companies,” wrote Rob Salvagno, vice president of Corporate Development and Cisco Investments in a [blog about Decibel][5]. “But we realized we could do even more by engaging with the startup community earlier in its lifecycle.”
+
+Indeed Cisco already has an investment arm, Cisco Investments, that focuses on later stage startups, the company says. Cisco said this arm invests $200 to $300 million annually, and it will continue its charter of investing and partnering with best-in-class companies in core and adjacent markets.
+
+Cisco didn’t talk about how much money would be involved in Decibel, but according to a [CNBC report][6], Cisco is setting up Decibel as an independent firm with a separate pool of cash, an unusual model for corporate investors. The fund hasn’t closed yet, but a [Securities and Exchange Commission filing][7] from October indicated that Sakoda was setting out to [raise $500 million][8], CNBC wrote.
+
+**[[Become a Microsoft Office 365 administrator in record time with this quick start course from PluralSight.][9] ]**
+
+Decibel does plan to invest anywhere from $5M – 15M in each start up in their portfolio, Cisco says.
+
+“Cisco has a culture of leveraging both internal and external innovation – accelerating our rich internal development capabilities by our ability to also partner, invest and acquire, Salvagno said.
+
+He said the company recognizes that significant innovation happens outside of the walls of Cisco. Cisco has acquired more than 200 companies, accounting for more than one in eight Cisco employees have joined as a result. "We have a deep bench of acquired founders, many of which play leadership roles within the company today, which continues to reinforce this entrepreneurial spirit," Salvagno said.
+
+Join the Network World communities on [Facebook][10] and [LinkedIn][11] to comment on topics that are top of mind.
+
+--------------------------------------------------------------------------------
+
+via: https://www.networkworld.com/article/3385039/cisco-forms-vc-firm-looking-to-weaponize-fledgling-technology-companies.html#tk.rss_all
+
+作者:[Michael Cooney][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.networkworld.com/author/Michael-Cooney/
+[b]: https://github.com/lujun9972
+[1]: https://images.idgesg.net/images/article/2019/02/money_salary_magnet_flying-money_money-magnet-by-brianajackson-getty-100787974-large.jpg
+[2]: https://twitter.com/jonsakoda
+[3]: https://www.networkworld.com/article/2825879/7-free-open-source-network-monitoring-tools.html
+[4]: https://www.decibel.vc/the-blast/announcingdecibel
+[5]: https://blogs.cisco.com/news/cisco-fuels-innovation-engine-with-investment-in-new-early-stage-vc-fund
+[6]: https://www.cnbc.com/2019/03/26/cisco-introduces-decibel-an-early-stage-venture-firm-with-jon-sakoda.html
+[7]: https://www.sec.gov/Archives/edgar/data/1754260/000175426018000002/xslFormDX01/primary_doc.xml
+[8]: https://www.cnbc.com/2018/10/08/cisco-lead-investor-jon-sakoda-catalyst-labs-500-million.html
+[9]: https://pluralsight.pxf.io/c/321564/424552/7490?u=https%3A%2F%2Fwww.pluralsight.com%2Fcourses%2Fadministering-office-365-quick-start
+[10]: https://www.facebook.com/NetworkWorld/
+[11]: https://www.linkedin.com/company/network-world
diff --git a/sources/tech/20190327 HPE introduces hybrid cloud consulting business.md b/sources/tech/20190327 HPE introduces hybrid cloud consulting business.md
new file mode 100644
index 0000000000..f1d9d3564f
--- /dev/null
+++ b/sources/tech/20190327 HPE introduces hybrid cloud consulting business.md
@@ -0,0 +1,59 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (HPE introduces hybrid cloud consulting business)
+[#]: via: (https://www.networkworld.com/article/3384919/hpe-introduces-hybrid-cloud-consulting-business.html#tk.rss_all)
+[#]: author: (Andy Patrizio https://www.networkworld.com/author/Andy-Patrizio/)
+
+HPE introduces hybrid cloud consulting business
+======
+
+### HPE's Right Mix Advisor is designed to find a balance between on-premises and cloud systems.
+
+![Hewlett Packard Enterprise][1]
+
+Hybrid cloud is pretty much the de facto way to go, with only a few firms adopting a pure cloud play to replace their data center and only suicidal firms refusing to go to the cloud. But picking the right balance between on-premises and the cloud is tricky, and a mistake can be costly.
+
+Enter Right Mix Advisor from Hewlett Packard Enterprise, a combination of consulting from HPE's Pointnext division and software tools. It draws on quite a bit of recent acquisitions. Another part of Right Mix Advisor is a British cloud consultancy RedPixie, Amazon Web Services (AWS) specialists Cloud Technology Partners, and automated discovery capabilities from an Irish startup iQuate.
+
+Right Mix Advisor gathers data points from the company’s entire enterprise, ranging from configuration management database systems (CMDBs), such as ServiceNow, to external sources, such as cloud providers. HPE says that in a recent customer engagement it scanned 9 million IP addresses across six data centers.
+
+**[ Read also:[What is hybrid cloud computing][2]. | Learn [what you need to know about multi-cloud][3]. | Get regularly scheduled insights by [signing up for Network World newsletters][4]. ]**
+
+HPE Pointnext consultants then work with the client’s IT teams to analyze the data to determine the optimal configuration for workload placement. Pointnext has become HPE’s main consulting outfit following its divestiture of EDS, which it acquired in 2008 but spun off in a merger with CSC to form DXC Consulting. Pointnext now has 25,000 consultants in 88 countries.
+
+In a typical engagement, HPE claims it can deliver a concrete action plan within weeks, whereas previously businesses may have needed months to come to a conclusion using a manual processes. HPE has found migrating the right workloads to the right mix of hybrid cloud can typically result in 40 percent total cost of ownership savings*. *
+
+Although HPE has thrown its weight behind AWS, that doesn’t mean it doesn’t support competitors. Erik Vogel, vice president of hybrid IT for HPE Pointnext, notes in the blog post announcing Right Mix Advisor that target environments could be Microsoft Azure or Azure Stack, AWS, Google or Ali Cloud.
+
+“New service providers are popping up every day, and we see the big public cloud providers constantly producing new services and pricing models. As a result, the calculus for determining your right mix is constantly changing. If Azure, for example, offers a new service capability or a 10 percent pricing discount and it makes sense to leverage it, you want to be able to move an application seamlessly into that new environment,” he wrote.
+
+Key to Right Mix Advisor is app migration, and Pointnext follows the 50/30/20 rule: About 50 percent of apps are suitable for migration to the cloud, and for about 30 percent, migration is not a good choice for migration to be worth the effort. The remaining 20 percent should be retired.
+
+“With HPE Right Mix Advisor, you can identify that 50 percent,” he wrote. “Rather than hand you a laundry list of 10,000 apps to start migrating, HPE Right Mix Advisor hones in on what’s most impactful right now to meet your business goals – the 10 things you can do on Monday morning that you can be confident will really help your business.”
+
+HPE has already done some pilot projects with the Right Mix service and expects to expand it to include channel partners.
+
+Join the Network World communities on [Facebook][5] and [LinkedIn][6] to comment on topics that are top of mind.
+
+--------------------------------------------------------------------------------
+
+via: https://www.networkworld.com/article/3384919/hpe-introduces-hybrid-cloud-consulting-business.html#tk.rss_all
+
+作者:[Andy Patrizio][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.networkworld.com/author/Andy-Patrizio/
+[b]: https://github.com/lujun9972
+[1]: https://images.techhive.com/images/article/2015/11/hpe_building-100625424-large.jpg
+[2]: https://www.networkworld.com/article/3233132/cloud-computing/what-is-hybrid-cloud-computing.html
+[3]: https://www.networkworld.com/article/3252775/hybrid-cloud/multicloud-mania-what-to-know.html
+[4]: https://www.networkworld.com/newsletters/signup.html
+[5]: https://www.facebook.com/NetworkWorld/
+[6]: https://www.linkedin.com/company/network-world
diff --git a/sources/tech/20190327 How to make a Raspberry Pi gamepad.md b/sources/tech/20190327 How to make a Raspberry Pi gamepad.md
new file mode 100644
index 0000000000..694c09d4c9
--- /dev/null
+++ b/sources/tech/20190327 How to make a Raspberry Pi gamepad.md
@@ -0,0 +1,235 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (How to make a Raspberry Pi gamepad)
+[#]: via: (https://opensource.com/article/19/3/gamepad-raspberry-pi)
+[#]: author: (Leon Anavi https://opensource.com/users/leon-anavi)
+
+How to make a Raspberry Pi gamepad
+======
+
+This DIY retro video game controller for the Raspberry Pi is fun and not difficult to build but requires some time.
+
+![Raspberry Pi Gamepad device][1]
+
+From time to time, I get nostalgic about the video games I played during my childhood in the late '80s and the '90s. Although most of my old computers and game consoles are long gone, my Raspberry Pi can fulfill my retro-gaming fix. I enjoy the simple games included in Raspbian, and the open source RetroPie project helped me turn my Raspberry Pi into an advanced retro-gaming machine.
+
+But, for a more authentic experience, like back in the "old days," I needed a gamepad. There are a lot of options on the market for USB gamepads and joysticks, but as an open source enthusiast, maker, and engineer, I prefer doing it the hard way. So, I made my own simple open source hardware gamepad, which I named the [ANAVI Play pHAT][2]. I designed it as an add-on board for Raspberry Pi using an [EEPROM][3] and a devicetree binary overlay I created for mapping the keys.
+
+### Get the gamepad buttons and EEPROM
+
+There are a huge variety of gamepads available for purchase, and some of them are really complex. However, it's not hard to make a gamepad similar to the iconic NES controller using the design I created.
+
+The gamepad uses eight "momentary" buttons (i.e., switches that are active only while they're pushed): four tactile (tact) switches for movement (Up, Down, Left, Right), two tact buttons for A and B, and two smaller tact buttons for Select and Start. I used [through-hole][4] tact switches: six 6x6x4.3mm switches for movement and the A and B buttons, and two 3x6x4.3mm switches for the Start and Select buttons.
+
+While the gamepad's primary purpose is to play retro games, the add-on board is large enough to include home-automation features, such as monitoring temperature, humidity, light, or barometric pressure, that you can use when you're not playing games. I added three slots for attaching [I2C][5] sensors to the primary I2C bus on physical pins 3 and 5.
+
+The most interesting and important part of the hardware design is the EEPROM (electrically erasable programmable read-only memory). A through-hole mounted EEPROM is easier to flash on a breadboard and solder to the gamepad. An article in the [MagPi magazine][6] recommends CAT24C32 EEPROM; if that model isn't available, try to find a model with similar technical specifications. All Raspberry Pi models and versions released after 2014 (Raspberry Pi B+ and newer) have a secondary I2C bus on physical pins 27 and 28.
+
+Once you have this hardware, use a breadboard to check that it works.
+
+### Create the printed circuit board
+
+The next step is to create a printed circuit board (PCB) design and have it manufactured. As an open source enthusiast, I believe that free and open source software should be used for creating open source hardware. I rely on [KiCad][7], electronic design automation (EDA) software available under the GPLv3+ license. KiCad works on Windows, MacOS, and GNU/Linux. (I use KiCad version 5 on Ubuntu 18.04.)
+
+KiCad allows you to create PCBs with up to 32 copper layers plus 14 fixed-purpose technical layers. It also has an integrated 3D viewer. It's actively developed, including many contributions by CERN developers, and used for industrial applications; for example, Olimex uses KiCad to design complex PCBs with multiple layers, like the one in its [TERES-I][8] DIY open source hardware laptop.
+
+The KiCad workflow includes three major steps:
+
+ * Designing the schematics in the schematic layout editor
+ * Drawing the edge cuts, placing the components, and routing the tracks in the PCB layout editor
+ * Exporting Gerber and drill files for manufacture
+
+
+
+If you haven't designed PCBs before, keep in mind there is a steep learning curve. Go through the [examples and user's guides][9] provided by KiCad to learn how to work with the schematic and the PCB layout editor. (If you are not in the mood to do everything from scratch, you can just clone the ANAVI Play pHAT project in my [GitHub repository][10].)
+
+![KiCad schematic][11]
+
+In KiCad's schematic layout editor, connect the Raspberry Pi's GPIOs to the buttons, the slots for sensors to the primary I2C, and the EEPROM to the secondary I2C. Assign an appropriate footprint to each component. Perform an electrical rule check and, if there are no errors, generate the [netlist][12], which describes an electronic circuit's connectivity.
+
+Open the PCB layout editor. It contains several layers. Read the netlist. All components and tracks must be on the front and bottom copper layers (F.Cu and B.Cu), and the board's form must be created in the Edge.Cuts layer. Any text, including button labels, must be on the silkscreen layers.
+
+![Printable circuit board design][13]
+
+Finally, export the Gerber and drill files that you'll send to the company that will produce your PCB. The Gerber format is the de facto industry standard for PCBs. It is an open ASCII vector format for 2D binary images; simply explained, it is like a PDF for PCB manufacturing.
+
+There are numerous companies that can make a simple two-layer board like the gamepad's. For a few prototypes, you can count on [OSHPark in the US][14] or [Aisler in Europe][15]. There are also a lot of Chinese manufacturers, such as JLCPCB, PCBWay, ALLPCB, Seeed Studio, and many more. Alternatively, if you prefer to skip the hassle of PCB manufacturing and sourcing components, you can order the [ANAVI Play pHAT maker kit from Crowd Supply][2] and solder all the through-hole components on your own.
+
+### Understanding devicetree
+
+[Devicetree][16] is a specification for a software data structure that describes the hardware components. Its purpose is to allow the compiled Linux kernel to handle a variety of different hardware configurations within a wider architecture family. The bootloader loads the devicetree into memory and passes it to the Linux kernel.
+
+The devicetree includes three components:
+
+ * Devicetree source (DTS)
+ * Devicetree blob (DTB) and overlay (DTBO)
+ * Devicetree compiler (DTC)
+
+
+
+The DTC creates binaries from a textual source. Devicetree overlays allow a central DTB to be overlaid on the devicetree. Overlays include a number of fragments.
+
+For several years, a devicetree has been required for all new ARM systems on a chip (SoCs), including Broadcom SoCs in all Raspberry Pi models and versions. With the default bootloader in Raspberry Pi's popular Raspbian distribution, DTO can be set in the configuration file ( **config.txt** ) on the FAT partition of a bootable microSD card using the keyword **device_tree=**.
+
+Since 2014, the Raspberry Pi's pin header has been extended to 40 pins. Pins 27 and 28 are dedicated for a secondary I2C bus. This way, the DTBO can be automatically loaded from an EEPROM attached to these pins. Furthermore, additional system information can be saved in the EEPROM. This feature is among the Raspberry Pi Foundation's requirements for any Raspberry Pi HAT (hardware attached on top) add-on board. On Raspbian and other GNU/Linux distributions for Raspberry Pi, the information from the EEPROM can be seen from userspace at **/proc/device-tree/hat/** after booting.
+
+In my opinion, the devicetree is one of the most fascinating features added in the Linux ecosystem over the past decade. Creating devicetree blobs and overlays is an advanced task and requires some background knowledge. However, it's possible to create a devicetree binary overlay for the Raspberry Pi add-on board and flash it on an appropriate EEPROM. The device binary overlay defines the Linux key codes for each key of the gamepad. The result is a gamepad for Raspberry Pi with keys that work as soon as you boot Raspbian.
+
+#### Creating the DTBO
+
+There are three major steps to create a devicetree binary overlay for the gamepad:
+
+ * Creating the devicetree source with mapping for the keys based on the Linux key codes
+ * Compiling the devicetree binary overlay using the devicetree compiles
+ * Creating an **.eep** file and flashing it on an EEPROM using the open source tools provided by the Raspberry Pi Foundation
+
+
+
+Linux key codes are defined in the file **/usr/include/linux/input-event-codes.h**. The device source file should describe which Raspberry Pi GPIO pin is connected to which hardware button and which Linux key code should be triggered when the button is pressed. In this gamepad, GPIO17 (pin 11) is connected to the tactile button for Right, GPIO4 (pin 7) to Left, GPIO22 (pin 15) to Up, GPIO27 (pin 13) to Down, GPIO5 (pin 29) to Start, GPIO6 (pin 31) to Select, GPIO19 (pin 35) to A, and GPIO26 (pin 37) to B.
+
+Please note there is a difference between the GPIO numbers and the physical position of the pin on the header. For convenience, all pins are located on the second row of the Raspberry Pi's 40-pin header. This approach makes it easier to route the printed circuit board in KiCad.
+
+The entire devicetree source for the gamepad is [available on GitHub][17]. As an example, the following is a short code snippet that demonstrates how GPIO17, corresponding to physical pin 11 on the Raspberry Pi, is mapped to the tact button for Right:
+
+```
+button@17 {
+label = "right";
+linux,code = <106>;
+gpios = <&gpio 17 1>;
+};
+```
+
+To compile the DTS directly on the Raspberry Pi, install the devicetree compiler on Raspbian by executing the following command in the terminal:
+```
+sudo apt-get update
+sudo apt-get install device-tree-compiler
+```
+Run DTC and provide as arguments the name of the output DTBO and the path to the source file. For example:
+
+```
+dtc -I dts -O dtb -o anavi-play-phat.dtbo anavi-play-phat.dts
+```
+
+The Raspberry Pi Foundation provides a [GitHub repository with the mechanical, hardware, and software specifications for HATs][18]. It also includes three very convenient tools:
+
+ * **eepmake:** Creates an **.eep** file from a text file with settings
+ * **eepdump:** Useful for debugging, as it dumps a binary **.eep** file as human-readable text
+ * **eepflash:** Writes or reads an **.eep** binary image to/from an EEPROM
+
+
+
+The **eeprom_settings.txt** file can be used as a template. [The Raspberry Pi Foundation][19] and [MagPi magazine][6] have helpful articles and tutorials, so I won't go into too many details. As I wrote above, the recommended EEPROM is CAT24C32, but it can be replaced with any other EEPROM with the same technical specifications. Using an EEPROM with an eight-pin, through-hole, dual in-line (DIP) package is easier for hobbyists to flash because it can be done with a breadboard. The following example command creates a file ready to be flashed on the EEPROM using the **eepmake** tool from the Raspberry Pi GitHub repository:
+
+```
+./eepmake settings.txt settings.eep anavi-play-phat.dtbo
+```
+
+Before proceeding with flashing, ensure that the EEPROM is connected properly to the primary I2C bus (pins 3 and 5) on the Raspberry Pi. (You can consult the MagPi magazine article linked above for a discussion on wiring schematics.) Then run the following command and follow the onscreen instructions to flash the **.eep** file on the EEPROM:
+
+```
+sudo ./eepflash.sh -w -f=settings.eep -t=24c32
+```
+
+Before soldering the EEPROM to the printed circuit board, move it to the secondary I2C bus on the breadboard and test it to ensure it works as expected. If you detect any issues while testing the EEPROM on the breadboard, correct the settings files, move it back to the primary I2C bus, and flash it again.
+
+### Testing the gamepad
+
+Now comes the fun part! It is time to test the add-on board using Raspbian, which you can [download][20] from RaspberryPi.org. After booting, open a terminal and enter the following commands:
+
+```
+cat /proc/device-tree/hat/product
+cat /proc/device-tree/hat/vendor
+```
+
+The output should be similar to this:
+
+![Testing output][21]
+
+If it is, congratulations! The data from the EEPROM has been read successfully.
+
+The next step is to verify that the keys on the Play pHAT are set properly and working. In a terminal or a text editor, press each of the eight buttons and verify they are acting as configured.
+
+Finally, it is time to play games! By default, Raspbian's desktop includes [Python Games][22]. Launch them from the application menu. Make an audio output selection and pick a game from the list. My favorite is Wormy, a Snake-like game. As a former Symbian mobile application developer, I find playing Wormy brings back memories of the glorious days of Nokia.
+
+### Retro gaming with RetroPie
+
+![RetroPie with the Play pHAT][23]
+
+Raspbian is amazing, but [RetroPie][24] offers so much more for retro games fans. It is a GNU/Linux distribution optimized for playing retro games and combines the open source projects RetroArch and Emulation Station. It's available for Raspberry Pi, the [Odroid][25] C1/C2, and personal computers running Debian or Ubuntu. It provides emulators for loading ROMs—the digital versions of game cartridges. Keep in mind that no ROMs are included in RetroPie due to copyright issues. You will have to [find appropriate ROMs and copy them][26] to the Raspberry Pi after booting RetroPie.
+
+The open source hardware gamepad works fine in RetroPie's menus, but I discovered that the keys fail after launching some games and emulators. After debugging, I found a solution to ensuring they work in the game emulators: add a Python script for additional software emulation of the keys. [The script is available on GitHub.][27] Here's how to get it and install Python on RetroPie:
+
+```
+
+sudo apt-get update
+sudo apt-get install -y python-pip
+sudo pip install evdev
+cd ~
+git clone
+```
+
+Finally, add the following line to **/etc/rc.local** so it will be executed automatically when RetroPie boots:
+
+```
+sudo python /home/pi/anavi-examples/anavi-play-phat/anavi-play-gamepad.py &
+```
+
+That's it! After following these steps, you can create an entirely open source hardware gamepad as an add-on board for any Raspberry Pi model with a 40-pin header and use it with Raspbian and RetroPie!
+
+### What's next?
+
+Combining free and open source software with open source hardware is fun and not difficult, but it requires a significant amount of time. After creating the open source hardware gamepad in my spare time, I ran a modest crowdfunding campaign at [Crowd Supply][2] for low-volume manufacturing in my hometown in Plovdiv, Bulgaria. [The Open Source Hardware Association][28] certified the ANAVI Play pHAT as an open source hardware project under [BG000007][29]. Even [the acrylic enclosures][30] that protect the board from dust are open source hardware created with the free and open source software OpenSCAD.
+
+![Game pad in acrylic enclosure][31]
+
+If you enjoyed reading this article, I encourage you to try creating your own open source hardware add-on board for Raspberry Pi with KiCad. If you don't have enough spare time, you can order an [ANAVI Play pHAT maker kit][2], grab your soldering iron, and assemble the through-hole components. If you're not comfortable with the soldering iron, you can just order a fully assembled version.
+
+Happy retro gaming everybody! Next time someone irritably asks what you can learn from playing vintage computer games, tell them about Raspberry Pi, open source hardware, Linux, and devicetree.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/3/gamepad-raspberry-pi
+
+作者:[Leon Anavi][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/leon-anavi
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/gamepad_raspberrypi_hardware.jpg?itok=W16gOnay (Raspberry Pi Gamepad device)
+[2]: https://www.crowdsupply.com/anavi-technology/anavi-play-phat
+[3]: https://en.wikipedia.org/wiki/EEPROM
+[4]: https://en.wikipedia.org/wiki/Through-hole_technology
+[5]: https://en.wikipedia.org/wiki/I%C2%B2C
+[6]: https://www.raspberrypi.org/magpi/make-your-own-hat/
+[7]: http://kicad-pcb.org/
+[8]: https://www.olimex.com/Products/DIY-Laptop/
+[9]: http://kicad-pcb.org/help/getting-started/
+[10]: https://github.com/AnaviTechnology/anavi-play-phat
+[11]: https://opensource.com/sites/default/files/uploads/kicad-schematic.png (KiCad schematic)
+[12]: https://en.wikipedia.org/wiki/Netlist
+[13]: https://opensource.com/sites/default/files/uploads/circuitboard.png (Printable circuit board design)
+[14]: https://oshpark.com/
+[15]: https://aisler.net/
+[16]: https://www.devicetree.org/
+[17]: https://github.com/AnaviTechnology/hats/blob/anavi/eepromutils/anavi-play-phat.dts
+[18]: https://github.com/raspberrypi/hats
+[19]: https://www.raspberrypi.org/blog/introducing-raspberry-pi-hats/
+[20]: https://www.raspberrypi.org/downloads/
+[21]: https://opensource.com/sites/default/files/uploads/testing-output.png (Testing output)
+[22]: https://www.raspberrypi.org/documentation/usage/python-games/
+[23]: https://opensource.com/sites/default/files/uploads/retropie.jpg (RetroPie with the Play pHAT)
+[24]: https://retropie.org.uk/
+[25]: https://www.hardkernel.com/product-category/odroid-board/
+[26]: https://opensource.com/article/19/1/retropie
+[27]: https://github.com/AnaviTechnology/anavi-examples/blob/master/anavi-play-phat/anavi-play-gamepad.py
+[28]: https://www.oshwa.org/
+[29]: https://certification.oshwa.org/bg000007.html
+[30]: https://github.com/AnaviTechnology/anavi-cases/tree/master/anavi-play-phat
+[31]: https://opensource.com/sites/default/files/uploads/gamepad-acrylic.jpg (Game pad in acrylic enclosure)
diff --git a/sources/tech/20190327 Identifying exceptional user experience (UX) in IoT platforms.md b/sources/tech/20190327 Identifying exceptional user experience (UX) in IoT platforms.md
new file mode 100644
index 0000000000..f7c49381f4
--- /dev/null
+++ b/sources/tech/20190327 Identifying exceptional user experience (UX) in IoT platforms.md
@@ -0,0 +1,126 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Identifying exceptional user experience (UX) in IoT platforms)
+[#]: via: (https://www.networkworld.com/article/3384738/identifying-exceptional-user-experience-ux-in-iot-platforms.html#tk.rss_all)
+[#]: author: (Steven Hilton https://www.networkworld.com/author/Steven-Hilton/)
+
+Identifying exceptional user experience (UX) in IoT platforms
+======
+
+### Examples of excellent IoT platform UX from the perspectives of 5 typical IoT platform personas.
+
+![Leo Wolfert / Getty Images][1]
+
+Enterprises are inundated with information about IoT platforms’ features and capabilities. But to find a long-lived IoT platform that minimizes ongoing development costs, enterprises must focus on exceptional user experience (UX) for 5 types of IoT platform users.
+
+Marketing and sales literature from IoT platform vendors is filled with information about IoT platform features. And no doubt, enterprises choosing to buy IoT platform services need to understand the actual capabilities of IoT platforms – preferably by [testing a variety of IoT platforms][2] – before making a purchase decision.
+
+However, it is a lot harder to gauge the quality of an IoT platform UX than itemizing an IoT platform’s features. Having excellent UX leads to lower platform deployment and management costs and higher customer satisfaction and retention. So enterprises should make UX one of their top criteria when selecting an IoT platform.
+
+[RELATED: Storage tank operator turns to IoT for energy savings][3]
+
+One of the ways to determine excellent IoT platform UX is to simulate the tasks conducted by typical IoT platform users. By completing these tasks, it becomes readily apparent when an IoT platform is exceptional or annoyingly bad.
+
+In this blog, I describe excellent IoT platform UX from the perspectives of five typical IoT platform users or personas.
+
+## Persona 1: platform administrator
+
+A platform administrator’s primary role is to configure, monitor, and maintain the functionality of an IoT platform. A platform administrator is typically an IT employee responsible for maintaining and configuring the various data management, device management, access control, external integration, and monitoring services that comprise an IoT platform.
+
+Typical platform administrator tasks include
+
+ * configuration of the on-platform data visualization and data aggregation tools
+ * configuration of available device management functionality or execution of in-bulk device management tasks
+ * configuration and creation of on-platform complex event processing (CEP) workflows
+ * management and configuration of platform service orchestration
+
+
+
+Enterprises should pick IoT platforms with superlative access to on-platform configuration functionality with an emphasis on declarative interfaces for configuration management. Although many platform administrators are capable of working with RESTful API endpoints, good UX design should not require that platform administrators use third-party tools to automate basic functionality or execute bulk tasks. Some programmatic interfaces, such as SQL syntax for limiting monitoring views or dashboards for setting event processing trigger criteria, are acceptable and expected, although a fully declarative solution that maintains similar functionality is preferred.
+
+## Persona 2: platform operator
+
+A platform operator’s primary role is to leverage an IoT platform to execute common day-to-day business-centric operations and services. While the responsibilities of a platform operator will vary based on enterprise vertical and use case, all platform operators conduct business rather than IoT domain tasks.
+
+Typical platform operator tasks include
+
+ * visualizing and aggregating on-platform data to view key business KPIs
+ * using device management functionality on a per-device basis
+ * creating, managing, and monitoring per-device and per-location event processing rules
+ * executing self-service administrative tasks, such as enrolling downstream operators
+
+
+
+Enterprises should pick IoT platforms centered on excellent ease-of-use for a business user. In general, the UX should be focused on providing information immediately required for the execution of day-to-day operational tasks while removing more complex functionality. These platforms should have easy access to well-defined and well-constrained operational functions or data visualization. An effective UX should enable easy creation and modification of data views, graphs, dashboards, and other visualizations by allowing operators to select devices using a declarative rather than SQL or other programmatic interfaces.
+
+## Persona 3: hardware and systems developer
+
+A hardware and systems developer’s primary role is the integration and configuration of IoT assets into an IoT platform. The hardware and systems developer possesses very specific, detailed knowledge about IoT hardware (e.g., specific multipoint control units, embedded platforms, or PLC/SCADA control systems), and leverages this knowledge to enable protocol and asset compatibility with northbound platform services.
+
+Typical hardware and systems developer tasks include
+
+ * designing and implementing firmware for IoT assets based on either standardized IoT SDKs or platform-specific SDKs
+ * updating firmware or software packages over deployment lifecycles
+ * integrating manufacturer-specific protocols adapters into either IoT assets or the northbound platform
+
+
+
+Enterprises should pick IoT platforms that allow hardware and systems developers to most efficiently design and implement low-level device and protocol functionality. An effective developer experience provides well-documented and fully-featured SDKs supporting a variety of languages and device architectures to enable integration with various types of IoT hardware.
+
+## Persona 4: platform and backend developer
+
+A platform and backend developer’s primary role is to execute customer-specific application logic and integrations within an IoT deployment. Customer-specific logic may include on-platform or on-edge custom applications, such as those used for analytics, data aggregation and normalization, or any type of event processing workflow. In addition, a platform and backend developer is responsible for integrating the IoT platform with external databases, analytic solutions, or business systems such as MES, ERP, or CRM applications.
+
+Typical platform and backend developer tasks include
+
+ * integrating streaming data from the IoT platform into external systems and applications
+ * configuring inbound and outbound platform actions and interactions with external systems
+ * configuring complex code-based event processing capabilities beyond the scope of a platform administrator’s knowledge or ability
+ * debugging low-level platform functionalities that require coding to detect or resolve
+
+
+
+Enterprises should pick excellent IoT platforms that provide access to well-documented and well-featured platform-level SDKs for application or service development. A best-in-class platform UX should provide real-time logging tools, debugging tools, and indexed and searchable access to all platform logs. Finally, a platform and backend developer is particularly dependent upon high-quality, platform-level documentation, especially for platform APIs.
+
+## Persona 5: user interface and experience (UI/UX) developer
+
+A UI/UX developer’s primary role is to design the various operator interfaces and monitoring views for an IoT platform. In more complex IoT deployments, various operator audiences will need to be addressed, including solution domain experts such as a factory manager; role-specific experts such as an equipment operator or factory technician; and business experts such as a supply-chain analyst or company executive.
+
+Typical UI/UX developer tasks include
+
+ * building and maintaining customer-specific dashboards and monitoring views on either the IoT platform or edge devices
+ * designing, implementing, and maintaining various operator consoles for a variety of operator audiences and customer-specific use cases
+ * ensuring good user experience for customers over the lifetime of an IoT implementation
+
+
+
+Enterprises should pick IoT platforms that provide an exceptional variety and quality of UI/UX tools, such as dashboarding frameworks for on-platform monitoring solutions that are declaratively or programmatically customizable, as well as various widget and display blocks to help the developer rapidly implement customer-specific views. An IoT platform must also provide a UI/UX developer with appropriate debugging and logging tools for monitoring and operator console frameworks and platform APIs. Finally, a best-in-class platform should provide a sample dashboard, operator console, and on-edge monitoring implementation in order to enable the UI/UX developer to quickly become accustomed with platform paradigms and best practices.
+
+Enterprises should make UX one of their top criteria when selecting an IoT platform. Having excellent UX allows enterprises to minimize platform deployment and management costs. At the same time, excellent UX allows enterprises to more readily launch new solutions to the market thereby increasing customer satisfaction and retention.
+
+**This article is published as part of the IDG Contributor Network.[Want to Join?][4]**
+
+Join the Network World communities on [Facebook][5] and [LinkedIn][6] to comment on topics that are top of mind.
+
+--------------------------------------------------------------------------------
+
+via: https://www.networkworld.com/article/3384738/identifying-exceptional-user-experience-ux-in-iot-platforms.html#tk.rss_all
+
+作者:[Steven Hilton][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.networkworld.com/author/Steven-Hilton/
+[b]: https://github.com/lujun9972
+[1]: https://images.idgesg.net/images/article/2019/02/industry_4-0_industrial_iot_smart_factory_by_leowolfert_gettyimages-689799380_2400x1600-100788464-large.jpg
+[2]: https://www.machnation.com/2018/09/25/announcing-mit-e-2-0-hands-on-benchmarking-for-iot-cloud-edge-and-analytics-platforms/
+[3]: https://www.networkworld.com/article/3169384/internet-of-things/storage-tank-operator-turns-to-iot-for-energy-savings.html#tk.nww-fsb
+[4]: /contributor-network/signup.html
+[5]: https://www.facebook.com/NetworkWorld/
+[6]: https://www.linkedin.com/company/network-world
diff --git a/sources/tech/20190327 IoT roundup- Keeping an eye on energy use and Volkswagen teams with AWS.md b/sources/tech/20190327 IoT roundup- Keeping an eye on energy use and Volkswagen teams with AWS.md
new file mode 100644
index 0000000000..016c5151fb
--- /dev/null
+++ b/sources/tech/20190327 IoT roundup- Keeping an eye on energy use and Volkswagen teams with AWS.md
@@ -0,0 +1,71 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (IoT roundup: Keeping an eye on energy use and Volkswagen teams with AWS)
+[#]: via: (https://www.networkworld.com/article/3384697/iot-roundup-keeping-an-eye-on-energy-use-and-volkswagen-teams-with-aws.html#tk.rss_all)
+[#]: author: (Jon Gold https://www.networkworld.com/author/Jon-Gold/)
+
+IoT roundup: Keeping an eye on energy use and Volkswagen teams with AWS
+======
+
+### This week's roundup features new tech from MIT, big news in the automotive sector and a handy new level of centralization from a smaller IoT-focused company.
+
+![Getty Images][1]
+
+Much of what’s exciting about IoT technology has to do with getting data from a huge variety of sources into one place so it can be mined for insight, but sensors used to gather that data are frequently legacy devices from the early days of industrial automation or cheap, lightweight, SoC-based gadgets without a lot of sophistication of their own.
+
+Researchers at MIT have devised a system that can gather a certain slice of data from unsophisticated devices that are grouped on the same electrical circuit without adding sensors to each device.
+
+**[ Check out our[corporate guide to addressing IoT security][2]. ]**
+
+The technology’s called non-intrusive load monitoring, and sits directly on a given building's, vehicle's or other piece of infrastructure’s electrical circuits, identifies devices based on their power usage, and sends alerts when there are irregularities.
+
+It seems likely to make IIoT-related waves once it’s out of testing and onto the market.
+
+NLIM was recently tested, said MIT’s news service, on a U.S. Coast Guard cutter based in Boston, where it was attached to the outside of an electrical wire “at a single point, without requiring any cutting or splicing of wires.”
+
+Two such connections allowed the scientists to monitor roughly 20 separate devices on an electrical circuit, and the system was able to detect an anomalous amount of energy use from a component of the ship’s diesel engines known as a jacket water heater.
+
+“[C]rewmembers were skeptical about the reading but went to check it anyway. The heaters are hidden under protective metal covers, but as soon as the cover was removed from the suspect device, smoke came pouring out, and severe corrosion and broken insulation were clearly revealed,” the MIT report stated. Two other important but slightly less critical faults were also detected by the system.
+
+It’s easy to see why NLIM could easily prove to be an attractive technology for IIoT use in the future. It sounds as though it’s very simple to install, can operate without any kind of Internet connection (though most implementers will probably want to connect it to a wider monitoring setup for a more holistic picture of their systems) and does all of its computational work locally. It can even be used for general energy audits. What, in short, is not to like?
+
+**Volkswagen teams up with Amazon**
+
+AWS has got a new flagship client for its growing IoT services in the form of the Volkswagen Group, which [announced][3] that AWS is going to design and build the Volkswagen Industrial Cloud, a floor-to-ceiling industrial IoT implementation aimed at improving uptime, flexibility, productivity and vehicle quality.
+
+Real-time data from all 122 of VW’s manufacturing plants around the world will be available to the system, everything from part tracking to comparative analysis of efficiency to even deeper forms of analytics will take place in the company’s “data lake,” as the announcement calls it. Oh, and machine learning is part of it, too.
+
+The German carmaker clearly believes that AWS’s technology can provide a lot of help to its operations across the board, [even in the wake of a partnership with Microsoft for Azure-based cloud services announced last year.][4]
+
+**IoT-in-a-box**
+
+IoT can be very complicated. While individual components of any given implementation are often quite simple, each implementation usually contains a host of technologies that have to work in close concert. That means a lot of orchestration work has to go into making this stuff work.
+
+Enter Digi International, which rolled out an IoT-in-a-box package called Digi Foundations earlier this month. The idea is to take a lot of the logistical legwork out of IoT implementations by integrating cloud-connection software and edge-computing capabilities into the company’s core industrial router business. Foundations, which is packaged as a software subscription that adds these capabilities and more to the company’s devices, also includes a built-in management layer, allowing for simplified configuration and monitoring.
+
+OK, so it’s not quite all-in-one, but it’s still an impressive level of integration, particularly from a company that many might not have heard of before. It’s also a potential bellwether for other smaller firms upping their technical sophistication in the IoT sector.
+
+Join the Network World communities on [Facebook][5] and [LinkedIn][6] to comment on topics that are top of mind.
+
+--------------------------------------------------------------------------------
+
+via: https://www.networkworld.com/article/3384697/iot-roundup-keeping-an-eye-on-energy-use-and-volkswagen-teams-with-aws.html#tk.rss_all
+
+作者:[Jon Gold][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.networkworld.com/author/Jon-Gold/
+[b]: https://github.com/lujun9972
+[1]: https://images.idgesg.net/images/article/2018/08/nw_iot-news_internet-of-things_smart-city_smart-home7-100768495-large.jpg
+[2]: https://www.networkworld.com/article/3269165/internet-of-things/a-corporate-guide-to-addressing-iot-security-concerns.html
+[3]: https://www.volkswagen-newsroom.com/en/press-releases/volkswagen-and-amazon-web-services-to-develop-industrial-cloud-4780
+[4]: https://www.volkswagenag.com/en/news/2018/09/volkswagen-and-microsoft-announce-strategic-partnership.html
+[5]: https://www.facebook.com/NetworkWorld/
+[6]: https://www.linkedin.com/company/network-world
diff --git a/sources/tech/20190327 Standardizing WASI- A system interface to run WebAssembly outside the web.md b/sources/tech/20190327 Standardizing WASI- A system interface to run WebAssembly outside the web.md
new file mode 100644
index 0000000000..e473614955
--- /dev/null
+++ b/sources/tech/20190327 Standardizing WASI- A system interface to run WebAssembly outside the web.md
@@ -0,0 +1,347 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Standardizing WASI: A system interface to run WebAssembly outside the web)
+[#]: via: (https://hacks.mozilla.org/2019/03/standardizing-wasi-a-webassembly-system-interface/)
+[#]: author: (Lin Clark https://twitter.com/linclark)
+
+Standardizing WASI: A system interface to run WebAssembly outside the web
+======
+
+Today, we announce the start of a new standardization effort — WASI, the WebAssembly system interface.
+
+**Why:** Developers are starting to push WebAssembly beyond the browser, because it provides a fast, scalable, secure way to run the same code across all machines.
+
+But we don’t yet have a solid foundation to build upon. Code outside of a browser needs a way to talk to the system — a system interface. And the WebAssembly platform doesn’t have that yet.
+
+**What:** WebAssembly is an assembly language for a conceptual machine, not a physical one. This is why it can be run across a variety of different machine architectures.
+
+Just as WebAssembly is an assembly language for a conceptual machine, WebAssembly needs a system interface for a conceptual operating system, not any single operating system. This way, it can be run across all different OSs.
+
+This is what WASI is — a system interface for the WebAssembly platform.
+
+We aim to create a system interface that will be a true companion to WebAssembly and last the test of time. This means upholding the key principles of WebAssembly — portability and security.
+
+**Who:** We are chartering a WebAssembly subgroup to focus on standardizing [WASI][1]. We’ve already gathered interested partners, and are looking for more to join.
+
+Here are some of the reasons that we, our partners, and our supporters think this is important:
+
+### Sean White, Chief R&D Officer of Mozilla
+
+“WebAssembly is already transforming the way the web brings new kinds of compelling content to people and empowers developers and creators to do their best work on the web. Up to now that’s been through browsers, but with WASI we can deliver the benefits of WebAssembly and the web to more users, more places, on more devices, and as part of more experiences.”
+
+### Tyler McMullen, CTO of Fastly
+
+“We are taking WebAssembly beyond the browser, as a platform for fast, safe execution of code in our edge cloud. Despite the differences in environment between our edge and browsers, WASI means WebAssembly developers won’t have to port their code to each different platform.”
+
+### Myles Borins, Node Technical Steering committee director
+
+“WebAssembly could solve one of the biggest problems in Node — how to get close-to-native speeds and reuse code written in other languages like C and C++ like you can with native modules, while still remaining portable and secure. Standardizing this system interface is the first step towards making that happen.”
+
+### Laurie Voss, co-founder of npm
+
+“npm is tremendously excited by the potential WebAssembly holds to expand the capabilities of the npm ecosystem while hugely simplifying the process of getting native code to run in server-side JavaScript applications. We look forward to the results of this process.”
+
+So that’s the big news! 🎉
+
+There are currently 3 implementations of WASI:
+
+
++ [wasmtime](https://github.com/CraneStation/wasmtime), Mozilla’s WebAssembly runtime
++ [Lucet](https://www.fastly.com/blog/announcing-lucet-fastly-native-webassembly-compiler-runtime), Fastly’s WebAssembly runtime
++ [a browser polyfill](https://wasi.dev/polyfill/)
+
+
+You can see WASI in action in this video:
+
+
+
+And if you want to learn more about our proposal for how this system interface should work, keep reading.
+
+### What’s a system interface?
+
+Many people talk about languages like C giving you direct access to system resources. But that’s not quite true.
+
+These languages don’t have direct access to do things like open or create files on most systems. Why not?
+
+Because these system resources — such as files, memory, and network connections— are too important for stability and security.
+
+If one program unintentionally messes up the resources of another, then it could crash the program. Even worse, if a program (or user) intentionally messes with the resources of another, it could steal sensitive data.
+
+[![A frowning terminal window indicating a crash, and a file with a broken lock indicating a data leak][2]][3]
+
+So we need a way to control which programs and users can access which resources. People figured this out pretty early on, and came up with a way to provide this control: protection ring security.
+
+With protection ring security, the operating system basically puts a protective barrier around the system’s resources. This is the kernel. The kernel is the only thing that gets to do operations like creating a new file or opening a file or opening a network connection.
+
+The user’s programs run outside of this kernel in something called user mode. If a program wants to do anything like open a file, it has to ask the kernel to open the file for it.
+
+[![A file directory structure on the left, with a protective barrier in the middle containing the operating system kernel, and an application knocking for access on the right][4]][5]
+
+This is where the concept of the system call comes in. When a program needs to ask the kernel to do one of these things, it asks using a system call. This gives the kernel a chance to figure out which user is asking. Then it can see if that user has access to the file before opening it.
+
+On most devices, this is the only way that your code can access the system’s resources — through system calls.
+
+[![An application asking the operating system to put data into an open file][6]][7]
+
+The operating system makes the system calls available. But if each operating system has its own system calls, wouldn’t you need a different version of the code for each operating system? Fortunately, you don’t.
+
+How is this problem solved? Abstraction.
+
+Most languages provide a standard library. While coding, the programmer doesn’t need to know what system they are targeting. They just use the interface.
+
+Then, when compiling, your toolchain picks which implementation of the interface to use based on what system you’re targeting. This implementation uses functions from the operating system’s API, so it’s specific to the system.
+
+This is where the system interface comes in. For example, `printf` being compiled for a Windows machine could use the Windows API to interact with the machine. If it’s being compiled for Mac or Linux, it will use POSIX instead.
+
+[![The interface for putc being translated into two different implementations, one implemented using POSIX and one implemented using Windows APIs][8]][9]
+
+This poses a problem for WebAssembly, though.
+
+With WebAssembly, you don’t know what kind of operating system you’re targeting even when you’re compiling. So you can’t use any single OS’s system interface inside the WebAssembly implementation of the standard library.
+
+[![an empty implementation of putc][10]][11]
+
+I’ve talked before about how WebAssembly is [an assembly language for a conceptual machine][12], not a real machine. In the same way, WebAssembly needs a system interface for a conceptual operating system, not a real operating system.
+
+But there are already runtimes that can run WebAssembly outside the browser, even without having this system interface in place. How do they do it? Let’s take a look.
+
+### How is WebAssembly running outside the browser today?
+
+The first tool for producing WebAssembly was Emscripten. It emulates a particular OS system interface, POSIX, on the web. This means that the programmer can use functions from the C standard library (libc).
+
+To do this, Emscripten created its own implementation of libc. This implementation was split in two — part was compiled into the WebAssembly module, and the other part was implemented in JS glue code. This JS glue would then call into the browser, which would then talk to the OS.
+
+[![A Rube Goldberg machine showing how a call goes from a WebAssembly module, into Emscripten's JS glue code, into the browser, into the kernel][13]][14]
+
+Most of the early WebAssembly code was compiled with Emscripten. So when people started wanting to run WebAssembly without a browser, they started by making Emscripten-compiled code run.
+
+So these runtimes needed to create their own implementations for all of these functions that were in the JS glue code.
+
+There’s a problem here, though. The interface provided by this JS glue code wasn’t designed to be a standard, or even a public facing interface. That wasn’t the problem it was solving.
+
+For example, for a function that would be called something like `read` in an API that was designed to be a public interface, the JS glue code instead uses `_system3(which, varargs)`.
+
+[![A clean interface for read, vs a confusing one for system3][15]][16]
+
+The first parameter, `which`, is an integer which is always the same as the number in the name (so 3 in this case).
+
+The second parameter, `varargs`, are the arguments to use. It’s called `varargs` because you can have a variable number of them. But WebAssembly doesn’t provide a way to pass in a variable number of arguments to a function. So instead, the arguments are passed in via linear memory. This isn’t type safe, and it’s also slower than it would be if the arguments could be passed in using registers.
+
+That was fine for Emscripten running in the browser. But now runtimes are treating this as a de facto standard, implementing their own versions of the JS glue code. They are emulating an internal detail of an emulation layer of POSIX.
+
+This means they are re-implementing choices (like passing arguments in as heap values) that made sense based on Emscripten’s constraints, even though these constraints don’t apply in their environments.
+
+[![A more convoluted Rube Goldberg machine, with the JS glue and browser being emulated by a WebAssembly runtime][17]][18]
+
+If we’re going to build a WebAssembly ecosystem that lasts for decades, we need solid foundations. This means our de facto standard can’t be an emulation of an emulation.
+
+But what principles should we apply?
+
+### What principles does a WebAssembly system interface need to uphold?
+
+There are two important principles that are baked into WebAssembly :
+
+ * portability
+ * security
+
+
+
+We need to maintain these key principles as we move to outside-the-browser use cases.
+
+As it is, POSIX and Unix’s Access Control approach to security don’t quite get us there. Let’s look at where they fall short.
+
+### Portability
+
+POSIX provides source code portability. You can compile the same source code with different versions of libc to target different machines.
+
+[![One C source file being compiled to multiple binaries][19]][20]
+
+But WebAssembly needs to go one step beyond this. We need to be able to compile once and run across a whole bunch of different machines. We need portable binaries.
+
+[![One C source file being compiled to a single binary][21]][22]
+
+This kind of portability makes it much easier to distribute code to users.
+
+For example, if Node’s native modules were written in WebAssembly, then users wouldn’t need to run node-gyp when they install apps with native modules, and developers wouldn’t need to configure and distribute dozens of binaries.
+
+### Security
+
+When a line of code asks the operating system to do some input or output, the OS needs to determine if it is safe to do what the code asks.
+
+Operating systems typically handle this with access control that is based on ownership and groups.
+
+For example, the program might ask the OS to open a file. A user has a certain set of files that they have access to.
+
+When the user starts the program, the program runs on behalf of that user. If the user has access to the file — either because they are the owner or because they are in a group with access — then the program has that same access, too.
+
+[![An application asking to open a file that is relevant to what it's doing][23]][24]
+
+This protects users from each other. That made a lot of sense when early operating systems were developed. Systems were often multi-user, and administrators controlled what software was installed. So the most prominent threat was other users taking a peek at your files.
+
+That has changed. Systems now are usually single user, but they are running code that pulls in lots of other, third party code of unknown trustworthiness. Now the biggest threat is that the code that you yourself are running will turn against you.
+
+For example, let’s say that the library you’re using in an application gets a new maintainer (as often happens in open source). That maintainer might have your interest at heart… or they might be one of the bad guys. And if they have access to do anything on your system — for example, open any of your files and send them over the network — then their code can do a lot of damage.
+
+[![An evil application asking for access to the users bitcoin wallet and opening up a network connection][25]][26]
+
+This is why using third-party libraries that can talk directly to the system can be dangerous.
+
+WebAssembly’s way of doing security is different. WebAssembly is sandboxed.
+
+This means that code can’t talk directly to the OS. But then how does it do anything with system resources? The host (which might be a browser, or might be a wasm runtime) puts functions in the sandbox that the code can use.
+
+This means that the host can limit what a program can do on a program-by-program basis. It doesn’t just let the program act on behalf of the user, calling any system call with the user’s full permissions.
+
+Just having a mechanism for sandboxing doesn’t make a system secure in and of itself — the host can still put all of the capabilities into the sandbox, in which case we’re no better off — but it at least gives hosts the option of creating a more secure system.
+
+[![A runtime placing safe functions into the sandbox with an application][27]][28]
+
+In any system interface we design, we need to uphold these two principles. Portability makes it easier to develop and distribute software, and providing the tools for hosts to secure themselves or their users is an absolute must.,
+
+### What should this system interface look like?
+
+Given those two key principles, what should the design of the WebAssembly system interface be?
+
+That’s what we’ll figure out through the standardization process. We do have a proposal to start with, though:
+
+ * Create a modular set of standard interfaces
+ * Start with standardizing the most fundamental module, wasi-core
+
+
+
+[![Multiple modules encased in the WASI standards effort][29]][30]
+
+What will be in wasi-core?
+
+wasi-core will contain the basics that all programs need. It will cover much of the same ground as POSIX, including things such as files, network connections, clocks, and random numbers.
+
+And it will take a very similar approach to POSIX for many of these things. For example, it will use POSIX’s file-oriented approach, where you have system calls such as open, close, read, and write and everything else basically provides augmentations on top.
+
+But wasi-core won’t cover everything that POSIX does. For example, the process concept does not map clearly onto WebAssembly. And beyond that, it doesn’t make sense to say that every WebAssembly engine needs to support process operations like `fork`. But we also want to make it possible to standardize `fork`.
+
+This is where the modular approach comes in. This way, we can get good standardization coverage while still allowing niche platforms to use only the parts of WASI that make sense for them.
+
+[![Modules filled in with possible areas for standardization, such as processes, sensors, 3D graphics, etc][31]][32]
+
+Languages like Rust will use wasi-core directly in their standard libraries. For example, Rust’s `open` is implemented by calling `__wasi_path_open` when it’s compiled to WebAssembly.
+
+For C and C++, we’ve created a [wasi-sysroot][33] that implements libc in terms of wasi-core functions.
+
+[![The Rust and C implementations of openat with WASI][34]][35]
+
+We expect compilers like Clang to be ready to interface with the WASI API, and complete toolchains like the Rust compiler and Emscripten to use WASI as part of their system implementations
+
+How does the user’s code call these WASI functions?
+
+The runtime that is running the code passes the wasi-core functions in as imports.
+
+[![A runtime placing an imports object into the sandbox][36]][37]
+
+This gives us portability, because each host can have their own implementation of wasi-core that is specifically written for their platform — from WebAssembly runtimes like Mozilla’s wasmtime and Fastly’s Lucet, to Node, or even the browser.
+
+It also gives us sandboxing because the host can choose which wasi-core functions to pass in — so, which system calls to allow — on a program-by-program basis. This preserves security.
+
+[
+][38][![Three runtimes—wastime, Node, and the browser—passing their own implementations of wasi_fd_open into the sandbox][39]][40]
+
+WASI gives us a way to extend this security even further. It brings in more concepts from capability-based security.
+
+Traditionally, if code needs to open a file, it calls `open` with a string, which is the path name. Then the OS does a check to see if the code has permission (based on the user who started the program).
+
+With WASI, if you’re calling a function that needs to access a file, you have to pass in a file descriptor, which has permissions attached to it. This could be for the file itself, or for a directory that contains the file.
+
+This way, you can’t have code that randomly asks to open `/etc/passwd`. Instead, the code can only operate on the directories that are passed in to it.
+
+[![Two evil apps in sandboxes. The one on the left is using POSIX and succeeds at opening a file it shouldn't have access to. The other is using WASI and can't open the file.][41]][42]
+
+This makes it possible to safely give sandboxed code more access to different system calls — because the capabilities of these system calls can be limited.
+
+And this happens on a module-by-module basis. By default, a module doesn’t have any access to file descriptors. But if code in one module has a file descriptor, it can choose to pass that file descriptor to functions it calls in other modules. Or it can create more limited versions of the file descriptor to pass to the other functions.
+
+So the runtime passes in the file descriptors that an app can use to the top level code, and then file descriptors get propagated through the rest of the system on an as-needed basis.
+
+[![The runtime passing a directory to the app, and then then app passing a file to a function][43]][44]
+
+This gets WebAssembly closer to the principle of least privilege, where a module can only access the exact resources it needs to do its job.
+
+These concepts come from capability-oriented systems, like CloudABI and Capsicum. One problem with capability-oriented systems is that it is often hard to port code to them. But we think this problem can be solved.
+
+If code already uses `openat` with relative file paths, compiling the code will just work.
+
+If code uses `open` and migrating to the `openat` style is too much up-front investment, WASI can provide an incremental solution. With [libpreopen][45], you can create a list of file paths that the application legitimately needs access to. Then you can use `open`, but only with those paths.
+
+### What’s next?
+
+We think wasi-core is a good start. It preserves WebAssembly’s portability and security, providing a solid foundation for an ecosystem.
+
+But there are still questions we’ll need to address after wasi-core is fully standardized. Those questions include:
+
+ * asynchronous I/O
+ * file watching
+ * file locking
+
+
+
+This is just the beginning, so if you have ideas for how to solve these problems, [join us][1]!
+
+--------------------------------------------------------------------------------
+
+via: https://hacks.mozilla.org/2019/03/standardizing-wasi-a-webassembly-system-interface/
+
+作者:[Lin Clark][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://twitter.com/linclark
+[b]: https://github.com/lujun9972
+[1]: https://wasi.dev/
+[2]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/01-01_crash-data-leak-1-500x220.png
+[3]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/01-01_crash-data-leak-1.png
+[4]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/01-02-protection-ring-sec-1-500x298.png
+[5]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/01-02-protection-ring-sec-1.png
+[6]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/01-03-syscall-1-500x227.png
+[7]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/01-03-syscall-1.png
+[8]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/02-01-implementations-1-500x267.png
+[9]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/02-01-implementations-1.png
+[10]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/02-02-implementations-1-500x260.png
+[11]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/02-02-implementations-1.png
+[12]: https://hacks.mozilla.org/2017/02/creating-and-working-with-webassembly-modules/
+[13]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/03-01-emscripten-1-500x329.png
+[14]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/03-01-emscripten-1.png
+[15]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/03-02-system3-1-500x179.png
+[16]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/03-02-system3-1.png
+[17]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/03-03-emulation-1-500x341.png
+[18]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/03-03-emulation-1.png
+[19]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/04-01-portability-1-500x375.png
+[20]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/04-01-portability-1.png
+[21]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/04-02-portability-1-500x484.png
+[22]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/04-02-portability-1.png
+[23]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/04-03-access-control-1-500x224.png
+[24]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/04-03-access-control-1.png
+[25]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/04-04-bitcoin-1-500x258.png
+[26]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/04-04-bitcoin-1.png
+[27]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/04-05-sandbox-1-500x278.png
+[28]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/04-05-sandbox-1.png
+[29]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/05-01-wasi-1-500x419.png
+[30]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/05-01-wasi-1.png
+[31]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/05-02-wasi-1-500x251.png
+[32]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/05-02-wasi-1.png
+[33]: https://github.com/CraneStation/wasi-sysroot
+[34]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/05-03-open-imps-1-500x229.png
+[35]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/05-03-open-imps-1.png
+[36]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/05-04-imports-1-500x285.png
+[37]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/05-04-imports-1.png
+[38]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/05-05-sec-port-1.png
+[39]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/05-05-sec-port-2-500x705.png
+[40]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/05-05-sec-port-2.png
+[41]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/05-06-openat-path-1-500x192.png
+[42]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/05-06-openat-path-1.png
+[43]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/05-07-file-perms-1-500x423.png
+[44]: https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/03/05-07-file-perms-1.png
+[45]: https://github.com/musec/libpreopen
diff --git a/sources/tech/20190328 As memory prices plummet, PCIe is poised to overtake SATA for SSDs.md b/sources/tech/20190328 As memory prices plummet, PCIe is poised to overtake SATA for SSDs.md
new file mode 100644
index 0000000000..3dfb93eec7
--- /dev/null
+++ b/sources/tech/20190328 As memory prices plummet, PCIe is poised to overtake SATA for SSDs.md
@@ -0,0 +1,85 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (As memory prices plummet, PCIe is poised to overtake SATA for SSDs)
+[#]: via: (https://www.networkworld.com/article/3384700/as-memory-prices-plummet-pcie-is-poised-to-overtake-sata-for-ssds.html#tk.rss_all)
+[#]: author: (Andy Patrizio https://www.networkworld.com/author/Andy-Patrizio/)
+
+As memory prices plummet, PCIe is poised to overtake SATA for SSDs
+======
+
+### Taiwan vendors believe PCIe and SATA will achieve price and market share parity by years' end.
+
+![Intel SSD DC P6400 Series][1]
+
+A collapse in price for NAND flash memory and a shrinking gap between the prices of PCI Express-based and SATA-based [solid-state drives][2] (SSDs) means the shift to PCI Express SSDs will accelerate in 2019, with the newer, faster format replacing the old by years' end.
+
+According to the Taiwanese tech publication DigiTimes (the stories are now archived and unavailable without a subscription), falling NAND flash prices continue to drag down SSD prices, which will drive the adoption of SSDs in enterprise and data-center applications. This, in turn, will further drive the adoption of PCIe drives, which are a superior format to SATA.
+
+**[ Read also:[Backup vs. archive: Why it’s important to know the difference][3] ]**
+
+## SATA vs. PCI Express
+
+SATA was introduced in 2001 as a replacement for the IDE interface, which had a much larger cable and slower interface. But SATA is a legacy HDD connection and not fast enough for NAND flash memory.
+
+I used to review SSDs, and it was always the same when it came to benchmarking, with the drives scoring within a few milliseconds of each other despite the memory used. The SATA interface was the bottleneck. A SATA SSD is like a one-lane highway with no speed limit.
+
+PCIe is several times faster and has much more parallelism, so throughput is more suited to the NAND format. It comes in two physical formats: an [add-in card][4] that plugs into a PCIe slot and M.2, which is about the size of a [stick of gum][5] and sits on the motherboard. PCIe is most widely used in servers, while M.2 is in consumer devices.
+
+There used to be a significant price difference between PCIe and SATA drives with the same capacity, but they have come into parity thanks to Moore’s Law, said Jim Handy, principal analyst with Objective Analysis, who follows the memory market.
+
+“The controller used to be a big part of the price of an SSD. But complexity has not grown with transistor count. It can have a lot of transistors, and it doesn’t cost more. SATA got more complicated, but PCIe has not. PCIe is very close to the same price as SATA, and [the controller] was the only thing that justified the price diff between the two,” he said.
+
+**[[Get certified as an Apple Technical Coordinator with this seven-part online course from PluralSight.][6] ]**
+
+DigiTimes estimates that the price drop for NAND flash chips will cause global shipments of SSDs to surge 20 to 25 percent in 2019, and PCIe SSDs are expected to emerge as a new mainstream offering by the end of 2019 with a market share of 50 percent, matching SATA SSDs.
+
+## SSD and NAND memory prices already falling
+
+Market sources to DigiTimes said that unit price for 512GB PCIe SSD has fallen by 11 percent sequentially in the first quarter of 2019, while SATA SSDs have dropped 9 percent. They added that the current average unit price for 512GB SSDs is now equal to that of 256GB SSDs from one year ago, with prices continuing to drop.
+
+According to DRAMeXchange, NAND flash contract prices will continue falling but at a slower rate in the second quarter of 2019. Memory makers are cutting production to avoid losing any more profits.
+
+“We’re in a price collapse. For over a year I’ve been saying the destination for NAND is 8 cents per gigabyte, and some spot markets are 6 cents. It was 30 cents a year ago. Contract pricing is around 15 cents now, it had been 25 to 27 cents last year,” said Handy.
+
+A contract price is what it sounds like. A memory maker like Samsung or Micron signs a contract with a SSD maker like Toshiba or Kingston for X amount for Y cents per gigabyte. Spot prices are prices that take place at the end of a quarter (like now) where a vendor anxious to unload excessive inventory has a fire sale to a drive maker that needs it on short supply.
+
+DigiTimes’s contacts aren’t the only ones who foresee this. Handy was at an analyst event by Samsung a few months back where they presented their projection that PCIe SSD would outsell SATA by the end of this year, and not just in the enterprise but everywhere.
+
+**More about backup and recovery:**
+
+ * [Backup vs. archive: Why it’s important to know the difference][3]
+ * [How to pick an off-site data-backup method][7]
+ * [Tape vs. disk storage: Why isn’t tape dead yet?][8]
+ * [The correct levels of backup save time, bandwidth, space][9]
+
+
+
+Join the Network World communities on [Facebook][10] and [LinkedIn][11] to comment on topics that are top of mind.
+
+--------------------------------------------------------------------------------
+
+via: https://www.networkworld.com/article/3384700/as-memory-prices-plummet-pcie-is-poised-to-overtake-sata-for-ssds.html#tk.rss_all
+
+作者:[Andy Patrizio][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.networkworld.com/author/Andy-Patrizio/
+[b]: https://github.com/lujun9972
+[1]: https://images.idgesg.net/images/article/2018/12/intel-ssd-p4600-series1-100782098-large.jpg
+[2]: https://www.networkworld.com/article/3326058/what-is-an-ssd.html
+[3]: https://www.networkworld.com/article/3285652/storage/backup-vs-archive-why-its-important-to-know-the-difference.html
+[4]: https://www.newegg.com/Product/Product.aspx?Item=N82E16820249107
+[5]: https://www.newegg.com/Product/Product.aspx?Item=20-156-199&cm_sp=SearchSuccess-_-INFOCARD-_-m.2+-_-20-156-199-_-2&Description=m.2+
+[6]: https://pluralsight.pxf.io/c/321564/424552/7490?u=https%3A%2F%2Fwww.pluralsight.com%2Fpaths%2Fapple-certified-technical-trainer-10-11
+[7]: https://www.networkworld.com/article/3328488/backup-systems-and-services/how-to-pick-an-off-site-data-backup-method.html
+[8]: https://www.networkworld.com/article/3315156/storage/tape-vs-disk-storage-why-isnt-tape-dead-yet.html
+[9]: https://www.networkworld.com/article/3302804/storage/the-correct-levels-of-backup-save-time-bandwidth-space.html
+[10]: https://www.facebook.com/NetworkWorld/
+[11]: https://www.linkedin.com/company/network-world
diff --git a/sources/tech/20190328 Can Better Task Stealing Make Linux Faster.md b/sources/tech/20190328 Can Better Task Stealing Make Linux Faster.md
new file mode 100644
index 0000000000..bae14a2f5c
--- /dev/null
+++ b/sources/tech/20190328 Can Better Task Stealing Make Linux Faster.md
@@ -0,0 +1,133 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Can Better Task Stealing Make Linux Faster?)
+[#]: via: (https://www.linux.com/blog/can-better-task-stealing-make-linux-faster)
+[#]: author: (Oracle )
+
+Can Better Task Stealing Make Linux Faster?
+======
+
+_Oracle Linux kernel developer Steve Sistare contributes this discussion on kernel scheduler improvements._
+
+### Load balancing via scalable task stealing
+
+The Linux task scheduler balances load across a system by pushing waking tasks to idle CPUs, and by pulling tasks from busy CPUs when a CPU becomes idle. Efficient scaling is a challenge on both the push and pull sides on large systems. For pulls, the scheduler searches all CPUs in successively larger domains until an overloaded CPU is found, and pulls a task from the busiest group. This is very expensive, costing 10's to 100's of microseconds on large systems, so search time is limited by the average idle time, and some domains are not searched. Balance is not always achieved, and idle CPUs go unused.
+
+I have implemented an alternate mechanism that is invoked after the existing search in idle_balance() limits itself and finds nothing. I maintain a bitmap of overloaded CPUs, where a CPU sets its bit when its runnable CFS task count exceeds 1. The bitmap is sparse, with a limited number of significant bits per cacheline. This reduces cache contention when many threads concurrently set, clear, and visit elements. There is a bitmap per last-level cache. When a CPU becomes idle, it searches the bitmap to find the first overloaded CPU with a migratable task, and steals it. This simple stealing yields a higher CPU utilization than idle_balance() alone, because the search is cheap, costing 1 to 2 microseconds, so it may be called every time the CPU is about to go idle. Stealing does not offload the globally busiest queue, but it is much better than running nothing at all.
+
+### Results
+
+Stealing improves utilization with only a modest CPU overhead in scheduler code. In the following experiment, hackbench is run with varying numbers of groups (40 tasks per group), and the delta in /proc/schedstat is shown for each run, averaged per CPU, augmented with these non-standard stats:
+
+ * %find - percent of time spent in old and new functions that search for idle CPUs and tasks to steal and set the overloaded CPUs bitmap.
+ * steal - number of times a task is stolen from another CPU. Elapsed time improves by 8 to 36%, costing at most 0.4% more find time.
+
+
+
+![load balancing][1]
+
+[Used with permission][2]
+
+CPU busy utilization is close to 100% for the new kernel, as shown by the green curve in the following graph, versus the orange curve for the baseline kernel:
+
+![][3]
+
+Stealing improves Oracle database OLTP performance by up to 9% depending on load, and we have seen some nice improvements for mysql, pgsql, gcc, java, and networking. In general, stealing is most helpful for workloads with a high context switch rate.
+
+### The code
+
+As of this writing, this work is not yet upstream, but the latest patch series is at [https://lkml.org/lkml/2018/12/6/1253. ][4]If your kernel is built with CONFIG_SCHED_DEBUG=y, you can verify that it contains the stealing optimization using
+
+```
+# grep -q STEAL /sys/kernel/debug/sched_features && echo Yes
+Yes
+```
+
+If you try it, note that stealing is disabled for systems with more than 2 NUMA nodes, because hackbench regresses on such systems, as I explain in [https://lkml.org/lkml/2018/12/6/1250 .][5]However, I suspect this effect is specific to hackbench and that stealing will help other workloads on many-node systems. To try it, reboot with kernel parameter sched_steal_node_limit = 8 (or larger).
+
+### Future work
+
+After the basic stealing algorithm is pushed upstream, I am considering the following enhancements:
+
+ * If stealing within the last-level cache does not find a candidate, steal across LLC's and NUMA nodes.
+ * Maintain a sparse bitmap to identify stealing candidates in the RT scheduling class. Currently pull_rt_task() searches all run queues.
+ * Remove the core and socket levels from idle_balance(), as stealing handles those levels. Remove idle_balance() entirely when stealing across LLC is supported.
+ * Maintain a bitmap to identify idle cores and idle CPUs, for push balancing.
+
+
+
+_This article originally appeared at[Oracle Developers Blog][6]._
+
+_Oracle Linux kernel developer Steve Sistare contributes this discussion on kernel scheduler improvements._
+
+### Load balancing via scalable task stealing
+
+The Linux task scheduler balances load across a system by pushing waking tasks to idle CPUs, and by pulling tasks from busy CPUs when a CPU becomes idle. Efficient scaling is a challenge on both the push and pull sides on large systems. For pulls, the scheduler searches all CPUs in successively larger domains until an overloaded CPU is found, and pulls a task from the busiest group. This is very expensive, costing 10's to 100's of microseconds on large systems, so search time is limited by the average idle time, and some domains are not searched. Balance is not always achieved, and idle CPUs go unused.
+
+I have implemented an alternate mechanism that is invoked after the existing search in idle_balance() limits itself and finds nothing. I maintain a bitmap of overloaded CPUs, where a CPU sets its bit when its runnable CFS task count exceeds 1. The bitmap is sparse, with a limited number of significant bits per cacheline. This reduces cache contention when many threads concurrently set, clear, and visit elements. There is a bitmap per last-level cache. When a CPU becomes idle, it searches the bitmap to find the first overloaded CPU with a migratable task, and steals it. This simple stealing yields a higher CPU utilization than idle_balance() alone, because the search is cheap, costing 1 to 2 microseconds, so it may be called every time the CPU is about to go idle. Stealing does not offload the globally busiest queue, but it is much better than running nothing at all.
+
+### Results
+
+Stealing improves utilization with only a modest CPU overhead in scheduler code. In the following experiment, hackbench is run with varying numbers of groups (40 tasks per group), and the delta in /proc/schedstat is shown for each run, averaged per CPU, augmented with these non-standard stats:
+
+ * %find - percent of time spent in old and new functions that search for idle CPUs and tasks to steal and set the overloaded CPUs bitmap.
+ * steal - number of times a task is stolen from another CPU. Elapsed time improves by 8 to 36%, costing at most 0.4% more find time.
+
+
+
+![load balancing][1]
+
+[Used with permission][2]
+
+CPU busy utilization is close to 100% for the new kernel, as shown by the green curve in the following graph, versus the orange curve for the baseline kernel:
+
+![][3]
+
+Stealing improves Oracle database OLTP performance by up to 9% depending on load, and we have seen some nice improvements for mysql, pgsql, gcc, java, and networking. In general, stealing is most helpful for workloads with a high context switch rate.
+
+### The code
+
+As of this writing, this work is not yet upstream, but the latest patch series is at [https://lkml.org/lkml/2018/12/6/1253. ][4]If your kernel is built with CONFIG_SCHED_DEBUG=y, you can verify that it contains the stealing optimization using
+
+```
+# grep -q STEAL /sys/kernel/debug/sched_features && echo Yes
+Yes
+```
+
+If you try it, note that stealing is disabled for systems with more than 2 NUMA nodes, because hackbench regresses on such systems, as I explain in [https://lkml.org/lkml/2018/12/6/1250 .][5]However, I suspect this effect is specific to hackbench and that stealing will help other workloads on many-node systems. To try it, reboot with kernel parameter sched_steal_node_limit = 8 (or larger).
+
+### Future work
+
+After the basic stealing algorithm is pushed upstream, I am considering the following enhancements:
+
+ * If stealing within the last-level cache does not find a candidate, steal across LLC's and NUMA nodes.
+ * Maintain a sparse bitmap to identify stealing candidates in the RT scheduling class. Currently pull_rt_task() searches all run queues.
+ * Remove the core and socket levels from idle_balance(), as stealing handles those levels. Remove idle_balance() entirely when stealing across LLC is supported.
+ * Maintain a bitmap to identify idle cores and idle CPUs, for push balancing.
+
+
+
+_This article originally appeared at[Oracle Developers Blog][6]._
+
+--------------------------------------------------------------------------------
+
+via: https://www.linux.com/blog/can-better-task-stealing-make-linux-faster
+
+作者:[Oracle][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:
+[b]: https://github.com/lujun9972
+[1]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/linux-load-balancing.png?itok=2Uk1yALt (load balancing)
+[2]: /LICENSES/CATEGORY/USED-PERMISSION
+[3]: https://cdn.app.compendium.com/uploads/user/e7c690e8-6ff9-102a-ac6d-e4aebca50425/b7a700fe-edc3-4ea0-876a-c91e1850b59b/Image/00c074f4282bcbaf0c10dd153c5dfa76/steal_graph.png
+[4]: https://lkml.org/lkml/2018/12/6/1253
+[5]: https://lkml.org/lkml/2018/12/6/1250
+[6]: https://blogs.oracle.com/linux/can-better-task-stealing-make-linux-faster
diff --git a/sources/tech/20190328 Cisco warns of two security patches that don-t work, issues 17 new ones for IOS flaws.md b/sources/tech/20190328 Cisco warns of two security patches that don-t work, issues 17 new ones for IOS flaws.md
new file mode 100644
index 0000000000..27370bf294
--- /dev/null
+++ b/sources/tech/20190328 Cisco warns of two security patches that don-t work, issues 17 new ones for IOS flaws.md
@@ -0,0 +1,72 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Cisco warns of two security patches that don’t work, issues 17 new ones for IOS flaws)
+[#]: via: (https://www.networkworld.com/article/3384742/cisco-warns-of-two-security-patches-that-dont-work-issues-17-new-ones-for-ios-flaws.html#tk.rss_all)
+[#]: author: (Michael Cooney https://www.networkworld.com/author/Michael-Cooney/)
+
+Cisco warns of two security patches that don’t work, issues 17 new ones for IOS flaws
+======
+
+### Cisco is issuing 17 new fixes for security problems with IOS and IOS/XE software that runs most of its routers and switches, while it has no patch yet to replace flawed patches to RV320 and RV 325 routers.
+
+![Marisa9 / Getty][1]
+
+Cisco has dropped [17 Security advisories describing 19 vulnerabilities][2] in the software that runs most of its routers and switches, IOS and IOS/XE.
+
+The company also announced that two previously issued patches for its RV320 and RV325 Dual Gigabit WAN VPN Routers were “incomplete” and would need to be redone and reissued.
+
+**[ Also see[What to consider when deploying a next generation firewall][3]. | Get regularly scheduled insights by [signing up for Network World newsletters][4]. ]**
+
+Cisco rates both those router vulnerabilities as “High” and describes the problems like this:
+
+ * [One vulnerability][5] is due to improper validation of user-supplied input. An attacker could exploit this vulnerability by sending malicious HTTP POST requests to the web-based management interface of an affected device. A successful exploit could allow the attacker to execute arbitrary commands on the underlying Linux shell as _root_.
+ * The [second exposure][6] is due to improper access controls for URLs. An attacker could exploit this vulnerability by connecting to an affected device via HTTP or HTTPS and requesting specific URLs. A successful exploit could allow the attacker to download the router configuration or detailed diagnostic information.
+
+
+
+Cisco said firmware updates that address these vulnerabilities are not available and no workarounds exist, but is working on a complete fix for both.
+
+On the IOS front, the company said six of the vulnerabilities affect both Cisco IOS Software and Cisco IOS XE Software, one of the vulnerabilities affects just Cisco IOS software and ten of the vulnerabilities affect just Cisco IOS XE software. Some of the security bugs, which are all rated as “High”, include:
+
+ * [A vulnerability][7] in the web UI of Cisco IOS XE Software could let an unauthenticated, remote attacker access sensitive configuration information.
+ * [A vulnerability][8] in Cisco IOS XE Software could let an authenticated, local attacker inject arbitrary commands that are executed with elevated privileges. The vulnerability is due to insufficient input validation of commands supplied by the user. An attacker could exploit this vulnerability by authenticating to a device and submitting crafted input to the affected commands.
+ * [A weakness][9] in the ingress traffic validation of Cisco IOS XE Software for Cisco Aggregation Services Router (ASR) 900 Route Switch Processor 3 could let an unauthenticated, adjacent attacker trigger a reload of an affected device, resulting in a denial of service (DoS) condition, Cisco said. The vulnerability exists because the software insufficiently validates ingress traffic on the ASIC used on the RSP3 platform. An attacker could exploit this vulnerability by sending a malformed OSPF version 2 message to an affected device.
+ * A problem in the [authorization subsystem][10] of Cisco IOS XE Software could allow an authenticated but unprivileged (level 1), remote attacker to run privileged Cisco IOS commands by using the web UI. The vulnerability is due to improper validation of user privileges of web UI users. An attacker could exploit this vulnerability by submitting a malicious payload to a specific endpoint in the web UI, Cisco said.
+ * A vulnerability in the [Cluster Management Protocol][11] (CMP) processing code in Cisco IOS Software and Cisco IOS XE Software could allow an unauthenticated, adjacent attacker to trigger a DoS condition on an affected device. The vulnerability is due to insufficient input validation when processing CMP management packets, Cisco said.
+
+
+
+Cisco has released free software updates that address the vulnerabilities described in these advisories and [directs users to their software agreements][12] to find out how they can download the fixes.
+
+Join the Network World communities on [Facebook][13] and [LinkedIn][14] to comment on topics that are top of mind.
+
+--------------------------------------------------------------------------------
+
+via: https://www.networkworld.com/article/3384742/cisco-warns-of-two-security-patches-that-dont-work-issues-17-new-ones-for-ios-flaws.html#tk.rss_all
+
+作者:[Michael Cooney][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.networkworld.com/author/Michael-Cooney/
+[b]: https://github.com/lujun9972
+[1]: https://images.idgesg.net/images/article/2019/02/woman-with-hands-over-face_mistake_oops_embarrassed_shy-by-marisa9-getty-100787990-large.jpg
+[2]: https://tools.cisco.com/security/center/viewErp.x?alertId=ERP-71135
+[3]: https://www.networkworld.com/article/3236448/lan-wan/what-to-consider-when-deploying-a-next-generation-firewall.html
+[4]: https://www.networkworld.com/newsletters/signup.html
+[5]: https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-20190123-rv-inject
+[6]: https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-20190123-rv-info
+[7]: https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-20190327-xeid
+[8]: https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-20190327-xecmd
+[9]: https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-20190327-rsp3-ospf
+[10]: https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-20190327-iosxe-privesc
+[11]: https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-20190327-cmp-dos
+[12]: https://www.cisco.com/c/en/us/about/legal/cloud-and-software/end_user_license_agreement.html
+[13]: https://www.facebook.com/NetworkWorld/
+[14]: https://www.linkedin.com/company/network-world
diff --git a/sources/tech/20190328 Elizabeth Warren-s right-to-repair plan fails to consider data from IoT equipment.md b/sources/tech/20190328 Elizabeth Warren-s right-to-repair plan fails to consider data from IoT equipment.md
new file mode 100644
index 0000000000..1ae1222f6e
--- /dev/null
+++ b/sources/tech/20190328 Elizabeth Warren-s right-to-repair plan fails to consider data from IoT equipment.md
@@ -0,0 +1,65 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Elizabeth Warren's right-to-repair plan fails to consider data from IoT equipment)
+[#]: via: (https://www.networkworld.com/article/3385122/elizabeth-warrens-right-to-repair-plan-fails-to-consider-data-from-iot-equipment.html#tk.rss_all)
+[#]: author: (Fredric Paul https://www.networkworld.com/author/Fredric-Paul/)
+
+Elizabeth Warren's right-to-repair plan fails to consider data from IoT equipment
+======
+
+### Senator and presidential candidate Elizabeth Warren suggests national legislation focused on farm equipment. But that’s only a first step. The data collected by that equipment must also be considered.
+
+![Thinkstock][1]
+
+There’s a surprising battle being fought on America’s farms, between farmers and the companies that sell them tractors, combines, and other farm equipment. Surprisingly, the outcome of that war could have far-reaching implications for the internet of things (IoT) — and now Massachusetts senator and Democratic presidential candidate Elizabeth Warren has weighed in with a proposal that could shift the balance of power in this largely under-the-radar struggle.
+
+## Right to repair farm equipment
+
+Here’s the story: As part of a new plan to support family farms, Warren came out in support of a national right-to-repair law for farm equipment. That might not sound like a big deal, but it raises the stakes in a long-simmering fight between farmers and equipment makers over who really controls access to the equipment — and to the increasingly critical data gathered by the IoT capabilities built into it.
+
+**[ Also read:[Right-to-repair smartphone ruling loosens restrictions on industrial, farm IoT][2] | Get regularly scheduled insights: [Sign up for Network World newsletters][3] ]**
+
+[Warren’s proposal reportedly][4] calls for making all diagnostics tools and manuals freely available to the equipment owners, as well as independent repair shops — not just vendors and their authorized agents — and focuses solely on farm equipment.
+
+That’s a great start, and kudos to Warren for being by far the most prominent politician to weigh in on the issue.
+
+## Part of a much bigger IoT data issue
+
+But Warren's proposal merely scratches the surface of the much larger issue of who actually controls the equipment and devices that consumers and businesses buy. Even more important, it doesn’t address the critical data gathered by IoT sensors in everything ranging from smartphones, wearables, and smart-home devices to private and commercial vehicles and aircraft to industrial equipment.
+
+And as many farmers can tell you, this isn’t some academic argument. That data has real value — not to mention privacy implications. For farmers, it’s GPS-equipped smart sensors tracking everything — from temperature to moisture to soil acidity — that can determine the most efficient times to plant and harvest crops. For consumers, it might be data that affects their home or auto insurance rates, or even divorce cases. For manufacturers, it might cover everything from which equipment needs maintenance to potential issues with raw materials or finished products.
+
+The solution is simple: IoT users need consistent regulations that ensure free access to what is really their own data, and give them the option to share that data with the equipment vendors — if they so choose and on their own terms.
+
+At the very least, users need clear statements of the rules, so they know exactly what they’re getting — and not getting — when they buy IoT-enhanced devices and equipment. And if they’re being honest, most equipment vendors would likely admit that clear rules would benefit them as well by creating a level playing field, reducing potential liabilities and helping to avoid making customers unhappy.
+
+Sen. Warren made headlines earlier this month by proposing to ["break up" tech giants][5] such as Amazon, Apple, and Facebook. If she really wants to help technology buyers, prioritizing the right-to-repair and the associated right to own your own data seems like a more effective approach.
+
+**[ Now read this:[Big trouble down on the IoT farm][6] ]**
+
+Join the Network World communities on [Facebook][7] and [LinkedIn][8] to comment on topics that are top of mind.
+
+--------------------------------------------------------------------------------
+
+via: https://www.networkworld.com/article/3385122/elizabeth-warrens-right-to-repair-plan-fails-to-consider-data-from-iot-equipment.html#tk.rss_all
+
+作者:[Fredric Paul][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.networkworld.com/author/Fredric-Paul/
+[b]: https://github.com/lujun9972
+[1]: https://images.techhive.com/images/article/2017/03/ai_agriculture_primary-100715481-large.jpg
+[2]: https://www.networkworld.com/article/3317696/the-recent-right-to-repair-smartphone-ruling-will-also-affect-farm-and-industrial-equipment.html
+[3]: https://www.networkworld.com/newsletters/signup.html
+[4]: https://appleinsider.com/articles/19/03/27/presidential-candidate-elizabeth-warren-focusing-right-to-repair-on-farmers-not-tech
+[5]: https://www.nytimes.com/2019/03/08/us/politics/elizabeth-warren-amazon.html
+[6]: https://www.networkworld.com/article/3262631/big-trouble-down-on-the-iot-farm.html
+[7]: https://www.facebook.com/NetworkWorld/
+[8]: https://www.linkedin.com/company/network-world
diff --git a/sources/tech/20190328 Microsoft introduces Azure Stack for HCI.md b/sources/tech/20190328 Microsoft introduces Azure Stack for HCI.md
new file mode 100644
index 0000000000..0400f4db04
--- /dev/null
+++ b/sources/tech/20190328 Microsoft introduces Azure Stack for HCI.md
@@ -0,0 +1,63 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Microsoft introduces Azure Stack for HCI)
+[#]: via: (https://www.networkworld.com/article/3385078/microsoft-introduces-azure-stack-for-hci.html#tk.rss_all)
+[#]: author: (Andy Patrizio https://www.networkworld.com/author/Andy-Patrizio/)
+
+Microsoft introduces Azure Stack for HCI
+======
+
+### Azure Stack is great for your existing hardware, so Microsoft is covering the bases with a turnkey solution.
+
+![Thinkstock/Microsoft][1]
+
+Microsoft has introduced Azure Stack HCI Solutions, a new implementation of its on-premises Azure product specifically for [Hyper Converged Infrastructure][2] (HCI) hardware.
+
+[Azure Stack][3] is an on-premises version of its Azure cloud service. It gives companies a chance to migrate to an Azure environment within the confines of their own enterprise rather than onto Microsoft’s data centers. Once you have migrated your apps and infrastructure to Azure Stack, moving between your systems and Microsoft’s cloud service is easy.
+
+HCI is the latest trend in server hardware. It uses scale-out hardware systems and a full software-defined platform to handle [virtualization][4] and management. It’s designed to reduce the complexity of a deployment and on-going management, since everything ships fully integrated, hardware and software.
+
+**[ Read also:[12 most powerful hyperconverged infrasctructure vendors][5] | Get regularly scheduled insights: [Sign up for Network World newsletters][6] ]**
+
+It makes sense for Microsoft to take this step. Azure Stack was ideal for an existing enterprise. Now you can deploy a whole new hardware configuration setup to run Azure in-house, complete with Hyper-V-based software-defined compute, storage, and networking.
+
+The Windows Admin Center is the main management tool for Azure Stack HCI. It connects to other Azure tools, such as Azure Monitor, Azure Security Center, Azure Update Management, Azure Network Adapter, and Azure Site Recovery.
+
+“We are bringing our existing HCI technology into the Azure Stack family for customers to run virtualized applications on-premises with direct access to Azure management services such as backup and disaster recovery,” wrote Julia White, corporate vice president of Microsoft Azure, in a [blog post announcing Azure Stack HCI][7].
+
+It’s not so much a new product launch as a rebranding. When Microsoft launched Server 2016, it introduced a version called Windows Server Software-Defined Data Center (SDDC), which was built on the Hyper-V hypervisor, and says so in a [FAQ][8] as part of the announcement.
+
+"Azure Stack HCI is the evolution of Windows Server Software-Defined (WSSD) solutions previously available from our hardware partners. We brought it into the Azure Stack family because we have started to offer new options to connect seamlessly with Azure for infrastructure management services,” the company said.
+
+Microsoft introduced Azure Stack in 2017, but it was not the first to offer an on-premises cloud option. That distinction goes to [OpenStack][9], a joint project between Rackspace and NASA built on open-source code. Amazon followed with its own product, called [Outposts][10].
+
+Join the Network World communities on [Facebook][11] and [LinkedIn][12] to comment on topics that are top of mind.
+
+--------------------------------------------------------------------------------
+
+via: https://www.networkworld.com/article/3385078/microsoft-introduces-azure-stack-for-hci.html#tk.rss_all
+
+作者:[Andy Patrizio][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.networkworld.com/author/Andy-Patrizio/
+[b]: https://github.com/lujun9972
+[1]: https://images.idgesg.net/images/article/2017/08/5_microsoft-azure-100733132-large.jpg
+[2]: https://www.networkworld.com/article/3207567/what-is-hyperconvergence.html
+[3]: https://www.networkworld.com/article/3207748/microsoft-introduces-azure-stack-its-answer-to-openstack.html
+[4]: https://www.networkworld.com/article/3234795/what-is-virtualization-definition-virtual-machine-hypervisor.html
+[5]: https://www.networkworld.com/article/3112622/hardware/12-most-powerful-hyperconverged-infrastructure-vendors.htmll
+[6]: https://www.networkworld.com/newsletters/signup.html
+[7]: https://azure.microsoft.com/en-us/blog/enabling-customers-hybrid-strategy-with-new-microsoft-innovation/
+[8]: https://azure.microsoft.com/en-us/blog/announcing-azure-stack-hci-a-new-member-of-the-azure-stack-family/
+[9]: https://www.openstack.org/
+[10]: https://www.networkworld.com/article/3324043/aws-does-hybrid-cloud-with-on-prem-hardware-vmware-help.html
+[11]: https://www.facebook.com/NetworkWorld/
+[12]: https://www.linkedin.com/company/network-world
diff --git a/sources/tech/20190328 Motorola taps freed-up wireless spectrum for enterprise LTE networks.md b/sources/tech/20190328 Motorola taps freed-up wireless spectrum for enterprise LTE networks.md
new file mode 100644
index 0000000000..ce38f54f79
--- /dev/null
+++ b/sources/tech/20190328 Motorola taps freed-up wireless spectrum for enterprise LTE networks.md
@@ -0,0 +1,68 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Motorola taps freed-up wireless spectrum for enterprise LTE networks)
+[#]: via: (https://www.networkworld.com/article/3385117/motorola-taps-cbrs-spectrum-to-create-private-broadband-lmr-system.html#tk.rss_all)
+[#]: author: (Patrick Nelson https://www.networkworld.com/author/Patrick-Nelson/)
+
+Motorola taps freed-up wireless spectrum for enterprise LTE networks
+======
+
+### Citizens Broadband Radio Service (CBRS) is developing. Out of the gate, Motorola is creating a land mobile radio (LMR) system that includes enterprise-level, voice handheld devices and fast, private data networks.
+
+![Jiraroj Praditcharoenkul / Getty Images][1]
+
+In a move that could upend how workers access data in the enterprise, Motorola has announced a broadband product that it says will deliver data at double the capacity and four-times the range of Wi-Fi for end users. The handheld, walkie-talkie-like device, called Mototrbo Nitro, will, importantly, also include a voice channel. “Business-critical voice with private broadband data,” as [Motorola describes it on its website][2].
+
+The company sees the product being implemented in traditional, moving-around, voice communications environments, such as factories and warehouses, that increasingly need data supplementation, too. A shop floor that has an electronically delivered repair manual, with included video demonstration, could be one example. Video could be two-way, even.
+
+**[ Also read:[Wi-Fi 6 is coming to a router near you][3] | Get regularly scheduled insights: [Sign up for Network World newsletters][4] ]**
+
+The product takes advantage of upcoming Citizens Broadband Radio Service (CBRS) spectrum. That’s a swath of radio bandwidth that’s being released by the Federal Communications Commission (FCC) in the 3.5GHz band. It’s a frequency chunk that is also expected to be used heavily for 5G. In this case, though, Motorola is creating a private LTE network for the enterprise.
+
+The CBRS band is the first time publicly available broadband spectrum has been available, [Motorola explains in a white paper][5] (pdf) — organizations don’t have to buy licenses, yet they can get access to useful spectrum: [A tiered sharing system, where auction winners will get priority access licenses, but others will have some access too is proposed][6] by the FCC. The non-prioritized open access could be used by any enterprise for whatever — internet of things (IoT) or private networks.
+
+## Motorola's pitch for using a private broadband network
+
+Why a private broadband network and not simply cell phones? One giveaway line is in Motorola’s promotional video: “Without sacrificing control,” it says. What it means is that the firm thinks there’s a market for companies who want to run entire business communications systems — data and voice — without involvement from possibly nosy Mobile Network Operator phone companies. [I’ve written before about how control over security is prompting large industrials to explore private networks][7] more. Motorola manages the network in this case, though, for the enterprise.
+
+Motorola also refers to potentially limited or intermittent onsite coverage and congestion for public, commercial, single-platform voice and data networks. That’s particularly the case in factories, [Motorola says in an ebook][8]. Heavy machinery containing radio-unfriendly metal can hinder Wi-Fi and cellular, it claims. Or that traditional Land Mobile Radios (LMRs), such as walkie-talkies and vehicle-mounted mobile radios, don’t handle data natively. In particular, it says that if you want to get into artificial intelligence (AI) and analytics, say, you need a more evolving voice and fast data communications setup.
+
+## Industrial IoT uses for Motorola's Nitro network
+
+Industrial IoT will be another beneficiary, Motorola says. It says its CBRS Nitro network could include instant notifications of equipment failures that traditional products can’t provide. It also suggests merging fixed security cameras with “photos and videos of broken machines and sending real-time video to an expert.”
+
+**[[Take this mobile device management course from PluralSight and learn how to secure devices in your company without degrading the user experience.][9] ]**
+
+Motorola also suggests that by separating consumer Wi-Fi (as is offered in hospitality and transport verticals, for example) from business-critical systems, one reduces traffic congestion risks.
+
+The highly complicated CBRS band-sharing system is still not through its government testing. “However, we could deploy customer systems under an experimental license,” a Motorola representative told me.
+
+Join the Network World communities on [Facebook][10] and [LinkedIn][11] to comment on topics that are top of mind.
+
+--------------------------------------------------------------------------------
+
+via: https://www.networkworld.com/article/3385117/motorola-taps-cbrs-spectrum-to-create-private-broadband-lmr-system.html#tk.rss_all
+
+作者:[Patrick Nelson][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.networkworld.com/author/Patrick-Nelson/
+[b]: https://github.com/lujun9972
+[1]: https://images.idgesg.net/images/article/2019/02/industry_4-0_industrial_iot_smart_factory_automation_robotic_arm_gear_engineer_tablet_by_jiraroj_praditcharoenkul_gettyimages-1091790364_2400x1600-100788459-large.jpg
+[2]: https://www.motorolasolutions.com/en_us/products/two-way-radios/mototrbo/nitro.html
+[3]: https://www.networkworld.com/article/3311921/mobile-wireless/wi-fi-6-is-coming-to-a-router-near-you.html
+[4]: https://www.networkworld.com/newsletters/signup.html
+[5]: https://www.motorolasolutions.com/content/dam/msi/docs/products/mototrbo/nitro/cbrs-white-paper.pdf
+[6]: https://www.networkworld.com/article/3300339/private-lte-using-new-spectrum-approaching-market-readiness.html
+[7]: https://www.networkworld.com/article/3319176/private-5g-networks-are-coming.html
+[8]: https://img04.en25.com/Web/MotorolaSolutionsInc/%7B293ce809-fde0-4619-8507-2b42076215c3%7D_radio_evolution_eBook_Nitro_03.13.19_MS_V3.pdf?elqTrackId=850d56c6d53f4013afa2290a66d6251f&elqaid=2025&elqat=2
+[9]: https://pluralsight.pxf.io/c/321564/424552/7490?u=https%3A%2F%2Fwww.pluralsight.com%2Fcourses%2Fmobile-device-management-big-picture
+[10]: https://www.facebook.com/NetworkWorld/
+[11]: https://www.linkedin.com/company/network-world
diff --git a/sources/tech/20190328 Robots in Retail are Real- and so is Edge Computing.md b/sources/tech/20190328 Robots in Retail are Real- and so is Edge Computing.md
new file mode 100644
index 0000000000..f62317ae54
--- /dev/null
+++ b/sources/tech/20190328 Robots in Retail are Real- and so is Edge Computing.md
@@ -0,0 +1,48 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Robots in Retail are Real… and so is Edge Computing)
+[#]: via: (https://www.networkworld.com/article/3385046/robots-in-retail-are-real-and-so-is-edge-computing.html#tk.rss_all)
+[#]: author: (Wendy Torell https://www.networkworld.com/author/Wendy-Torell/)
+
+Robots in Retail are Real… and so is Edge Computing
+======
+
+### I’ve seen plenty of articles touting the promise of edge computing technologies like AI and robotics in retail brick & mortar, but it wasn’t until this past weekend that I had my first encounter with an actual robot in a retail store.
+
+![Getty][1]
+
+I’ve seen plenty of articles touting the promise of [edge computing][2] technologies like AI and robotics in retail brick & mortar, but it wasn’t until this past weekend that I had my first encounter with an actual robot in a retail store. I was doing my usual weekly grocery shopping at my local Stop & Shop, and who comes strolling down the aisle, but…. Marty… the autonomous robot. He was friendly looking with his big googly eyes and was wearing a sign that explained he was there for safety, and that he was monitoring the aisles to report spills, debris, and other hazards to employees to improve my shopping experience. He caught the attention of most of the shoppers.
+
+At the National Retail Federation conference in NY that I attended in January, this was a topic of one of the [panel sessions][3]. It all makes sense… a positive customer experience is critical to retail success. But employee-to-customer (human to human) interaction has also been proven important. That’s where Marty comes in… to free up resources spent on tedious, time consuming tasks so that personnel can spend more time directly helping customers.
+
+**Use cases for robots in stores**
+
+Robotics have been utilized by retailers in manufacturing floors, and in distribution warehouses to improve productivity and optimize business processes along the supply chain. But it is only more recently that we’re seeing them make their way into the retail store front, where they are in contact with the customers. Alerting to hazards in the aisles is just one of many use-cases for the robots. They can also be used to scan and re-stock shelves, or as general information sources and greeters upon entering the store to guide your shopping experience. But how does a retailer justify the investment in this type of technology? Determining your ROI isn’t as cut and dry as in a warehouse environment, for example, where costs are directly tied to number of staff, time to complete tasks, etc… I guess time will tell for the retailers that are giving it a go.
+
+**What does it mean for the IT equipment on-premise ([micro data center][4])**
+
+Robotics are one of the many ways retail stores are being digitized. Video analytics is another big one, being used to analyze facial expressions for customer satisfaction, obtain customer demographics as input to product development, or ensure queue lines don’t get too long. My colleague, Patrick Donovan, wrote a detailed [blog post][5] about our trip to NRF and the impact on the physical infrastructure in the stores. In a nutshell, the equipment on-premise is becoming more mission critical, more integrated to business applications in the cloud, more tied to positive customer-experiences… and with that comes the need for more secure, more available, more manageable edge. But this is easier said than done in an environment that generally has no IT staff on-premise, and with hundreds or potentially thousands of stores spread out geographically. So how do we address this?
+
+We answer this question in a white paper that Patrick and I are currently writing titled “An Integrated Ecosystem to Solve Edge Computing Infrastructure Challenges”. Here’s a hint, (1) an integrated ecosystem of partners, and (2) an integrated micro data center that emerges from the ecosystem. I’ll be sure to comment on this blog with the link when the white paper becomes publicly available! In the meantime, explore our [edge computing][2] landing page to learn more.
+
+--------------------------------------------------------------------------------
+
+via: https://www.networkworld.com/article/3385046/robots-in-retail-are-real-and-so-is-edge-computing.html#tk.rss_all
+
+作者:[Wendy Torell][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.networkworld.com/author/Wendy-Torell/
+[b]: https://github.com/lujun9972
+[1]: https://images.idgesg.net/images/article/2019/03/gettyimages-828488368-1060x445-100792228-large.jpg
+[2]: https://www.apc.com/us/en/solutions/business-solutions/edge-computing.jsp
+[3]: https://stores.org/2019/01/15/why-is-there-a-robot-in-my-store/
+[4]: https://www.apc.com/us/en/solutions/business-solutions/micro-data-centers.jsp
+[5]: https://blog.apc.com/2019/02/06/4-thoughts-edge-computing-infrastructure-retail-sector/
diff --git a/sources/tech/20190329 How to manage your Linux environment.md b/sources/tech/20190329 How to manage your Linux environment.md
new file mode 100644
index 0000000000..2c4ca113e3
--- /dev/null
+++ b/sources/tech/20190329 How to manage your Linux environment.md
@@ -0,0 +1,177 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (How to manage your Linux environment)
+[#]: via: (https://www.networkworld.com/article/3385516/how-to-manage-your-linux-environment.html#tk.rss_all)
+[#]: author: (Sandra Henry-Stocker https://www.networkworld.com/author/Sandra-Henry_Stocker/)
+
+How to manage your Linux environment
+======
+
+### Linux user environments help you find the command you need and get a lot done without needing details about how the system is configured. Where the settings come from and how they can be modified is another matter.
+
+![IIP Photo Archive \(CC BY 2.0\)][1]
+
+The configuration of your user account on a Linux system simplifies your use of the system in a multitude of ways. You can run commands without knowing where they're located. You can reuse previously run commands without worrying how the system is keeping track of them. You can look at your email, view man pages, and get back to your home directory easily no matter where you might have wandered off to in the file system. And, when needed, you can tweak your account settings so that it works even more to your liking.
+
+Linux environment settings come from a series of files — some are system-wide (meaning they affect all user accounts) and some are configured in files that are sitting in your home directory. The system-wide settings take effect when you log in and local ones take effect right afterwards, so the changes that you make in your account will override system-wide settings. For bash users, these files include these system files:
+
+```
+/etc/environment
+/etc/bash.bashrc
+/etc/profile
+```
+
+And some of these local files:
+
+```
+~/.bashrc
+~/.profile -- not read if ~/.bash_profile or ~/.bash_login
+~/.bash_profile
+~/.bash_login
+```
+
+You can modify any of the local four that exist, since they sit in your home directory and belong to you.
+
+**[ Two-Minute Linux Tips:[Learn how to master a host of Linux commands in these 2-minute video tutorials][2] ]**
+
+### Viewing your Linux environment settings
+
+To view your environment settings, use the **env** command. Your output will likely look similar to this:
+
+```
+$ env
+LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;
+01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:
+*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:
+*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:
+*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;
+31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:
+*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:
+*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:
+*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:
+*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:
+*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:
+*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:
+*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:
+*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:
+*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:
+*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:
+*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:
+*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.spf=00;36:
+SSH_CONNECTION=192.168.0.21 34975 192.168.0.11 22
+LESSCLOSE=/usr/bin/lesspipe %s %s
+LANG=en_US.UTF-8
+OLDPWD=/home/shs
+XDG_SESSION_ID=2253
+USER=shs
+PWD=/home/shs
+HOME=/home/shs
+SSH_CLIENT=192.168.0.21 34975 22
+XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop
+SSH_TTY=/dev/pts/0
+MAIL=/var/mail/shs
+TERM=xterm
+SHELL=/bin/bash
+SHLVL=1
+LOGNAME=shs
+DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
+XDG_RUNTIME_DIR=/run/user/1000
+PATH=/home/shs/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
+LESSOPEN=| /usr/bin/lesspipe %s
+_=/usr/bin/env
+```
+
+While you're likely to get a _lot_ of output, the first big section shown above deals with the colors that are used on the command line to identify various file types. When you see something like ***.tar=01;31:** , this tells you that tar files will be displayed in a file listing in red, while ***.jpg=01;35:** tells you that jpg files will show up in purple. These colors are meant to make it easy to pick out certain files from a file listing. You can learn more about these colors are defined and how to customize them at [Customizing your colors on the Linux command line][3].
+
+One easy way to turn colors off when you prefer a simpler display is to use a command such as this one:
+
+```
+$ ls -l --color=never
+```
+
+That command could easily be turned into an alias:
+
+```
+$ alias ll2='ls -l --color=never'
+```
+
+You can also display individual settings using the **echo** command. In this command, we display the number of commands that will be remembered in our history buffer:
+
+```
+$ echo $HISTSIZE
+1000
+```
+
+Your last location in the file system will be remembered if you've moved.
+
+```
+PWD=/home/shs
+OLDPWD=/tmp
+```
+
+### Making changes
+
+You can make changes to environment settings with a command like this, but add a line lsuch as "HISTSIZE=1234" in your ~/.bashrc file if you want to retain this setting.
+
+```
+$ export HISTSIZE=1234
+```
+
+### What it means to "export" a variable
+
+Exporting a variable makes the setting available to your shell and possible subshells. By default, user-defined variables are local and are not exported to new processes such as subshells and scripts. The export command makes variables available to functions to child processes.
+
+### Adding and removing variables
+
+You can create new variables and make them available to you on the command line and subshells quite easily. However, these variables will not survive your logging out and then back in again unless you also add them to ~/.bashrc or a similar file.
+
+```
+$ export MSG="Hello, World!"
+```
+
+You can unset a variable if you need by using the **unset** command:
+
+```
+$ unset MSG
+```
+
+If the variable is defined locally, you can easily set it back up by sourcing your startup file(s). For example:
+
+```
+$ echo $MSG
+Hello, World!
+$ unset $MSG
+$ echo $MSG
+
+$ . ~/.bashrc
+$ echo $MSG
+Hello, World!
+```
+
+### Wrap-up
+
+User accounts are set up with an appropriate set of startup files for creating a userful user environment, but both individual users and sysadmins can change the default settings by editing their personal setup files (users) or the files from which many of the settings originate (sysadmins).
+
+Join the Network World communities on [Facebook][4] and [LinkedIn][5] to comment on topics that are top of mind.
+
+--------------------------------------------------------------------------------
+
+via: https://www.networkworld.com/article/3385516/how-to-manage-your-linux-environment.html#tk.rss_all
+
+作者:[Sandra Henry-Stocker][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.networkworld.com/author/Sandra-Henry_Stocker/
+[b]: https://github.com/lujun9972
+[1]: https://images.idgesg.net/images/article/2019/03/environment-rocks-leaves-100792229-large.jpg
+[2]: https://www.youtube.com/playlist?list=PL7D2RMSmRO9J8OTpjFECi8DJiTQdd4hua
+[3]: https://www.networkworld.com/article/3269587/customizing-your-text-colors-on-the-linux-command-line.html
+[4]: https://www.facebook.com/NetworkWorld/
+[5]: https://www.linkedin.com/company/network-world
diff --git a/sources/tech/20190329 How to submit a bug report with Bugzilla.md b/sources/tech/20190329 How to submit a bug report with Bugzilla.md
new file mode 100644
index 0000000000..ee778410e7
--- /dev/null
+++ b/sources/tech/20190329 How to submit a bug report with Bugzilla.md
@@ -0,0 +1,102 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (How to submit a bug report with Bugzilla)
+[#]: via: (https://opensource.com/article/19/3/bug-reporting)
+[#]: author: (David Both https://opensource.com/users/dboth)
+
+How to submit a bug report with Bugzilla
+======
+
+Submitting bug reports is an easy way to give back and it helps everyone.
+
+![][1]
+
+I spend a lot of time doing research for my books and [Opensource.com][2] articles. Sometimes this leads me to discover bugs in the software I use, including Fedora and the Linux kernel. As a long-time Linux user and sysadmin, I have benefited greatly from GNU/Linux, and I like to give back. I am not a C language programmer, so I don't create fixes and submit them with bug reports, as some people do. But a way I can return some value to the Linux community is by reporting bugs.
+
+Product maintainers use a lot of tools to let their users search for existing bugs and report new ones. Bugzilla is a popular tool, and I use the Red Hat [Bugzilla][3] website to report Fedora-related bugs because I primarily use Fedora on the systems I'm responsible for. It's an easy process, but it may seem daunting if you have never done it before. So let's start with the basics.
+
+### Start with a search
+
+Even though it's tempting, never assume that seemingly anomalous behavior is the result of a bug. I always start with a search of relevant websites, such as the [Fedora wiki][4], the [CentOS wiki][5], and the documentation for the distro I'm using. I also try to check the various distro listservs.
+
+If it appears that no one has encountered this problem before (or if they have, they haven't reported it as a bug), I go to the Red Hat Bugzilla site and begin searching for a bug report that might come close to matching the symptoms I encountered.
+
+You can search the Red Hat Bugzilla site without an account. Go to the Bugzilla site and click on the [Advanced Search tab][6].
+
+![Searching for a bug][7]
+
+For example, if you want to search for bug reports related to Fedora's Rescue mode kernel, enter the following data in the Advanced Search form.
+
+Field | Logic | Data or Selection
+---|---|---
+Summary | Contains the string | Rescue mode kernel
+Classification | | Fedora
+Product | | Fedora
+Component | | grub2
+Status | | New + Assigned
+
+Then press **Search**. This returns a list of one bug with the ID 1654337 (which happens to be a bug I reported).
+
+![Bug report list][8]
+
+Click on the ID to view my bug report details. I entered as much relevant data as possible in the top section of the report. In the comments, I described the problem and included supporting files, other relevant comments (such as the fact that the problem occurred on multiple motherboards), and the steps to reproduce the problem.
+
+![Bug report details][9]
+
+The more information you can provide here that pertains to the bug, such as symptoms, the hardware and software environments (if they are applicable), other software that was running at the time, kernel and distro release levels, and so on, the easier it will be to determine where to assign your bug. In this case, I originally chose the kernel component, but it was quickly changed to the GRUB2 component because the problem occurred before the kernel loaded.
+
+### How to submit a bug report
+
+The Red Hat [Bugzilla][3] website requires an account to submit new bugs or comment on old ones. It is easy to sign up. On Bugzilla's main page, click **Open a New Account** and fill in the requested information. After you verify your email address, you can fill in the rest of the information to create your account.
+
+_**Advisory:**_ _Bugzilla is a working website that people count on for support. I strongly suggest not creating an account unless you intend to submit bug reports or comment on existing bugs._
+
+To demonstrate how to submit a bug report, I'll use a fictional example of creating a bug against the Xfce4-terminal emulator in Fedora. _Please do not do this unless you have a real bug to report._
+
+Log into your account and click on **New** in the menu bar or the **File a Bug** button. You'll need to select a classification for the bug to continue the process. This will narrow down some of the choices on the next page.
+
+The following image shows how I filled out the required fields (and a couple of others that are not required).
+
+![Reporting a bug][10]
+
+When you type a short problem description in the **Summary** field, Bugzilla displays a list of other bugs that might match yours. If one matches, click **Add Me to the CC List** to receive emails when changes are made to the bug.
+
+If none match, fill in the information requested in the **Description** field. Add as much information as you can, including error messages and screen captures that illustrate the problem. Be sure to describe the exact steps needed to reproduce the problem and how reproducible it is: does it fail every time, every second, third, fourth, random time, or whatever. If it happened only once, it's very unlikely anyone will be able to reproduce the problem you observed.
+
+When you finish adding as much information as you can, press **Submit Bug**.
+
+### Be kind
+
+Bug reporting websites are not for asking questions—they are for searching and reporting bugs. That means you must have performed some work on your own to conclude that there really is a bug. There are many wikis, listservs, and Q&A websites that are appropriate for asking questions. Use sites like Bugzilla to search for existing bug reports on the problem you have found.
+
+Be sure you submit your bugs on the correct bug reporting website. For example, only submit bugs about Red Hat products on the Red Hat Bugzilla, and submit bugs about LibreOffice by following [LibreOffice's instructions][11].
+
+Reporting bugs is not difficult, and it is an important way to participate.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/3/bug-reporting
+
+作者:[David Both (Community Moderator)][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/dboth
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/bug-insect-butterfly-diversity-inclusion-2.png?itok=TcC9eews
+[2]: http://Opensource.com
+[3]: https://bugzilla.redhat.com/
+[4]: https://fedoraproject.org/wiki/
+[5]: https://wiki.centos.org/
+[6]: https://bugzilla.redhat.com/query.cgi?format=advanced
+[7]: https://opensource.com/sites/default/files/uploads/bugreporting-1.png (Searching for a bug)
+[8]: https://opensource.com/sites/default/files/uploads/bugreporting-2.png (Bug report list)
+[9]: https://opensource.com/sites/default/files/uploads/bugreporting-4.png (Bug report details)
+[10]: https://opensource.com/sites/default/files/uploads/bugreporting-3.png (Reporting a bug)
+[11]: https://wiki.documentfoundation.org/QA/BugReport
diff --git a/sources/tech/20190329 Russia demands access to VPN providers- servers.md b/sources/tech/20190329 Russia demands access to VPN providers- servers.md
new file mode 100644
index 0000000000..0c950eb04f
--- /dev/null
+++ b/sources/tech/20190329 Russia demands access to VPN providers- servers.md
@@ -0,0 +1,77 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Russia demands access to VPN providers’ servers)
+[#]: via: (https://www.networkworld.com/article/3385050/russia-demands-access-to-vpn-providers-servers.html#tk.rss_all)
+[#]: author: (Tim Greene https://www.networkworld.com/author/Tim-Greene/)
+
+Russia demands access to VPN providers’ servers
+======
+
+### 10 VPN service providers have been ordered to link their servers in Russia to the state censorship agency by April 26
+
+![Getty Images][1]
+
+The Russian censorship agency Roskomnadzor has ordered 10 [VPN][2] service providers to link their servers in Russia to its network in order to stop users within the country from reaching banned sites.
+
+If they fail to comply, their services will be blocked, according to a machine translation of the order.
+
+[RELATED: Best VPN routers for small business][3]
+
+The 10 VPN providers are ExpressVPN, HideMyAss!, Hola VPN, IPVanish, Kaspersky Secure Connection, KeepSolid, NordVPN, OpenVPN, TorGuard, and VyprVPN.
+
+In response at least five of the 10 – Express VPN, IPVanish, KeepSolid, NordVPN, TorGuard and – say they are tearing down their servers in Russia but continuing to offer their services to Russian customers if they can reach the providers’ servers located outside of Russia. A sixth provider, Kaspersky Labs, which is based in Moscow, says it will comply with the order. The other four could not be reached for this article.
+
+IPVanish characterized the order as another phase of “Russia’s censorship agenda” dating back to 2017 when the government enacted a law forbidding the use of VPNs to access blocked Web sites.
+
+“Up until recently, however, they had done little to enforce such rules,” IPVanish [says in its blog][4]. “These new demands mark a significant escalation.”
+
+The reactions of those not complying are similar. TorGuard says it has taken steps to remove all its physical servers from Russia. It is also cutting off its business with data centers in the region
+
+**[[Prepare to become a Certified Information Security Systems Professional with this comprehensive online course from PluralSight. Now offering a 10-day free trial!][5] ]**
+
+“We would like to be clear that this removal of servers was a voluntary decision by TorGuard management and no equipment seizure occurred,” [TorGuard says in its blog][6]. “We do not store any logs so even if servers were compromised it would be impossible for customer’s data to be exposed.”
+
+TorGuard says it is deploying more servers in adjacent countries to protect fast download speeds for customers in the region.
+
+IPVanish says it has faced similar demands from Russia before and responded similarly. In 2016, a new Russian law required online service providers to store customers’ private data for a year. “In response, [we removed all physical server presence in Russia][7], while still offering Russians encrypted connections via servers outside of Russian borders,” the company says. “That decision was made in accordance with our strict zero-logs policy.”
+
+KeepSolid says it had no servers in Russia, but it will not comply with the order to link with Roskomnadzor's network. KeepSolid says it will [draw on its experience dealing with the Great Firewall of China][8] to fight the Russian censorship attempt. "Our team developed a special [KeepSolid Wise protocol][9] which is designed for use in countries where the use of VPN is blocked," a spokesperson for the company said in an email statement.
+
+NordVPN says it’s shutting down all its Russian servers, and all of them will be shredded as of April 1. [The company says in a blog][10] that some of its customers who connected to its Russian servers without use of the NordVPN application will have to reconfigure their devices to insure their security. Those customers using the app won’t have to do anything differently because the option to connect to Russia via the app has been removed.
+
+ExpressVPN is also not complying with the order. "As a matter of principle, ExpressVPN will never cooperate with efforts to censor the internet by any country," said the company's vice presidentn Harold Li in an email, but he said that blocking traffic will be ineffective. "We epect that Russian internet users will still be able to find means of accessing the sites and services they want, albeit perhaps with some additional effort."
+
+Kaspersky Labs says it will comply with the Russian order and responded to emailed questions about its reaction with this written response:
+
+“Kaspersky Lab is aware of the new requirements from Russian regulators for VPN providers operating in the country. These requirements oblige VPN providers to restrict access to a number of websites that were listed and prohibited by the Russian Government in the country’s territory. As a responsible company, Kaspersky Lab complies with the laws of all the countries where it operates, including Russia. At the same time, the new requirements don’t affect the main purpose of Kaspersky Secure Connection which protects user privacy and ensures confidentiality and protection against data interception, for example, when using open Wi-Fi networks, making online payments at cafes, airports or hotels. Additionally, the new requirements are relevant to VPN use only in Russian territory and do not concern users in other countries.”
+
+Join the Network World communities on [Facebook][11] and [LinkedIn][12] to comment on topics that are top of mind.
+
+--------------------------------------------------------------------------------
+
+via: https://www.networkworld.com/article/3385050/russia-demands-access-to-vpn-providers-servers.html#tk.rss_all
+
+作者:[Tim Greene][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.networkworld.com/author/Tim-Greene/
+[b]: https://github.com/lujun9972
+[1]: https://images.idgesg.net/images/article/2018/10/ipsecurity-protocols-network-security-vpn-100775457-large.jpg
+[2]: https://www.networkworld.com/article/3268744/understanding-virtual-private-networks-and-why-vpns-are-important-to-sd-wan.html
+[3]: http://www.networkworld.com/article/3002228/router/best-vpn-routers-for-small-business.html#tk.nww-fsb
+[4]: https://nordvpn.com/blog/nordvpn-servers-roskomnadzor-russia/
+[5]: https://pluralsight.pxf.io/c/321564/424552/7490?u=https%3A%2F%2Fwww.pluralsight.com%2Fpaths%2Fcertified-information-systems-security-professional-cisspr
+[6]: https://torguard.net/blog/why-torguard-has-removed-all-russian-servers/
+[7]: https://blog.ipvanish.com/ipvanish-removes-russian-vpn-servers-from-moscow/
+[8]: https://www.vpnunlimitedapp.com/blog/what-roskomnadzor-demands-from-vpns/
+[9]: https://www.vpnunlimitedapp.com/blog/keepsolid-wise-a-smart-solution-to-get-total-online-freedom/
+[10]: /cms/article/blog%20https:/nordvpn.com/blog/nordvpn-servers-roskomnadzor-russia/
+[11]: https://www.facebook.com/NetworkWorld/
+[12]: https://www.linkedin.com/company/network-world
diff --git a/sources/tech/20190329 ShadowReader- Serverless load tests for replaying production traffic.md b/sources/tech/20190329 ShadowReader- Serverless load tests for replaying production traffic.md
new file mode 100644
index 0000000000..3d7f7eaf0c
--- /dev/null
+++ b/sources/tech/20190329 ShadowReader- Serverless load tests for replaying production traffic.md
@@ -0,0 +1,176 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (ShadowReader: Serverless load tests for replaying production traffic)
+[#]: via: (https://opensource.com/article/19/3/shadowreader-serverless)
+[#]: author: (Yuki Sawa https://opensource.com/users/yukisawa1/users/yongsanchez)
+
+ShadowReader: Serverless load tests for replaying production traffic
+======
+This open source tool recreates serverless production conditions to
+pinpoint causes of memory leaks and other errors that aren't visible in
+the QA environment.
+![Traffic lights at night][1]
+
+While load testing has become more accessible, configuring load tests that faithfully re-create production conditions can be difficult. A good load test must use a set of URLs that are representative of production traffic and achieve request rates that mimic real users. Even performing distributed load tests requires the upkeep of a fleet of servers.
+
+[ShadowReader][2] aims to solve these problems. It gathers URLs and request rates straight from production logs and replays them using AWS Lambda. Being serverless, it is more cost-efficient and performant than traditional distributed load tests; in practice, it has scaled beyond 50,000 requests per minute.
+
+At Edmunds, we have been able to utilize these capabilities to solve problems, such as Node.js memory leaks that were happening only in production, by recreating the same conditions in our QA environment. We're also using it daily to generate load for pre-production canary deployments.
+
+The memory leak problem we faced in our Node.js application confounded our engineering team; as it was only occurring in our production environment; we could not reproduce it in QA until we introduced ShadowReader to replay production traffic into QA.
+
+### The incident
+
+On Christmas Eve 2017, we suffered an incident where there was a jump in response time across the board with error rates tripling and impacting many users of our website.
+
+![Christmas Eve 2017 incident][3]
+
+![Christmas Eve 2017 incident][4]
+
+Monitoring during the incident helped identify and resolve the issue quickly, but we still needed to understand the root cause.
+
+At Edmunds, we leverage a robust continuous delivery (CD) pipeline that releases new updates to production multiple times a day. We also dynamically scale up our applications to accommodate peak traffic and scale down to save costs. Unfortunately, this had the side effect of masking a memory leak.
+
+In our investigation, we saw that the memory leak had existed for weeks, since early December. Memory usage would climb to 60%, along with a slow increase in 99th percentile response time.
+
+Between our CD pipeline and autoscaling events, long-running containers were frequently being shut down and replaced by newer ones. This inadvertently masked the memory leak until December, when we decided to stop releasing software to ensure stability during the holidays.
+
+![Slow increase in 99th percentile response time][5]
+
+### Our CD pipeline
+
+At a glance, Edmunds' CD pipeline looks like this:
+
+ 1. Unit test
+ 2. Build a Docker image for the application
+ 3. Integration test
+ 4. Load test/performance test
+ 5. Canary release
+
+
+
+The solution is fully automated and requires no manual cutover. The final step is a canary deployment directly into the live website, allowing us to release multiple times a day.
+
+For our load testing, we leveraged custom tooling built on top of JMeter. It takes random samples of production URLs and can simulate various percentages of traffic. Unfortunately, however, our load tests were not able to reproduce the memory leak in any of our pre-production environments.
+
+### Solving the memory leak
+
+When looking at the memory patterns in QA, we noticed there was a very healthy pattern. Our initial hypothesis was that our JMeter load testing in QA was unable to simulate production traffic in a way that allows us to predict how our applications will perform.
+
+While the load test takes samples from production URLs, it can't precisely simulate the URLs customers use and the exact frequency of calls (i.e., the burst rate).
+
+Our first step was to re-create the problem in QA. We used a new tool called ShadowReader, a project that evolved out of our hackathons. While many projects we considered were product-focused, this was the only operations-centric one. It is a load-testing tool that runs on AWS Lambda and can replay production traffic and usage patterns against our QA environment.
+
+The results it returned were immediate:
+
+![QA results in ShadowReader][6]
+
+Knowing that we could re-create the problem in QA, we took the additional step to point ShadowReader to our local environment, as this allowed us to trigger Node.js heap dumps. After analyzing the contents of the dumps, it was obvious the memory leak was coming from two excessively large objects containing only strings. At the time the snapshot dumped, these objects contained 373MB and 63MB of strings!
+
+![Heap dumps show source of memory leak][7]
+
+We found that both objects were temporary lookup caches containing metadata to be used on the client side. Neither of these caches was ever intended to be persisted on the server side. The user's browser cached only its own metadata, but on the server side, it cached the metadata for all users. This is why we were unable to reproduce the leak with synthetic testing. Synthetic tests always resulted in the same fixed set of metadata in the server-side caches. The leak surfaced only when we had a sufficient amount of unique metadata being generated from a variety of users.
+
+Once we identified the problem, we were able to remove the large caches that we observed in the heap dumps. We've since instrumented the application to start collecting metrics that can help detect issues like this faster.
+
+![Collecting metrics][8]
+
+After making the fix in QA, we saw that the memory usage was constant and the leak was plugged.
+
+![Graph showing memory leak fixed][9]
+
+### What is ShadowReader?
+
+ShadowReader is a serverless load-testing framework powered by AWS Lambda and S3 to replay production traffic. It mimics real user traffic by replaying URLs from production at the same rate as the live website. We are happy to announce that after months of internal usage, we have released it as open source!
+
+#### Features
+
+ * ShadowReader mimics real user traffic by replaying user requests (URLs). It can also replay certain headers, such as True-Client-IP and User-Agent, along with the URL.
+
+
+ * It is more efficient cost- and performance-wise than traditional distributed load tests that run on a fleet of servers. Managing a fleet of servers for distributed load testing can cost $1,000 or more per month; with a serverless stack, it can be reduced to $100 per month by provisioning compute resources on demand.
+
+
+ * We've scaled it up to 50,000 requests per minute, but it should be able to handle more than 100,000 reqs/min.
+
+
+ * New load tests can be spun up and stopped instantly, unlike traditional load-testing tools, which can take many minutes to generate the test plan and distribute the test data to the load-testing servers.
+
+
+ * It can ramp traffic up or down by a percentage value to function as a more traditional load test.
+
+
+ * Its plugin system enables you to switch out plugins to change its behavior. For instance, you can switch from past replay (i.e., replays past requests) to live replay (i.e., replays requests as they come in).
+
+
+ * Currently, it can replay logs from the [Application Load Balancer][10] and [Classic Load Balancer][11] Elastic Load Balancers (ELBs), and support for other load balancers is coming soon.
+
+
+
+### How it works
+
+ShadowReader is composed of four different Lambdas: a Parser, an Orchestrator, a Master, and a Worker.
+
+![ShadowReader architecture][12]
+
+When a user visits a website, a load balancer (in this case, an ELB) typically routes the request. As the ELB routes the request, it will log the event and ship it to S3.
+
+Next, ShadowReader triggers a Parser Lambda every minute via a CloudWatch event, which parses the latest access (ELB) logs on S3 for that minute, then ships the parsed URLs into another S3 bucket.
+
+On the other side of the system, ShadowReader also triggers an Orchestrator lambda every minute. This Lambda holds the configurations and state of the system.
+
+The Orchestrator then invokes a Master Lambda function. From the Orchestrator, the Master receives information on which time slice to replay and downloads the respective data from the S3 bucket of parsed URLs (deposited there by the Parser).
+
+The Master Lambda divides the load-test URLs into smaller batches, then invokes and passes each batch into a Worker Lambda. If 800 requests must be sent out, then eight Worker Lambdas will be invoked, each one handling 100 URLs.
+
+Finally, the Worker receives the URLs passed from the Master and starts load-testing the chosen test environment.
+
+### The bigger picture
+
+The challenge of reproducibility in load testing serverless infrastructure becomes increasingly important as we move from steady-state application sizing to on-demand models. While ShadowReader is designed and used with Edmunds' infrastructure in mind, any application leveraging ELBs can take full advantage of it. Soon, it will have support to replay the traffic of any service that generates traffic logs.
+
+As the project moves forward, we would love to see it evolve to be compatible with next-generation serverless runtimes such as Knative. We also hope to see other open source communities build similar toolchains for their infrastructure as serverless becomes more prevalent.
+
+### Getting started
+
+If you would like to test drive ShadowReader, check out the [GitHub repo][2]. The README contains how-to guides and a batteries-included [demo][13] that will deploy all the necessary resources to try out live replay in your AWS account.
+
+We would love to hear what you think and welcome contributions. See the [contributing guide][14] to get started!
+
+* * *
+
+_This article is based on "[How we fixed a Node.js memory leak by using ShadowReader to replay production traffic into QA][15]," published on the_ _Edmunds Tech Blog_ _with the help of Carlos Macasaet, Sharath Gowda, and Joey Davis._ _Yuki_ _Sawa_ _also presented this_ as* [ShadowReader—Serverless load tests for replaying production traffic][16] at ([SCaLE 17x][17]) March 7-10 in Pasadena, Calif.*
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/3/shadowreader-serverless
+
+作者:[Yuki Sawa][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/yukisawa1/users/yongsanchez
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/traffic-light-go.png?itok=nC_851ys (Traffic lights at night)
+[2]: https://github.com/edmunds/shadowreader
+[3]: https://opensource.com/sites/default/files/uploads/shadowreader_incident1_0.png (Christmas Eve 2017 incident)
+[4]: https://opensource.com/sites/default/files/uploads/shadowreader_incident2.png (Christmas Eve 2017 incident)
+[5]: https://opensource.com/sites/default/files/uploads/shadowreader_99thpercentile.png (Slow increase in 99th percentile response time)
+[6]: https://opensource.com/sites/default/files/uploads/shadowreader_qa.png (QA results in ShadowReader)
+[7]: https://opensource.com/sites/default/files/uploads/shadowreader_heapdumps.png (Heap dumps show source of memory leak)
+[8]: https://opensource.com/sites/default/files/uploads/shadowreader_code.png (Collecting metrics)
+[9]: https://opensource.com/sites/default/files/uploads/shadowreader_leakplugged.png (Graph showing memory leak fixed)
+[10]: https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html
+[11]: https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/introduction.html
+[12]: https://opensource.com/sites/default/files/uploads/shadowreader_architecture.png (ShadowReader architecture)
+[13]: https://github.com/edmunds/shadowreader#live-replay
+[14]: https://github.com/edmunds/shadowreader/blob/master/CONTRIBUTING.md
+[15]: https://technology.edmunds.com/2018/08/25/Investigating-a-Memory-Leak-and-Introducing-ShadowReader/
+[16]: https://www.socallinuxexpo.org/scale/17x/speakers/yuki-sawa
+[17]: https://www.socallinuxexpo.org/
diff --git a/sources/tech/20190331 How to build a mobile particulate matter sensor with a Raspberry Pi.md b/sources/tech/20190331 How to build a mobile particulate matter sensor with a Raspberry Pi.md
new file mode 100644
index 0000000000..8efc47ae76
--- /dev/null
+++ b/sources/tech/20190331 How to build a mobile particulate matter sensor with a Raspberry Pi.md
@@ -0,0 +1,126 @@
+[#]: collector: (lujun9972)
+[#]: translator: (tomjlw)
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (How to build a mobile particulate matter sensor with a Raspberry Pi)
+[#]: via: (https://opensource.com/article/19/3/mobile-particulate-matter-sensor)
+[#]: author: (Stephan Tetzel https://opensource.com/users/stephan)
+
+How to build a mobile particulate matter sensor with a Raspberry Pi
+======
+
+Monitor your air quality with a Raspberry Pi, a cheap sensor, and an inexpensive display.
+
+![Team communication, chat][1]
+
+About a year ago, I wrote about [measuring air quality][2] using a Raspberry Pi and a cheap sensor. We've been using this project in our school and privately for a few years now. However, it has one disadvantage: It is not portable because it depends on a WLAN network or a wired network connection to work. You can't even access the sensor's measurements if the Raspberry Pi and the smartphone or computer are not on the same network.
+
+To overcome this limitation, we added a small screen to the Raspberry Pi so we can read the values directly from the device. Here's how we set up and configured a screen for our mobile fine particulate matter sensor.
+
+### Setting up the screen for the Raspberry Pi
+
+There is a wide range of Raspberry Pi displays available from [Amazon][3], AliExpress, and other sources. They range from ePaper screens to LCDs with touch function. We chose an inexpensive [3.5″ LCD][4] with touch and a resolution of 320×480 pixels that can be plugged directly into the Raspberry Pi's GPIO pins. It's also nice that a 3.5″ display is about the same size as a Raspberry Pi.
+
+The first time you turn on the screen and start the Raspberry Pi, the screen will remain white because the driver is missing. You have to install [the appropriate drivers][5] for the display first. Log in with SSH and execute the following commands:
+
+```
+$ rm -rf LCD-show
+$ git clone
+$ chmod -R 755 LCD-show
+$ cd LCD-show/
+```
+
+Execute the appropriate command for your screen to install the drivers. For example, this is the command for our model MPI3501 screen:
+
+```
+$ sudo ./LCD35-show
+```
+
+This command installs the appropriate drivers and restarts the Raspberry Pi.
+
+### Installing PIXEL desktop and setting up autostart
+
+Here is what we want our project to do: If the Raspberry Pi boots up, we want to display a small website with our air quality measurements.
+
+First, install the Raspberry Pi's [PIXEL desktop environment][6]:
+
+```
+$ sudo apt install raspberrypi-ui-mods
+```
+
+Then install the Chromium browser to display the website:
+
+```
+$ sudo apt install chromium-browser
+```
+
+Autologin is required for the measured values to be displayed directly after startup; otherwise, you will just see the login screen. However, autologin is not configured for the "pi" user by default. You can configure autologin with the **raspi-config** tool:
+
+```
+$ sudo raspi-config
+```
+
+In the menu, select: **3 Boot Options → B1 Desktop / CLI → B4 Desktop Autologin**.
+
+There is a step missing to start Chromium with our website right after boot. Create the folder **/home/pi/.config/lxsession/LXDE-pi/** :
+
+```
+$ mkdir -p /home/pi/config/lxsession/LXDE-pi/
+```
+
+Then create the **autostart** file in this folder:
+
+```
+$ nano /home/pi/.config/lxsession/LXDE-pi/autostart
+```
+
+and paste the following code:
+
+```
+#@unclutter
+@xset s off
+@xset -dpms
+@xset s noblank
+
+# Open Chromium in Full Screen Mode
+@chromium-browser --incognito --kiosk
+```
+
+If you want to hide the mouse pointer, you have to install the package **unclutter** and remove the comment character at the beginning of the **autostart** file:
+
+```
+$ sudo apt install unclutter
+```
+
+![Mobile particulate matter sensor][7]
+
+I've made a few small changes to the code in the last year. So, if you set up the air quality project before, make sure to re-download the script and files for the AQI website using the instructions in the [original article][2].
+
+By adding the touch screen, you now have a mobile particulate matter sensor! We use it at our school to check the quality of the air in the classrooms or to do comparative measurements. With this setup, you are no longer dependent on a network connection or WLAN. You can use the small measuring station everywhere—you can even use it with a power bank to be independent of the power grid.
+
+* * *
+
+_This article originally appeared on[Open School Solutions][8] and is republished with permission._
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/3/mobile-particulate-matter-sensor
+
+作者:[Stephan Tetzel][a]
+选题:[lujun9972][b]
+译者:[tomjlw](https://github.com/tomjlw)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/stephan
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/talk_chat_team_mobile_desktop.png?itok=d7sRtKfQ (Team communication, chat)
+[2]: https://opensource.com/article/18/3/how-measure-particulate-matter-raspberry-pi
+[3]: https://www.amazon.com/gp/search/ref=as_li_qf_sp_sr_tl?ie=UTF8&tag=openschoolsol-20&keywords=lcd%20raspberry&index=aps&camp=1789&creative=9325&linkCode=ur2&linkId=51d6d7676e10d6c7db203c4a8b3b529a
+[4]: https://amzn.to/2CcvgpC
+[5]: https://github.com/goodtft/LCD-show
+[6]: https://opensource.com/article/17/1/try-raspberry-pis-pixel-os-your-pc
+[7]: https://opensource.com/sites/default/files/uploads/mobile-aqi-sensor.jpg (Mobile particulate matter sensor)
+[8]: https://openschoolsolutions.org/mobile-particulate-matter-sensor/
diff --git a/sources/tech/20190401 Build and host a website with Git.md b/sources/tech/20190401 Build and host a website with Git.md
new file mode 100644
index 0000000000..32a07d3490
--- /dev/null
+++ b/sources/tech/20190401 Build and host a website with Git.md
@@ -0,0 +1,226 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Build and host a website with Git)
+[#]: via: (https://opensource.com/article/19/4/building-hosting-website-git)
+[#]: author: (Seth Kenlon https://opensource.com/users/seth)
+
+Build and host a website with Git
+======
+Publishing your own website is easy if you let Git help you out. Learn
+how in the first article in our series about little-known Git uses.
+![web development and design, desktop and browser][1]
+
+[Git][2] is one of those rare applications that has managed to encapsulate so much of modern computing into one program that it ends up serving as the computational engine for many other applications. While it's best-known for tracking source code changes in software development, it has many other uses that can make your life easier and more organized. In this series leading up to Git's 14th anniversary on April 7, we'll share seven little-known ways to use Git.
+
+Creating a website used to be both sublimely simple and a form of black magic all at once. Back in the old days of Web 1.0 (that's not what anyone actually called it), you could just open up any website, view its source code, and reverse engineer the HTML—with all its inline styling and table-based layout—and you felt like a programmer after an afternoon or two. But there was still the matter of getting the page you created on the internet, which meant dealing with servers and FTP and webroot directories and file permissions. While the modern web has become far more complex since then, self-publication can be just as easy (or easier!) if you let Git help you out.
+
+### Create a website with Hugo
+
+[Hugo][3] is an open source static site generator. Static sites are what the web used to be built on (if you go back far enough, it was _all_ the web was). There are several advantages to static sites: they're relatively easy to write because you don't have to code them, they're relatively secure because there's no code executed on the pages, and they can be quite fast because there's no processing aside from transferring whatever you have on the page.
+
+Hugo isn't the only static site generator out there. [Grav][4], [Pico][5], [Jekyll][6], [Podwrite][7], and many others provide an easy way to create a full-featured website with minimal maintenance. Hugo happens to be one with GitLab integration built in, which means you can generate and host your website with a free GitLab account.
+
+Hugo has some pretty big fans, too. For instance, if you've ever gone to the Let's Encrypt website, then you've used a site built with Hugo.
+
+![Let's Encrypt website][8]
+
+#### Install Hugo
+
+Hugo is cross-platform, and you can find installation instructions for MacOS, Windows, Linux, OpenBSD, and FreeBSD in [Hugo's getting started resources][9].
+
+If you're on Linux or BSD, it's easiest to install Hugo from a software repository or ports tree. The exact command varies depending on what your distribution provides, but on Fedora you would enter:
+
+```
+$ sudo dnf install hugo
+```
+
+Confirm you have installed it correctly by opening a terminal and typing:
+
+```
+$ hugo help
+```
+
+This prints all the options available for the **hugo** command. If you don't see that, you may have installed Hugo incorrectly or need to [add the command to your path][10].
+
+#### Create your site
+
+To build a Hugo site, you must have a specific directory structure, which Hugo will generate for you by entering:
+
+```
+$ hugo new site mysite
+```
+
+You now have a directory called **mysite** , and it contains the default directories you need to build a Hugo website.
+
+Git is your interface to get your site on the internet, so change directory to your new **mysite** folder and initialize it as a Git repository:
+
+```
+$ cd mysite
+$ git init .
+```
+
+Hugo is pretty Git-friendly, so you can even use Git to install a theme for your site. Unless you plan on developing the theme you're installing, you can use the **\--depth** option to clone the latest state of the theme's source:
+
+```
+$ git clone --depth 1 \
+
+themes/mero
+```
+
+
+Now create some content for your site:
+
+```
+$ hugo new posts/hello.md
+```
+
+Use your favorite text editor to edit the **hello.md** file in the **content/posts** directory. Hugo accepts Markdown files and converts them to themed HTML files at publication, so your content must be in [Markdown format][11].
+
+If you want to include images in your post, create a folder called **images** in the **static** directory. Place your images into this folder and reference them in your markup using the absolute path starting with **/images**. For example:
+
+```
+
+```
+
+#### Choose a theme
+
+You can find more themes at [themes.gohugo.io][12], but it's best to stay with a basic theme while testing. The canonical Hugo test theme is [Ananke][13]. Some themes have complex dependencies, and others don't render pages the way you might expect without complex configuration. The Mero theme used in this example comes bundled with a detailed **config.toml** configuration file, but (for the sake of simplicity) I'll provide just the basics here. Open the file called **config.toml** in a text editor and add three configuration parameters:
+
+```
+
+languageCode = "en-us"
+title = "My website on the web"
+theme = "mero"
+
+[params]
+ author = "Seth Kenlon"
+ description = "My hugo demo"
+```
+
+#### Preview your site
+
+You don't have to put anything on the internet until you're ready to publish it. While you work, you can preview your site by launching the local-only web server that ships with Hugo.
+
+```
+$ hugo server --buildDrafts --disableFastRender
+```
+
+Open a web browser and navigate to **** to see your work in progress.
+
+### Publish with Git to GitLab
+
+To publish and host your site on GitLab, create a repository for the contents of your site.
+
+To create a repository in GitLab, click on the **New Project** button in your GitLab Projects page. Create an empty repository called **yourGitLabUsername.gitlab.io** , replacing **yourGitLabUsername** with your GitLab user name or group name. You must use this scheme as the name of your project. If you want to add a custom domain later, you can.
+
+Do not include a license or a README file (because you've started a project locally, adding these now would make pushing your data to GitLab more complex, and you can always add them later).
+
+Once you've created the empty repository on GitLab, add it as the remote location for the local copy of your Hugo site, which is already a Git repository:
+
+```
+$ git remote add origin git@gitlab.com:skenlon/mysite.git
+```
+
+Create a GitLab site configuration file called **.gitlab-ci.yml** and enter these options:
+
+```
+image: monachus/hugo
+
+variables:
+ GIT_SUBMODULE_STRATEGY: recursive
+
+pages:
+ script:
+ - hugo
+ artifacts:
+ paths:
+ - public
+ only:
+ - master
+```
+
+The **image** parameter defines a containerized image that will serve your site. The other parameters are instructions telling GitLab's servers what actions to execute when you push new code to your remote repository. For more information on GitLab's CI/CD (Continuous Integration and Delivery) options, see the [CI/CD section of GitLab's docs][14].
+
+#### Set the excludes
+
+Your Git repository is configured, the commands to build your site on GitLab's servers are set, and your site ready to publish. For your first Git commit, you must take a few extra precautions so you're not version-controlling files you don't intend to version-control.
+
+First, add the **/public** directory that Hugo creates when building your site to your **.gitignore** file. You don't need to manage the finished site in Git; all you need to track are your source Hugo files.
+
+```
+$ echo "/public" >> .gitignore
+```
+
+You can't maintain a Git repository within a Git repository without creating a Git submodule. For the sake of keeping this simple, move the embedded **.git** directory so that the theme is just a theme.
+
+Note that you _must_ add your theme files to your Git repository so GitLab will have access to the theme. Without committing your theme files, your site cannot successfully build.
+
+```
+$ mv themes/mero/.git ~/.local/share/Trash/files/
+```
+
+Alternately, use a **trash** command such as [Trashy][15]:
+
+```
+$ trash themes/mero/.git
+```
+
+Now you can add all the contents of your local project directory to Git and push it to GitLab:
+
+```
+$ git add .
+$ git commit -m 'hugo init'
+$ git push -u origin HEAD
+```
+
+### Go live with GitLab
+
+Once your code has been pushed to GitLab, take a look at your project page. An icon indicates GitLab is processing your build. It might take several minutes the first time you push your code, so be patient. However, don't be _too_ patient, because the icon doesn't always update reliably.
+
+![GitLab processing your build][16]
+
+While you're waiting for GitLab to assemble your site, go to your project settings and find the **Pages** panel. Once your site is ready, its URL will be provided for you. The URL is **yourGitLabUsername.gitlab.io/yourProjectName**. Navigate to that address to view the fruits of your labor.
+
+![Previewing Hugo site][17]
+
+If your site fails to assemble correctly, GitLab provides insight into the CI/CD pipeline logs. Review the error message for an indication of what went wrong.
+
+### Git and the web
+
+Hugo (or Jekyll or similar tools) is just one way to leverage Git as your web publishing tool. With server-side Git hooks, you can design your own Git-to-web pipeline with minimal scripting. With the community edition of GitLab, you can self-host your own GitLab instance or you can use an alternative like [Gitolite][18] or [Gitea][19] and use this article as inspiration for a custom solution. Have fun!
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/4/building-hosting-website-git
+
+作者:[Seth Kenlon (Red Hat, Community Moderator)][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/seth
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/web_browser_desktop_devlopment_design_system_computer.jpg?itok=pfqRrJgh (web development and design, desktop and browser)
+[2]: https://git-scm.com/
+[3]: http://gohugo.io
+[4]: http://getgrav.org
+[5]: http://picocms.org/
+[6]: https://jekyllrb.com
+[7]: http://slackermedia.info/podwrite/
+[8]: https://opensource.com/sites/default/files/uploads/letsencrypt-site.jpg (Let's Encrypt website)
+[9]: https://gohugo.io/getting-started/installing
+[10]: https://opensource.com/article/17/6/set-path-linux
+[11]: https://commonmark.org/help/
+[12]: https://themes.gohugo.io/
+[13]: https://themes.gohugo.io/gohugo-theme-ananke/
+[14]: https://docs.gitlab.com/ee/ci/#overview
+[15]: http://slackermedia.info/trashy
+[16]: https://opensource.com/sites/default/files/uploads/hugo-gitlab-cicd.jpg (GitLab processing your build)
+[17]: https://opensource.com/sites/default/files/uploads/hugo-demo-site.jpg (Previewing Hugo site)
+[18]: http://gitolite.com
+[19]: http://gitea.io
diff --git a/sources/tech/20190401 Meta Networks builds user security into its Network-as-a-Service.md b/sources/tech/20190401 Meta Networks builds user security into its Network-as-a-Service.md
new file mode 100644
index 0000000000..777108f639
--- /dev/null
+++ b/sources/tech/20190401 Meta Networks builds user security into its Network-as-a-Service.md
@@ -0,0 +1,87 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Meta Networks builds user security into its Network-as-a-Service)
+[#]: via: (https://www.networkworld.com/article/3385531/meta-networks-builds-user-security-into-its-network-as-a-service.html#tk.rss_all)
+[#]: author: (Linda Musthaler https://www.networkworld.com/author/Linda-Musthaler/)
+
+Meta Networks builds user security into its Network-as-a-Service
+======
+
+### Meta Networks has a unique approach to the security of its Network-as-a-Service. A tight security perimeter is built around every user and the specific resources each person needs to access.
+
+![MF3d / Getty Images][1]
+
+Network-as-a-Service (NaaS) is growing in popularity and availability for those organizations that don’t want to host their own LAN or WAN, or that want to complement or replace their traditional network with something far easier to manage.
+
+With NaaS, a service provider creates a multi-tenant wide area network comprised of geographically dispersed points of presence (PoPs) connected via high-speed Tier 1 carrier links that create the network backbone. The PoPs peer with cloud services to facilitate customer access to cloud applications such as SaaS offerings, as well as to infrastructure services from the likes of Amazon, Google and Microsoft. User organizations connect to the network from whatever facilities they have — data centers, branch offices, or even individual client devices — typically via SD-WAN appliances and/or VPNs.
+
+Numerous service providers now offer Network-as-a-Service. As the network backbone and the PoPs become more of a commodity, the providers are distinguishing themselves on other value-added services, such as integrated security or WAN optimization.
+
+**[ Also read:[What to consider when deploying a next generation firewall][2] | Get regularly scheduled insights: [Sign up for Network World newsletters][3]. ]**
+
+Ever since its launch about a year ago, [Meta Networks][4] has staked security as its primary value-add. What’s different about the Meta NaaS is the philosophy that the network is built around users, not around specific sites or offices. Meta Networks does this by building a software-defined perimeter (SDP) for each user, giving workers micro-segmented access to only the applications and network resources they need. The vendor was a little ahead of its time with SDP, but the market is starting to catch up. Companies are beginning to show interest in SDP as a VPN replacement or VPN alternative.
+
+Meta NaaS has a zero-trust architecture where each user is bound by an SDP. Each user has a unique, fixed identity no matter from where they connect to this network. The SDP security framework allows one-to-one network connections that are dynamically created on demand between the user and the specific resources they need to access. Everything else on the NaaS is invisible to the user. No access is possible unless it is explicitly granted, and it’s continuously verified at the packet level. This model effectively provides dynamically provisioned secure network segmentation.
+
+## SDP tightly controls access to specific resources
+
+This approach works very well when a company wants to securely connect employees, contractors, and external partners to specific resources on the network. For example, one of Meta Networks’ customers is Via Transportation, a New York-based company that has a ride-sharing platform. The company operates its own ride-sharing services in various cities in North America and Europe, and it licenses its technology to other transit systems around the world.
+
+Via’s operations are completely cloud-native, and so it has no legacy-style site-based WAN to connect its 400-plus employees and contractors to their cloud-based applications. Via’s partners, primarily transportation operators in different cities and countries, also need controlled access to specific portions of Via’s software platform to manage rideshares. Giving each group of users access to the applications they need — and _only_ to the ones they specifically need – was a challenge using a VPN. Using the Meta NaaS instead gives Via more granular control over who has what access.
+
+**[[Prepare to become a Certified Information Security Systems Professional with this comprehensive online course from PluralSight. Now offering a 10-day free trial!][5] ]**
+
+Via’s employees with managed devices connect to the Meta NaaS using client software on the device, and they are authenticated using Okta and a certificate. Contractors and customers with unmanaged devices use a browser-based access solution from Meta that doesn’t require installation or setup. New users can be on-boarded quickly and assigned granular access policies based on their role. Integration with Okta provides information that facilitates identity-based access policies. Once users connect to the network, they can see only the applications and network resources that their policy allows; everything else is invisible to them under the SDP architecture.
+
+For Via, there are several benefits to the Meta NaaS approach. First and foremost, the company doesn’t have to own or operate its own WAN infrastructure. Everything is a managed service located in the cloud — the same business model that Via itself espouses. Next, this solution scales easily to support the company’s growth. Meta’s security integrates with Via’s existing identity management system, so identities and access policies can be centrally managed. And finally, the software-defined perimeter hides resources from unauthorized users, creating security by obscurity.
+
+## Tightening security even further
+
+Meta Networks further tightens the security around the user by doing device posture checks — “NAC lite,” if you will. A customer can define the criteria that devices have to meet before they are allowed to connect to the NaaS. For example, the check could be whether a security certificate is installed, if a registry key is set to a specific value, or if anti-virus software is installed and running. It’s one more way to enforce company policies on network access.
+
+When end users use the browser-based method to connect to the Meta NaaS, all activity is recorded in a rich log so that everything can be audited, but also to set alerts and look for anomalies. This data can be exported to a SIEM if desired, but Meta has its own notification and alert system for security incidents.
+
+Meta Networks recently implemented some new features around management, including smart groups and support for the System for Cross-Domain Identity Management (SCIM) protocol. The smart groups feature provides the means to add an extra notation or tag to elements such as devices, services, network subnets or segments, and basically everything that’s in the system. These tags can then be applied to policy. For example, a customer could label some of their services as a production, staging, or development environment. Then a policy could be implemented to say that only sales people can access the production environment. Smart groups are just one more way to get even more granular about policy.
+
+The SCIM support makes on-boarding new users simple. SCIM is a protocol that is used to synchronize and provision users and identities from a third-party identity provider such as Okta, Azure AD, or OneLogin. A customer can use SCIM to provision all the users from the IdP into the Meta system, synchronize in real time the groups and attributes, and then use that information to build the access policies inside Meta NaaS.
+
+These and other security features fit into Meta Networks’ vision that the security perimeter goes with you no matter where you are, and the perimeter includes everything that was formerly delivered through the data center. It is delivered through the cloud to your client device with always-on security. It’s a broad approach to SDP and a unique approach to NaaS.
+
+**Reviews: 4 free, open-source network monitoring tools**
+
+ * [Icinga: Enterprise-grade, open-source network-monitoring that scales][6]
+ * [Nagios Core: Network-monitoring software with lots of plugins, steep learning curve][7]
+ * [Observium open-source network monitoring tool: Won’t run on Windows but has a great user interface][8]
+ * [Zabbix delivers effective no-frills network monitoring][9]
+
+
+
+Join the Network World communities on [Facebook][10] and [LinkedIn][11] to comment on topics that are top of mind.
+
+--------------------------------------------------------------------------------
+
+via: https://www.networkworld.com/article/3385531/meta-networks-builds-user-security-into-its-network-as-a-service.html#tk.rss_all
+
+作者:[Linda Musthaler][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.networkworld.com/author/Linda-Musthaler/
+[b]: https://github.com/lujun9972
+[1]: https://images.idgesg.net/images/article/2018/10/firewall_network-security_lock_padlock_cyber-security-100776989-large.jpg
+[2]: https://www.networkworld.com/article/3236448/lan-wan/what-to-consider-when-deploying-a-next-generation-firewall.html
+[3]: https://www.networkworld.com/newsletters/signup.html
+[4]: https://www.metanetworks.com/
+[5]: https://pluralsight.pxf.io/c/321564/424552/7490?u=https%3A%2F%2Fwww.pluralsight.com%2Fpaths%2Fcertified-information-systems-security-professional-cisspr
+[6]: https://www.networkworld.com/article/3273439/review-icinga-enterprise-grade-open-source-network-monitoring-that-scales.html?nsdr=true#nww-fsb
+[7]: https://www.networkworld.com/article/3304307/nagios-core-monitoring-software-lots-of-plugins-steep-learning-curve.html
+[8]: https://www.networkworld.com/article/3269279/review-observium-open-source-network-monitoring-won-t-run-on-windows-but-has-a-great-user-interface.html?nsdr=true#nww-fsb
+[9]: https://www.networkworld.com/article/3304253/zabbix-delivers-effective-no-frills-network-monitoring.html
+[10]: https://www.facebook.com/NetworkWorld/
+[11]: https://www.linkedin.com/company/network-world
diff --git a/sources/tech/20190401 Top Ten Reasons to Think Outside the Router -2- Simplify and Consolidate the WAN Edge.md b/sources/tech/20190401 Top Ten Reasons to Think Outside the Router -2- Simplify and Consolidate the WAN Edge.md
new file mode 100644
index 0000000000..8177390648
--- /dev/null
+++ b/sources/tech/20190401 Top Ten Reasons to Think Outside the Router -2- Simplify and Consolidate the WAN Edge.md
@@ -0,0 +1,103 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Top Ten Reasons to Think Outside the Router #2: Simplify and Consolidate the WAN Edge)
+[#]: via: (https://www.networkworld.com/article/3384928/top-ten-reasons-to-think-outside-the-router-2-simplify-and-consolidate-the-wan-edge.html#tk.rss_all)
+[#]: author: (Rami Rammaha https://www.networkworld.com/author/Rami-Rammaha/)
+
+Top Ten Reasons to Think Outside the Router #2: Simplify and Consolidate the WAN Edge
+======
+
+![istock][1]
+
+We’re now near reaching the end of our homage to the iconic David Letterman Top Ten List segment from his former Late Show, as [Silver Peak][2] counts down the *Top Ten Reasons to Think Outside the Router. *Click for the [#3][3], [#4][4], [#5][5], [#6][6], [#7][7], [#8][8], [#9][9] and [#10][10] reasons to retire traditional branch routers.
+
+_The #2 reason it’s time to retire branch routers: conventional router-centric WAN architectures are rigid and complex to manage!_
+
+### **Challenges of conventional WAN edge architecture**
+
+A conventional WAN edge architecture consists of a disparate array of devices, including routers, firewalls, WAN optimization appliances, wireless controllers and so on. This architecture was born in the era when applications were hosted exclusively in the data center. With this model, deploying new applications or provisioning new policies or making policy changes has become an arduous and time-consuming task. Configuration, deployment and management requires specialized on-premise IT expertise to manually program and configure each device with its own management interface, often using an arcane CLI. This process has hit the wall in the cloud era proving too slow, complex, error-prone, costly and inefficient.
+
+As cloud-first enterprises increasingly migrate applications and infrastructure to the cloud, the traditional WAN architecture is no longer efficient. IT is now faced with a new set of challenges when it comes to connecting users securely and directly to the applications that run their businesses:
+
+ * How do you manage and consistently apply QoS and security policies across the distributed enterprise?
+ * How do you intelligently automate traffic steering across multiple WAN transport services based on application type and unique requirements?
+ * How do you deliver the highest quality of experiences to users when running applications over broadband, especially voice and video?
+ * How do you quickly respond to continuously changing business requirements?
+
+
+
+These are just some of the new challenges facing IT teams in the cloud era. To be successful, enterprises will need to shift toward a business-first networking model where top-down business intent drives how the network behaves. And they would be well served to deploy a business-driven unified [SD-WAN][11] edge platform to transform their networks from a business constraint to a business accelerant.
+
+### **Shifting toward a business-driven WAN edge platform**
+
+A business-driven WAN edge platform is designed to enable enterprises to realize the full transformation promise of the cloud. It is a model where top-down business intent is the driver, not bottoms-up technology constraints. It’s outcome oriented, utilizing automation, artificial intelligence (AI) and machine learning to get smarter every day. Through this continuous adaptation, and the ability to improve the performance of underlying transport and applications, it delivers the highest quality of experience to end users. This is in stark contrast to the router-centric model where application policies must be shoe-horned to fit within the constraints of the network. A business-driven, top-down approach continuously stays in compliance with business intent and centrally defined security policies.
+
+### **A unified platform for simplifying and consolidating the WAN Edge**
+
+Achieving a business-driven architecture requires a unified platform, designed from the ground up as one system, uniting [SD-WAN][12], [firewall][13], [segmentation][14], [routing][15], [WAN optimization][16], application visibility and control in a single-platform. Furthermore, it requires [centralized orchestration][17] with complete observability of the entire wide area network through a single pane of glass.
+
+The use case “[Simplifying WAN Architecture][18]” describes in detail key capabilities of the Silver Peak [Unity EdgeConnect™][19] SD-WAN edge platform. It illustrates how EdgeConnect enables enterprises to simplify branch office WAN edge infrastructure and streamline deployment, configuration and ongoing management.
+
+![][20]
+
+### **Business and IT outcomes of a business-driven SD-WAN**
+
+ * Accelerates deployment, leveraging consistent hardware, software, cloud delivery models
+ * Saves up to 40 percent on hardware, software, installation, management and maintenance costs when replacing traditional routers
+ * Protects existing investment in security through simplified service chaining with our broadest ecosystem partners: [Check Point][21], [Forcepoint][22], [McAfee][23], [OPAQ][24], [Palo Alto Networks][25], [Symantec][26] and [Zscaler][27].
+ * Reduces foot print by 75 percent as it unifies network functions into a single platform
+ * Saves more than 50 percent on WAN optimization costs by selectively applying it when and where is needed on an application-by-application basis
+ * Accelerates time-to-resolution of application or network performance bottlenecks from days to minutes with simple, visual application and WAN analytics
+
+
+
+Calculate your [ROI][28] today and learn why the time is now to [think outside the router][29] and deploy the business-driven Silver Peak EdgeConnect SD-WAN edge platform!
+
+![][30]
+
+--------------------------------------------------------------------------------
+
+via: https://www.networkworld.com/article/3384928/top-ten-reasons-to-think-outside-the-router-2-simplify-and-consolidate-the-wan-edge.html#tk.rss_all
+
+作者:[Rami Rammaha][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.networkworld.com/author/Rami-Rammaha/
+[b]: https://github.com/lujun9972
+[1]: https://images.idgesg.net/images/article/2019/04/silverpeak_main-100792490-large.jpg
+[2]: https://www.silver-peak.com/why-silver-peak
+[3]: http://blog.silver-peak.com/think-outside-the-router-reason-3-mpls-contract-renewal
+[4]: http://blog.silver-peak.com/top-ten-reasons-to-think-outside-the-router-4-broadband-is-used-only-for-failover
+[5]: http://blog.silver-peak.com/think-outside-the-router-reason-5-manual-cli-based-configuration-and-management
+[6]: http://blog.silver-peak.com/https-blog-silver-peak-com-think-outside-the-router-reason-6
+[7]: http://blog.silver-peak.com/think-outside-the-router-reason-7-exorbitant-router-support-and-maintenance-costs
+[8]: http://blog.silver-peak.com/think-outside-the-router-reason-8-garbled-voip-pixelated-video
+[9]: http://blog.silver-peak.com/think-outside-router-reason-9-sub-par-saas-performance
+[10]: http://blog.silver-peak.com/think-outside-router-reason-10-its-getting-cloudy
+[11]: https://www.silver-peak.com/sd-wan/sd-wan-explained
+[12]: https://www.silver-peak.com/sd-wan
+[13]: https://www.silver-peak.com/products/unity-edge-connect/orchestrated-security-policies
+[14]: https://www.silver-peak.com/resource-center/centrally-orchestrated-end-end-segmentation
+[15]: https://www.silver-peak.com/products/unity-edge-connect/bgp-routing
+[16]: https://www.silver-peak.com/products/unity-boost
+[17]: https://www.silver-peak.com/products/unity-orchestrator
+[18]: https://www.silver-peak.com/use-cases/simplifying-wan-architecture
+[19]: https://www.silver-peak.com/products/unity-edge-connect
+[20]: https://images.idgesg.net/images/article/2019/04/sp_linkthrough-copy-100792505-large.jpg
+[21]: https://www.silver-peak.com/resource-center/check-point-silver-peak-securing-internet-sd-wan
+[22]: https://www.silver-peak.com/company/tech-partners/forcepoint
+[23]: https://www.silver-peak.com/company/tech-partners/mcafee
+[24]: https://www.silver-peak.com/company/tech-partners/opaq-networks
+[25]: https://www.silver-peak.com/resource-center/palo-alto-networks-and-silver-peak
+[26]: https://www.silver-peak.com/company/tech-partners/symantec
+[27]: https://www.silver-peak.com/resource-center/zscaler-and-silver-peak-solution-brief
+[28]: https://www.silver-peak.com/sd-wan-interactive-roi-calculator
+[29]: https://www.silver-peak.com/think-outside-router
+[30]: https://images.idgesg.net/images/article/2019/04/roi-100792506-large.jpg
diff --git a/sources/tech/20190402 3 Essentials for Achieving Resiliency at the Edge.md b/sources/tech/20190402 3 Essentials for Achieving Resiliency at the Edge.md
new file mode 100644
index 0000000000..38cbc70e94
--- /dev/null
+++ b/sources/tech/20190402 3 Essentials for Achieving Resiliency at the Edge.md
@@ -0,0 +1,83 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (3 Essentials for Achieving Resiliency at the Edge)
+[#]: via: (https://www.networkworld.com/article/3386438/3-essentials-for-achieving-resiliency-at-the-edge.html#tk.rss_all)
+[#]: author: (Anne Taylor https://www.networkworld.com/author/Anne-Taylor/)
+
+3 Essentials for Achieving Resiliency at the Edge
+======
+
+### Edge computing requires different thinking and management to ensure the always-on availability that users have come to demand.
+
+![iStock][1]
+
+> “The IT industry has done a good job of making robust data centers that are highly manageable, highly secure, with redundant systems,” [says Kevin Brown][2], SVP Innovation and CTO for Schneider Electric’s Secure Power Division.
+
+However, he continues, companies then connect these data centers to messy edge closets and server rooms, which over time have become “micro mission-critical data centers” in their own right — making system availability vital. If not designed and managed correctly, the situation can be disastrous if users cannot connect to business-critical applications.
+
+To avoid unacceptable downtime, companies should incorporate three essential ingredients into their edge computing deployments: remote management, physical security, and rapid deployments.
+
+**Remote management**
+
+Depending on the company’s size, staff could be managing several — or many multiple — edge sites. Not only is this time consuming and costly, it’s also complex, especially if protocols differ from site to site.
+
+While some organizations might deploy traditional remote monitoring technology to manage these sites, it’s important to note these tools: don’t provide real-time status updates; are largely reactionary rather than proactive; and are sometimes limited in terms of data output.
+
+Coupled with the need to overcome these limitations, the economics for managing edge sites necessitate that organizations consider a digital, or cloud-based, solution. In addition to cost savings, these platforms provide:
+
+ * Simplification in monitoring across edge sites
+ * Real-time visibility, right down to any device on the network
+ * Predictive analytics, including data-driven intelligence and recommendations to ensure proactive service delivery
+
+
+
+**Physical security**
+
+Small, local edge computing sites are often situated within larger corporate or wide-open spaces, sometimes in highly accessible, shared offices and public areas. And sometimes they’re set up on-the-fly for a time-sensitive project.
+
+However, when there is no dedicated location and open racks are unsecured, the risks of malicious and accidental incidents escalate.
+
+To prevent unauthorized access to IT equipment at edge computing sites, proper physical security is critical and requires:
+
+ * Physical space monitoring, with environmental sensors for temperature and humidity
+ * Access control, with biometric sensors as an option
+ * Audio and video surveillance and monitoring with recording
+ * If possible, install IT equipment within a secure enclosure
+
+
+
+**Rapid deployments**
+
+The [benefits of edge computing][3] are significant, especially the ability to bring bandwidth-intensive computing closer to the user, which leads to faster speed to market and greater productivity.
+
+Create a holistic plan that will enable the company to quickly deploy edge sites, while ensuring resiliency and reliability. That means having a standardized, repeatable process including:
+
+ * Pre-configured, integrated equipment that combines server, storage, networking, and software in a single enclosure — a prefabricated micro data center, if you will
+ * Designs that specify supporting racks, UPSs, PDUs, cable management, airflow practices, and cooling systems
+
+
+
+These best practices as well as a balanced, systematic approach to edge computing deployments will ensure the always-on availability that today’s employees and users have come to expect.
+
+Learn how to enable resiliency within your edge computing deployment at [APC.com][4].
+
+--------------------------------------------------------------------------------
+
+via: https://www.networkworld.com/article/3386438/3-essentials-for-achieving-resiliency-at-the-edge.html#tk.rss_all
+
+作者:[Anne Taylor][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.networkworld.com/author/Anne-Taylor/
+[b]: https://github.com/lujun9972
+[1]: https://images.idgesg.net/images/article/2019/04/istock-900882382-100792635-large.jpg
+[2]: https://www.youtube.com/watch?v=IfsCTFSH6Jc
+[3]: https://www.networkworld.com/article/3342455/how-edge-computing-will-bring-business-to-the-next-level.html
+[4]: https://www.apc.com/us/en/solutions/business-solutions/edge-computing.jsp
diff --git a/sources/tech/20190402 Announcing the release of Fedora 30 Beta.md b/sources/tech/20190402 Announcing the release of Fedora 30 Beta.md
new file mode 100644
index 0000000000..19b5926e27
--- /dev/null
+++ b/sources/tech/20190402 Announcing the release of Fedora 30 Beta.md
@@ -0,0 +1,90 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Announcing the release of Fedora 30 Beta)
+[#]: via: (https://fedoramagazine.org/announcing-the-release-of-fedora-30-beta/)
+[#]: author: (Ben Cotton https://fedoramagazine.org/author/bcotton/)
+
+Announcing the release of Fedora 30 Beta
+======
+
+![][1]
+
+The Fedora Project is pleased to announce the immediate availability of Fedora 30 Beta, the next big step on our journey to the exciting Fedora 30 release.
+
+Download the prerelease from our Get Fedora site:
+
+ * [Get Fedora 30 Beta Workstation][2]
+ * [Get Fedora 30 Beta Server][3]
+ * [Get Fedora 30 Beta Silverblue][4]
+
+
+
+Or, check out one of our popular variants, including KDE Plasma, Xfce, and other desktop environments, as well as images for ARM devices like the Raspberry Pi 2 and 3:
+
+ * [Get Fedora 30 Beta Spins][5]
+ * [Get Fedora 30 Beta Labs][6]
+ * [Get Fedora 30 Beta ARM][7]
+
+
+
+### Beta Release Highlights
+
+#### New desktop environment options
+
+Fedora 30 Beta includes two new options for desktop environment. [DeepinDE][8] and [Pantheon Desktop][9] join GNOME, KDE Plasma, Xfce, and others as options for users to customize their Fedora experience.
+
+#### DNF performance improvements
+
+All dnf repository metadata for Fedora 30 Beta is compressed with the zchunk format in addition to xz or gzip. zchunk is a new compression format designed to allow for highly efficient deltas. When Fedora’s metadata is compressed using zchunk, dnf will download only the differences between any earlier copies of the metadata and the current version.
+
+#### GNOME 3.32
+
+Fedora 30 Workstation Beta includes GNOME 3.32, the latest version of the popular desktop environment. GNOME 3.32 features updated visual style, including the user interface, the icons, and the desktop itself. For a full list of GNOME 3.32 highlights, see the [release notes][10].
+
+#### Other updates
+
+Fedora 30 Beta also includes updated versions of many popular packages like Golang, the Bash shell, the GNU C Library, Python, and Perl. For a full list, see the [Change set][11] on the Fedora Wiki. In addition, many Python 2 packages are removed in preparation for Python 2 end-of-life on 2020-01-01.
+
+#### Testing needed
+
+Since this is a Beta release, we expect that you may encounter bugs or missing features. To report issues encountered during testing, contact the Fedora QA team via the mailing list or in #fedora-qa on Freenode. As testing progresses, common issues are tracked on the [Common F30 Bugs page][12].
+
+For tips on reporting a bug effectively, read [how to file a bug][13].
+
+#### What is the Beta Release?
+
+A Beta release is code-complete and bears a very strong resemblance to the final release. If you take the time to download and try out the Beta, you can check and make sure the things that are important to you are working. Every bug you find and report doesn’t just help you, it improves the experience of millions of Fedora users worldwide! Together, we can make Fedora rock-solid. We have a culture of coordinating new features and pushing fixes upstream as much as we can. Your feedback improves not only Fedora, but Linux and free software as a whole.
+
+#### More information
+
+For more detailed information about what’s new on Fedora 30 Beta release, you can consult the [Fedora 30 Change set][11]. It contains more technical information about the new packages and improvements shipped with this release.
+
+--------------------------------------------------------------------------------
+
+via: https://fedoramagazine.org/announcing-the-release-of-fedora-30-beta/
+
+作者:[Ben Cotton][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://fedoramagazine.org/author/bcotton/
+[b]: https://github.com/lujun9972
+[1]: https://fedoramagazine.org/wp-content/uploads/2019/03/f30-beta-816x345.jpg
+[2]: https://getfedora.org/workstation/prerelease/
+[3]: https://getfedora.org/server/prerelease/
+[4]: https://silverblue.fedoraproject.org/download
+[5]: https://spins.fedoraproject.org/prerelease
+[6]: https://labs.fedoraproject.org/prerelease
+[7]: https://arm.fedoraproject.org/prerelease
+[8]: https://www.deepin.org/en/dde/
+[9]: https://www.fosslinux.com/4652/pantheon-everything-you-need-to-know-about-the-elementary-os-desktop.htm
+[10]: https://help.gnome.org/misc/release-notes/3.32/
+[11]: https://fedoraproject.org/wiki/Releases/30/ChangeSet
+[12]: https://fedoraproject.org/wiki/Common_F30_bugs
+[13]: https://docs.fedoraproject.org/en-US/quick-docs/howto-file-a-bug/
diff --git a/sources/tech/20190402 Automate password resets with PWM.md b/sources/tech/20190402 Automate password resets with PWM.md
new file mode 100644
index 0000000000..0bc7012c21
--- /dev/null
+++ b/sources/tech/20190402 Automate password resets with PWM.md
@@ -0,0 +1,94 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Automate password resets with PWM)
+[#]: via: (https://opensource.com/article/19/4/automate-password-resets-pwm)
+[#]: author: (James Mawson https://opensource.com/users/dxmjames)
+
+Automate password resets with PWM
+======
+PWM puts responsibility for password resets in users' hands, freeing IT
+for more pressing tasks.
+![Password][1]
+
+One of the things that can be "death by a thousand cuts" for any IT team's sanity and patience is constantly being asked to reset passwords.
+
+The best way we've found to handle this is to ditch your hashing algorithms and store your passwords in plaintext so that your users can retrieve them at any time.
+
+Ha! I am, of course, kidding. That's a terrible idea.
+
+When your users forget their passwords, you'll still need to reset them. But is there a way to break free from the monotonous, repetitive task of doing it manually?
+
+### PWM puts password resets in users' hands
+
+[PWM][2] is an open source ([GPLv2][3]) [JavaServer Pages][4] application that provides a webpage where users can submit their own password resets. If certain conditions are met—which you can configure—PWM will send a password reset instruction to whichever directory service you've connected it to.
+
+![PWM password reset screen][5]
+
+One thing that's great about PWM is it's very easy to add it to an existing network. If you're largely happy with what you've already built—just sick of processing password requests manually—you can just throw PWM into the mix.
+
+PWM works with any implementation of [LDAP][6] and written to run on [Apache Tomcat][7]. Once you get it up and running, you can administer it through a browser-based dashboard.
+
+### Why PWM is better than Microsoft SSPR
+
+As much as our team prefers open source, we still have to deal with Windows networks. Of course, Microsoft has its own password-reset tool, called Self Service Password Reset (SSPR). But I prefer PWM, and not just because of a general preference for open source. I believe PWM is better for my use case for the following reasons:
+
+ * **SSPR has a very complex licensing system**. You need different products depending on what servers you're running and whose metal they're running on. This is a constraint on your flexibility and a whole extra pain in the neck when it's time to move to new architecture. For [the busy admin who wants to go home on time][8], it's extra bureaucracy to get the purchase approved. PWM just works on what it's configured to work on at no cost.
+
+ * **PWM is not just for Windows**. It works with any kind of LDAP server. So, it's one less part you need to worry about if you ever stop using Windows for a certain role. It also means that, once you've gotten the hang of it, you have something in your bag of tricks that you can use in many different environments.
+
+ * **PWM is easy to install**. If you know how to install Linux as a virtual machine—and, let's face it, if you're running a network, you probably do—then you're already most of the way there.
+
+
+
+
+PWM can run on Windows, but we prefer to include it in a Windows network by running it on a Linux virtual machine, [for example, Ubuntu Server 16.04][9].
+
+### Risks and rewards of automation
+
+Password resets are an attack vector, so be thoughtful about where and how you use PWM. Automating your password resets can mean an attacker is potentially just one unencrypted email connection away from resetting a password.
+
+To some extent, automating your password resets trades a bit of security for some convenience. So maybe this isn't the right way to handle C-suite user accounts that approve large payments.
+
+On the other hand, manual resets are not 100% secure either—they can be gamed with targeted attacks like spear phishing and social engineering. It's much easier to fall for these scams if your team gets frequent reset requests and is sick of dealing with them. You may benefit from automating the bulk of lower-risk requests so you can focus on protecting the higher-risk accounts manually; this is possible given the time you can save using PWM.
+
+Some of the risks associated with shifting resets to users can be mitigated with PWM's built-in features, such as insisting users verify their password reset request by email or SMS. You can also make PWM accessible only on the intranet.
+
+![PWM configuration options][10]
+
+PWM doesn't store any passwords, so that's one less headache. It does, however, store answers to users' secret questions in a MySQL database that can be configured to be stored locally or on a separate server, depending on your preference.
+
+There are a ton of ways to make PWM look and feel like a polished part of your team's infrastructure. With a little bit of CSS know-how, you can customize the user interface for your business' branding. There are also more options for implementation than you can shake a stick at.
+
+### Wrapping up
+
+PWM is a great open source project, it's actively developed, and it has a helpful online community. It's a great alternative to Microsoft's Azure SSPR solution for small to midsized businesses that have to keep a tight grip on the purse strings, and it slots in neatly to any existing Active Directory infrastructure. It also saves IT's time by outsourcing this mundane task to users.
+
+I advise every network admin to dive in and have a look at the cool stuff PWM offers. Check out the [getting started resources][11] and reach out to the community if you have any questions.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/4/automate-password-resets-pwm
+
+作者:[James Mawson][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/dxmjames
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/password.jpg?itok=ec6z6YgZ (Password)
+[2]: https://github.com/pwm-project/pwm
+[3]: https://github.com/pwm-project/pwm/blob/master/LICENSE
+[4]: https://www.oracle.com/technetwork/java/index-jsp-138231.html
+[5]: https://opensource.com/sites/default/files/uploads/pwm_password-reset.png (PWM password reset screen)
+[6]: https://opensource.com/business/14/5/top-4-open-source-ldap-implementations
+[7]: http://tomcat.apache.org/
+[8]: https://opensource.com/article/18/7/tools-admin
+[9]: https://blog.dxmtechsupport.com.au/adding-pwm-password-reset-tool-to-windows-network/
+[10]: https://opensource.com/sites/default/files/uploads/pwm-configuration.png (PWM configuration options)
+[11]: https://github.com/pwm-project/pwm#links
diff --git a/sources/tech/20190402 How to Install and Configure Plex on Ubuntu Linux.md b/sources/tech/20190402 How to Install and Configure Plex on Ubuntu Linux.md
new file mode 100644
index 0000000000..8b5010a2ec
--- /dev/null
+++ b/sources/tech/20190402 How to Install and Configure Plex on Ubuntu Linux.md
@@ -0,0 +1,202 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (How to Install and Configure Plex on Ubuntu Linux)
+[#]: via: (https://itsfoss.com/install-plex-ubuntu)
+[#]: author: (Chinmay https://itsfoss.com/author/chinmay/)
+
+How to Install and Configure Plex on Ubuntu Linux
+======
+
+When you are a media hog and have a big collection of movies, photos or music, the below capabilities would be very handy.
+
+ * Share media with family and other people.
+ * Access media from different devices and platforms.
+
+
+
+Plex ticks all of those boxes and more. Plex is a client-server media player system with additional features. Plex supports a wide array of platforms, both for the server and the player. No wonder it is considered one of the [best media servers for Linux][1].
+
+Note: Plex is not a completely open source media player. We have covered it because this is one of the frequently [requested tutorial][2].
+
+### Install Plex on Ubuntu
+
+For this guide I am installing Plex on Elementary OS, an Ubuntu based distribution. You can still follow along if you are installing it on a headless Linux machine.
+
+Go to the Plex [downloads][3] page, select Ubuntu 64-bit (I would not recommend installing it on a 32-bit CPU) and download the .deb file.
+
+![][4]
+
+[Download Plex][3]
+
+You can [install the .deb file][5] by just clicking on the package. If it does not work, you can use an installer like **Eddy** or **[GDebi][6].**
+
+You can also install it via the terminal using dpkg as shown below.
+
+Install Plex on a headless Linux system
+
+For a [headless system][7], you can use **wget** to download the .deb package. This example uses the current link for Ubuntu, at the time of writing. Be sure to use the up-to-date version supplied on the Plex website.
+
+```
+wget https://downloads.plex.tv/plex-media-server-new/1.15.1.791-8bec0f76c/debian/plexmediaserver_1.15.1.791-8bec0f76c_amd64.deb
+```
+
+The above command downloads the 64-bit .deb package. Once downloaded install the package using the following command.
+
+```
+dpkg -i plexmediaserver*.deb
+```
+
+Enable version upgrades for Plex
+
+The .deb installation does create an entry in sources.d, but [repository updates][8] are not enabled by default and the contents of _plexmediaserver.list_ are commented out. This means that if there is a new Plex version available, your system will not be able to update your Plex install.
+
+To enable repository updates you can either remove the # from the line starting with deb or run the following commands.
+
+```
+echo deb https://downloads.plex.tv/repo/deb public main | sudo tee /etc/apt/sources.list.d/plexmediaserver.list
+```
+
+The above command updates the entry in sources.d directory.
+
+We also need to add Plex’s public key to facilitate secure and safe downloads. You can try running the command below, unfortunately this **did not work for me** and the [GPG][9] key was not added.
+
+```
+curl https://downloads.plex.tv/plex-keys/PlexSign.key | sudo apt-key add -
+```
+
+To fix this issue I found out the key hash for from the error message after running _sudo apt-get update._
+
+![][10]
+
+```
+97203C7B3ADCA79D
+```
+
+The above hash can be used to add the key from the key-server. Run the below commands to add the key.
+
+```
+gpg --keyserver https://downloads.plex.tv/plex-keys/PlexSign.key --recv-keys 97203C7B3ADCA79D
+```
+
+```
+gpg --export --armor 97203C7B3ADCA79D|sudo apt-key add -
+```
+
+You should see an **OK** once the key is added.
+
+Run the below command to verify that the repository is added to the sources list successfully.
+
+```
+sudo apt update
+```
+
+To update Plex to the newest version available on the repository, run the below [apt-get command][11].
+
+```
+sudo apt-get --only-upgrade install plexmediaserver
+```
+
+Once installed the Plex service automatically starts running. You can check if its running by running the this command in a terminal.
+
+```
+systemctl status plexmediaserver
+```
+
+If the service is running properly you should see something like this.
+
+![Check the status of Plex Server][12]
+
+### Configuring Plex as a Media Server
+
+The Plex server is accessible on the ports 32400 and 32401. Navigate to **localhost:32400** or **localhost:32401** using a browser. You should replace the ‘localhost’ with the IP address of the machine running Plex server if you are going headless.
+
+The first time you are required to sign up or log in to your Plex account.
+
+![Plex Login Page][13]
+
+Now you can go ahead and give a friendly name to your Plex Server. This name will be used to identify the server over the network. You can also have multiple Plex servers identified by different names on the same network.
+
+![Plex Server Setup][14]
+
+Now it is finally time to add all your collections to the Plex library. Here your collections will be automatically get indexed and organized.
+
+You can click the add library button to add all your collections.
+
+![Add Media Library][15]
+
+![][16]
+
+Navigate to the location of the media you want to add to Plex .
+
+![][17]
+
+You can add multiple folders and different types of media.
+
+When you are done, you are taken to a very slick looking Plex UI. You can already see the contents of your libraries showing up on the home screen. It also automatically selects a thumbnail and also fills the metadata.
+
+![][18]
+
+You can head over to the settings and configure some of the settings. You can create new users( **only with Plex Pass** ), adjust the transcoding settings set scheduled library updates and more.
+
+If you have a public IP assigned to your router by the ISP you can also enable Remote Access. This means that you can be traveling and still access your libraries at home, considering you have your Plex server running all the time.
+
+Now you are all set up and ready, but how do you access your media? Yes you can access through your browser but Plex has a presence in almost all platforms you can think of including Android Auto.
+
+### Accessing Your Media and Plex Pass
+
+You can access you media either by using the web browser (the same address you used earlier) or Plex’s suite of apps. The web browser experience is pretty good on computers and can be better on phones.
+
+Plex apps provide a much better experience. But, the iOS and Android apps need to be activated with a [Plex Pass][19]. Without activation you are limited to 1 minute of video playback and images are watermarked.
+
+Plex Pass is a premium subscription service which activates the mobile apps and enables more features. You can also individually activate your apps tied to a particular phone for a cheaper price. You can also create multiple users and set permissions with the Plex Pass which is a very handy feature.
+
+You can check out all the benefits of Plex Pass [here][19].
+
+_Note: Plex Meida Player is free on all platforms other than Android and iOS App._
+
+**Conclusion**
+
+That’s about all things you need to know for the first time configuration, go ahead and explore the Plex UI, it also gives you access to free online content like podcasts and music through Tidal.
+
+There are alternatives to Plex like [Jellyfin][20] which is free but native apps are in beta and on road to be published on the App stores.You can also use a NAS with any of the freely available media centers like Kodi, OpenELEC or even VLC media player.
+
+Here is an article listing the [best Linux media servers.][1]
+
+Let us know your experience with Plex and what you use for your media sharing needs.
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/install-plex-ubuntu
+
+作者:[Chinmay][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/chinmay/
+[b]: https://github.com/lujun9972
+[1]: https://itsfoss.com/best-linux-media-server/
+[2]: https://itsfoss.com/request-tutorial/
+[3]: https://www.plex.tv/media-server-downloads/
+[4]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/downloads-plex.png?ssl=1
+[5]: https://itsfoss.com/install-deb-files-ubuntu/
+[6]: https://itsfoss.com/gdebi-default-ubuntu-software-center/
+[7]: https://www.lions-wing.net/lessons/servers/home-server.html
+[8]: https://itsfoss.com/ubuntu-repositories/
+[9]: https://www.gnupg.org/
+[10]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/03/Screenshot-from-2019-03-26-07-21-05-1.png?ssl=1
+[11]: https://itsfoss.com/apt-get-linux-guide/
+[12]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/check-plex-service.png?ssl=1
+[13]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/03/plex-home-page.png?ssl=1
+[14]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/Plex-server-setup.png?ssl=1
+[15]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/03/add-library.png?ssl=1
+[16]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/add-plex-library.png?ssl=1
+[17]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/03/add-plex-folder.png?ssl=1
+[18]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/03/Screenshot-from-2019-03-17-22-27-56.png?ssl=1
+[19]: https://www.plex.tv/plex-pass/
+[20]: https://jellyfin.readthedocs.io/en/latest/
diff --git a/sources/tech/20190402 Intel-s Agilex FPGA family targets data-intensive workloads.md b/sources/tech/20190402 Intel-s Agilex FPGA family targets data-intensive workloads.md
new file mode 100644
index 0000000000..686a2be6a4
--- /dev/null
+++ b/sources/tech/20190402 Intel-s Agilex FPGA family targets data-intensive workloads.md
@@ -0,0 +1,103 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Intel's Agilex FPGA family targets data-intensive workloads)
+[#]: via: (https://www.networkworld.com/article/3386158/intels-agilex-fpga-family-targets-data-intensive-workloads.html#tk.rss_all)
+[#]: author: (Marc Ferranti https://www.networkworld.com)
+
+Intel's Agilex FPGA family targets data-intensive workloads
+======
+Agilex processors are the first Intel FPGAs to use 10nm manufacturing, achieving a performance boost for AI, financial and IoT workloads
+![Intel][1]
+
+After teasing out details about the technology for a year and half under the code name Falcon Mesa, Intel has unveiled the Agilex family of FPGAs, aimed at data-center and network applications that are processing increasing amounts of data for AI, financial, database and IoT workloads.
+
+The Agilex family, expected to start appearing in devices in the third quarter, is part of a new wave of more easily programmable FPGAs that is beginning to take an increasingly central place in computing as data centers are called on to handle an explosion of data.
+
+**Learn about edge networking**
+
+ * [How edge networking and IoT will reshape data centers][2]
+ * [Edge computing best practices][3]
+ * [How edge computing can help secure the IoT][4]
+
+
+
+FPGAs, or field programmable gate arrays, are built around around a matrix of configurable logic blocks (CLBs) linked via programmable interconnects that can be programmed after manufacturing – and even reprogrammed after being deployed in devices – to run algorithms written for specific workloads. They can thus be more efficient on a performance-per-watt basis than general-purpose CPUs, even while driving higher performance.
+
+### Accelerated computing takes center stage
+
+CPUs can be packaged with FPGAs, offloading specific tasks to them and enhancing overall data-center and network efficiency. The concept, known as accelerated computing, is increasingly viewed by data-center and network managers as a cost-efficient way to handle increasing data and network traffic.
+
+"This data is creating what I call an innovation race across from the edge to the network to the cloud," said Dan McNamara, general manager of the Programmable Solutions Group (PSG) at Intel. "We believe that we’re in the largest adoption phase for FPGAs in our history."
+
+The Agilex family is the first line of FPGAs developed from the ground up in the wake of [Intel’s $16.7 billion 2015 acquisition of Altera.][5] It's the first FPGA line to be made with Intel's 10nm manufacturing process, which adds billions of transistors to the FPGAs compared to earlier generations. Along with Intel's second-generation HyperFlex architecture, it helps give Agilex 40 percent higher performance than the company's current high-end FPGA family, the Stratix 10 line, Intel says.
+
+HyperFlex architecture includes additional registers – places on a processor that temporarily hold data – called Hyper-Registers, located everywhere throughout the core fabric to enhance bandwidth as well as area and power efficiency.
+
+**[[Take this mobile device management course from PluralSight and learn how to secure devices in your company without degrading the user experience.][6] ]**
+
+### Memory coherency is key
+
+Agilex FPGAs are also the first processors to support [Compute Express Link (CXL), a high-speed interconnect][7] designed to maintain memory coherency among CPUs like Intel's second-generation Xeon Scalable processors and purpose-built accelerators like FPGAs and GPUs. It ensures that different processors don't clash when trying to write to the same memory space, essentially allowing CPUs and accelerators to share memory.
+
+"By having this CXL bus you can actually write applications that will use all the real memory so what that does is it simplifies the programming model in large memory workloads," said Patrick Moorhead, founder and principal at Moor Insights & Strategy.
+
+The ability to integrate FPGAs, other accelerators and CPUs is key to Intel's accelerated computing strategy for the data center. Intel calls it "any to any" integration.
+
+### 'Any-to-any' integration is crucial for the data center
+
+The Agilex family uses embedded multi-die interconnect bridge (EMIB) packaging technology to integrate, for example, Xeon Scalable CPUs or ASICs – special-function processors that are not reprogammable – alongside FPGA fabric. Intel last year bought eASIC, a maker of structured ASICs, which the company describes as an intermediary technology between FPGAs and ASICs. The idea is to deliver products that offer a mix of functionality to achieve optimal cost and performance efficiency for data-intensive workloads.
+
+Intel underscored the importance of processor integration for the data center by unveiling Agilex on Tuesday at its Data Centric Innovation Day in San Francisco, when it also discussed plans for its second generation Xeon Scalable line.
+
+Traditionally, FPGAs were mainly used in embedded devices, communications equipment and in hyperscale data centers, and not sold directly to enterprises. But several products based on Intel Stratix 10 and Arria 10 FPGAs are now being sold to enterprises, including in Dell EMC and Fujitsu off-the-shelf servers.
+
+Making FPGAs easier to program is key to making them more mainstream. "What's really, really important is the software story," said Intel's McNamara. "None of this really matters if we can't generate more users and make it easier to program FPGA's."
+
+Intel's Quartus Prime design tool will be available for Agilex hardware developers but the real breakthrough for FPGA software development will be Intel's OneAPI concept, announced in December.
+
+"OneAPI is is an effort by Intel to be able to have programmers write to OneAPI and OneAPI determines the best piece of silicon to run it on," Moorhead said. "I lovingly refer to it as the magic API; this is the big play I always thought Intel was gonna be working on ever since it bought Altera. The first thing I expect to happen are the big enterprise developers like SAP and Oracle to write to Agilex, then smaller ISVs, then custom enterprise applications."
+
+![][8]
+
+Intel plans three different product lines in the Agilex family – from low to high end, the F-, I- and M-series – aimed at different applications and processing requirements. The Agilex family, depending on the series, supports PCIe (peripheral component interconnect express) Gen 5, and different types of memory including DDR5 RAM, HBM (high-bandwidth memory) and Optane DC persistent memory. It will offer up to 112G bps transceiver data rates and a greater mix of arithmetic precision for AI, including bfloat16 number format.
+
+In addition to accelerating server-based workloads like AI, genomics, financial and database applications, FPGAs play an important part in networking. Their cost-per-watt efficiency makes them suitable for edge networks, IoT devices as well as deep packet inspection. In addition, they can be used in 5G base stations; as 5G standards evolve, they can be reprogrammed. Once 5G standards are hardened, the "any to any" integration will allow processing to be offloaded to special-purpose ASICs for ultimate cost efficiency.
+
+### Agilex will compete with Xylinx's ACAPs
+
+Agilex will likely vie with Xylinx's upcoming [Versal product family][9], due out in devices in the second half of the year. Xylinx competed for years with Altera in the FPGA market, and with Versal has introduced what it says is [a new product category, the Adaptive Compute Acceleration Platform (ACAP)][10]. Versal ACAPs will be made using TSMC's 7nm manufacturing process technology, though because Intel achieves high transistor density, the number of transistors offered by Agilex and Versal chips will likely be equivalent, noted Moorhead.
+
+Though Agilex and Versal differ in details, the essential pitch is similar: the programmable processors offer a wider variety of programming options than prior generations of FPGA, work with CPUs to accelerate data-intensive workloads, and offer memory coherence. Rather than CXL, though, the Versal family uses the cache coherent interconnect for accelerators (CCIX) interconnect fabric.
+
+Neither Intel or Xylinx for the moment have announced OEM support for Agilex or Versal products that will be sold to the enterprise, but that should change as the year progresses.
+
+Join the Network World communities on [Facebook][11] and [LinkedIn][12] to comment on topics that are top of mind.
+
+--------------------------------------------------------------------------------
+
+via: https://www.networkworld.com/article/3386158/intels-agilex-fpga-family-targets-data-intensive-workloads.html#tk.rss_all
+
+作者:[Marc Ferranti][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.networkworld.com
+[b]: https://github.com/lujun9972
+[1]: https://images.idgesg.net/images/article/2019/04/agilex-100792596-large.jpg
+[2]: https://www.networkworld.com/article/3291790/data-center/how-edge-networking-and-iot-will-reshape-data-centers.html
+[3]: https://www.networkworld.com/article/3331978/lan-wan/edge-computing-best-practices.html
+[4]: https://www.networkworld.com/article/3331905/internet-of-things/how-edge-computing-can-help-secure-the-iot.html
+[5]: https://www.networkworld.com/article/2903454/intel-could-strengthen-its-server-product-stack-with-altera.html
+[6]: https://pluralsight.pxf.io/c/321564/424552/7490?u=https%3A%2F%2Fwww.pluralsight.com%2Fcourses%2Fmobile-device-management-big-picture
+[7]: https://www.networkworld.com/article/3359254/data-center-giants-announce-new-high-speed-interconnect.html
+[8]: https://images.idgesg.net/images/article/2019/04/agilex-family-100792597-large.jpg
+[9]: https://www.xilinx.com/news/press/2018/xilinx-unveils-versal-the-first-in-a-new-category-of-platforms-delivering-rapid-innovation-with-software-programmability-and-scalable-ai-inference.html
+[10]: https://www.networkworld.com/article/3263436/fpga-maker-xilinx-aims-range-of-software-programmable-chips-at-data-centers.html
+[11]: https://www.facebook.com/NetworkWorld/
+[12]: https://www.linkedin.com/company/network-world
diff --git a/sources/tech/20190402 Manage your daily schedule with Git.md b/sources/tech/20190402 Manage your daily schedule with Git.md
new file mode 100644
index 0000000000..8f5d7d89bb
--- /dev/null
+++ b/sources/tech/20190402 Manage your daily schedule with Git.md
@@ -0,0 +1,240 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Manage your daily schedule with Git)
+[#]: via: (https://opensource.com/article/19/4/calendar-git)
+[#]: author: (Seth Kenlon https://opensource.com/users/seth)
+
+Manage your daily schedule with Git
+======
+Treat time like source code and maintain your calendar with the help of
+Git.
+![website design image][1]
+
+[Git][2] is one of those rare applications that has managed to encapsulate so much of modern computing into one program that it ends up serving as the computational engine for many other applications. While it's best-known for tracking source code changes in software development, it has many other uses that can make your life easier and more organized. In this series leading up to Git's 14th anniversary on April 7, we'll share seven little-known ways to use Git. Today, we'll look at using Git to keep track of your calendar.
+
+### Keep track of your schedule with Git
+
+What if time itself was but source code that could be managed and version controlled? While proving or disproving such a theory is probably beyond the scope of this article, it happens that you can treat time like source code and manage your daily schedule with the help of Git.
+
+The reigning champion for calendaring is the [CalDAV][3] protocol, which drives popular open source calendaring applications like [NextCloud][4] as well as popular closed source ones. There's nothing wrong with CalDAV (commenters, take heed). But it's not for everyone, and besides there's nothing less inspiring than a mono-culture.
+
+Because I have no interest in becoming invested in largely GUI-dependent CalDAV clients (although if you're looking for a good terminal CalDAV viewer, see [khal][5]), I started investigating text-based alternatives. Text-based calendaring has all the usual benefits of working in [plaintext][6]. It's lightweight, it's highly portable, and as long as it's structured, it's easy to parse and beautify (whatever _beauty_ means to you).
+
+And best of all, it's exactly what Git was designed to manage.
+
+### Org mode not in a scary way
+
+If you don't impose structure on your plaintext, it quickly falls into a pandemonium of off-the-cuff thoughts and devil-may-care notation. Luckily, a markup syntax exists for calendaring, and it's contained in the venerable productivity Emacs mode, [Org mode][7] (which, admit it, you've been meaning to start using anyway).
+
+The amazing thing about Org mode that many people don't realize is [you don't need to know or even use Emacs][8] to take advantage of conventions established by Org mode. You get a lot of great features if you _do_ use Emacs, but if Emacs intimidates you, then you can implement a Git-based Org-mode calendaring system without so much as installing Emacs.
+
+The only part of Org mode that you need to know is its syntax. Org-mode syntax is low-maintenance and fairly intuitive. The biggest difference in calendaring with Org mode instead of a GUI calendaring app is the workflow: instead of going to a calendar and finding the day you want to schedule a task, you create a list of tasks and then assign each one a day and time.
+
+Lists in Org mode use asterisks (*) as bullets. Here's my gaming task list: ****
+
+```
+* Gaming
+** Build Stardrifter character
+** Read Stardrifter rules
+** Stardrifter playtest
+
+** Blue Planet @ Mike's
+
+** Run Rappan Athuk
+*** Purchase hard copy
+*** Skim Rappan Athuk
+*** Build Rappan Athuk maps in maptool
+*** Sort Rappan Athuk tokens
+```
+
+If you're familiar with [CommonMark][9] or Markdown, you'll notice that instead of using whitespace to create a subtask, Org mode favors the more explicit use of additional bullets. Whatever your background with lists, this is an intuitive and easy way to build a list, and it obviously is not inherently tied to Emacs (although using Emacs provides you with shortcuts so you can rearrange your list quickly).
+
+To turn your list into scheduled tasks or events in a calendar, go back through and add the keywords **SCHEDULED** and, optionally, **:CATEGORY:**.
+
+```
+* Gaming
+:CATEGORY: Game
+** Build Stardrifter character
+SCHEDULED: <2019-03-22 18:00-19:00>
+** Read Stardrifter rules
+SCHEDULED: <2019-03-22 19:00-21:00>
+** Stardrifter playtest
+SCHEDULED: <2019-03-25 0900-1300>
+** Blue Planet @ Mike's
+SCHEDULED: <2019-03-18 18:00-23:00 +1w>
+
+and so on...
+```
+
+The **SCHEDULED** keyword marks the entry as an event that you expect to be notified about and the optional **:CATEGORY:** keyword is an arbitrary tagging system for your own use (and in Emacs, you can color-code entries according to category).
+
+For a repeating event, you can use notation such as **+1w** to create a weekly event or **+2w** for a fortnightly event, and so on.
+
+All the fancy markup available for Org mode is [documented][10], so don't hesitate to find more tricks to help it fit your needs.
+
+### Put it into Git
+
+Without Git, your Org-mode appointments are just a file on your local machine. It's the 21st century, though, so you at least need your calendar on your mobile phone, if not on all of your personal computers. You can use Git to publish your calendar for yourself and others.
+
+First, create a directory for your **.org** files. I store mine in **~/cal**.
+
+```
+$ mkdir ~/cal
+```
+
+Change into your directory and make it a Git repository:
+
+```
+$ cd cal
+$ git init
+```
+
+Move your **.org** file to your local Git repo. In practice, I maintain one **.org** file per category.
+
+```
+$ mv ~/*.org ~/cal
+$ ls
+Game.org Meal.org Seth.org Work.org
+```
+
+Stage and commit your files:
+
+```
+$ git add *.org
+$ git commit -m 'cal init'
+```
+
+### Create a Git remote
+
+To make your calendar available from anywhere, you must have a Git repository on the internet. Your calendar is plaintext, so any Git repository will do. You can put your calendar on [GitLab][11] or any other public Git hosting service (even proprietary ones), and as long as your host allows it, you can even mark the repository as private. If you don't want to post your calendar to a server you don't control, it's easy to host a Git repository yourself, either using a bare repository for a single user or using a frontend service like [Gitolite][12] or [Gitea][13].
+
+In the interest of simplicity, I'll assume a self-hosted bare Git repository. You can create a bare remote repository on any server you have SSH access to with one Git command:
+```
+$ ssh -p 22122 [seth@example.com][14]
+[remote]$ mkdir cal.git
+[remote]$ cd cal.git
+[remote]$ git init --bare
+[remote]$ exit
+```
+
+This bare repository can serve as your calendar's home on the internet.
+
+Set it as the remote source for your local (on your computer, not your server) Git repository:
+
+```
+$ git remote add origin seth@example.com:/home/seth/cal.git
+```
+
+And then push your calendar data to the server:
+
+```
+$ git push -u origin HEAD
+```
+
+With your calendar in a Git repository, it's available to you on any device running Git. That means you can make updates and changes to your schedule and push your changes upstream so it updates everywhere.
+
+I use this method to keep my calendar in sync between my work laptop and my home workstation. Since I use Emacs every day for most of the day, being able to view and edit my calendar in Emacs is a major convenience. The same is true for most people with a mobile device, so the next step is to set up an Org-mode calendaring system on a mobile.
+
+### Mobile Git
+
+Since your calendar data is in plaintext, strictly speaking, you can "use" it on any device that can read a text file. That's part of the beauty of this system; you're never without, at the very least, your raw data. But to integrate your calendar on a mobile device the way you'd expect a modern calendar to work, you need two components: a mobile Git client and a mobile Org-mode viewer.
+
+#### Git client for mobile
+
+[MGit][15] is a good Git client for Android. There are Git clients for iOS, as well.
+
+Once you've installed MGit (or a similar Git client), you must clone your calendar repository so your phone has a copy. To access your server from your mobile device, you must set up an SSH key for authentication. MGit can generate and store a key for you, which you must add to your server's **~/.ssh/authorized_keys** file or to your SSH keys in the settings of your hosted Git account.
+
+You must do this manually. MGit does not have an interface to log into your server or hosted Git account. If you do not do this, your mobile device cannot access your server to access your calendar data.
+
+I did it by copying the key file I generated in MGit to my laptop over [KDE Connect][16] (but you can do the same over Bluetooth, or with an SD card reader, or a USB cable, depending on your preferred method of accessing data on your phone). I copied the key (a file called **calkey** to my server with this command:
+
+```
+$ cat calkey | ssh seth@example.com "cat >> /home/seth/.ssh/authorized_keys"
+```
+
+You may have a different way of doing it, but if you ever set your server up for passwordless login, this is exactly the same process. If you're using a hosted Git service like GitLab, you must copy and paste the contents of your key file into your user account's SSH Key panel.
+
+![Adding key file data to GitLab][17]
+
+Once that's done, your mobile device can authorize to your server, but it still needs to know where to go to find your calendar data. Different apps may use different notation, but MGit uses plain old Git-over-SSH. That means if you're using a non-standard SSH port, you must specify the SSH port to use:
+
+```
+$ git clone ssh://seth@example.com:22122//home/seth/git/cal.git
+```
+
+![Specifying SSH port in MGit][18]
+
+If you use a different app, it may use a different syntax that allows you to provide a port in a special field or drop the **ssh://** prefix. Refer to the app documentation if you experience issues.
+
+Clone the repository to your phone.
+
+![Cloned repositories][19]
+
+Few Git apps are set to automatically update the repository. There are a few apps you can use to automate pulls, or you can set up Git hooks to push updates from your server—but I won't get into that here. For now, after you make an update to your calendar, be sure to pull new changes manually in MGit (or if you change events on your phone, push the changes to your server).
+
+![MGit push/pull settings][20]
+
+#### Mobile calendar
+
+There are a few different apps that provide frontends for Org mode on a mobile device. [Orgzly][21] is a great open source Android app that provides an interface for Org mode's greatest features, from the Agenda mode to the TODO lists. Install and launch it.
+
+From the Main menu, choose Setting Sync Repositories and select the directory containing your calendar files (i.e., the Git repository you cloned from your server).
+
+Give Orgzly a moment to import the data, then use Orgzly's [hamburger][22] menu to select the Agenda view.
+
+![Orgzly's agenda view][23]
+
+In Orgzly's Settings Reminders menu, you can choose which event types trigger a notification on your phone. You can get notifications for **SCHEDULED** tasks, **DEADLINE** tasks, or anything with an event time assigned to it. If you use your phone as your taskmaster, you'll never miss an event with Org mode and Orgzly.
+
+![Orgzly notification][24]
+
+Orgzly isn't just a parser. You can edit and update events, and even mark events **DONE**.
+
+![Orgzly to-do list][25]
+
+### Designed for and by you
+
+The important thing to understand about using Org mode and Git is that both applications are highly flexible, and it's expected that you'll customize how and what they do so they will adapt to your needs. If something in this article is an affront to how you organize your life or manage your weekly schedule, but you like other parts of what this proposal offers, then throw out the part you don't like. You can use Org mode in Emacs if you want, or you can just use it as calendar markup. You can set your phone to pull Git data right off your computer at the end of the day instead of a server on the internet, or you can configure your computer to sync calendars whenever your phone is plugged in, or you can manage it daily as you load up your phone with all the stuff you need for the workday. It's up to you, and that's the most significant thing about Git, about Org mode, and about open source.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/4/calendar-git
+
+作者:[Seth Kenlon (Red Hat, Community Moderator)][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/seth
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/web-design-monitor-website.png?itok=yUK7_qR0 (website design image)
+[2]: https://git-scm.com/
+[3]: https://tools.ietf.org/html/rfc4791
+[4]: http://nextcloud.com
+[5]: https://github.com/pimutils/khal
+[6]: https://plaintextproject.online/
+[7]: https://orgmode.org
+[8]: https://opensource.com/article/19/1/productivity-tool-org-mode
+[9]: https://commonmark.org/
+[10]: https://orgmode.org/manual/
+[11]: http://gitlab.com
+[12]: http://gitolite.com/gitolite/index.html
+[13]: https://gitea.io/en-us/
+[14]: mailto:seth@example.com
+[15]: https://f-droid.org/en/packages/com.manichord.mgit
+[16]: https://community.kde.org/KDEConnect
+[17]: https://opensource.com/sites/default/files/uploads/gitlab-add-key.jpg (Adding key file data to GitLab)
+[18]: https://opensource.com/sites/default/files/uploads/mgit-0.jpg (Specifying SSH port in MGit)
+[19]: https://opensource.com/sites/default/files/uploads/mgit-1.jpg (Cloned repositories)
+[20]: https://opensource.com/sites/default/files/uploads/mgit-2.jpg (MGit push/pull settings)
+[21]: https://f-droid.org/en/packages/com.orgzly/
+[22]: https://en.wikipedia.org/wiki/Hamburger_button
+[23]: https://opensource.com/sites/default/files/uploads/orgzly-agenda.jpg (Orgzly's agenda view)
+[24]: https://opensource.com/sites/default/files/uploads/orgzly-cal-notify.jpg (Orgzly notification)
+[25]: https://opensource.com/sites/default/files/uploads/orgzly-cal-todo.jpg (Orgzly to-do list)
diff --git a/sources/tech/20190402 What are Ubuntu Repositories- How to enable or disable them.md b/sources/tech/20190402 What are Ubuntu Repositories- How to enable or disable them.md
new file mode 100644
index 0000000000..dc0961a66d
--- /dev/null
+++ b/sources/tech/20190402 What are Ubuntu Repositories- How to enable or disable them.md
@@ -0,0 +1,189 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (What are Ubuntu Repositories? How to enable or disable them?)
+[#]: via: (https://itsfoss.com/ubuntu-repositories)
+[#]: author: (Abhishek Prakash https://itsfoss.com/author/abhishek/)
+
+What are Ubuntu Repositories? How to enable or disable them?
+======
+
+_**This detailed article tells you about various repositories like universe, multiverse in Ubuntu and how to enable or disable them.**_
+
+So, you are trying to follow a tutorial from the web and installing a software using apt-get command and it throws you an error:
+
+```
+E: Unable to locate package xyz
+```
+
+You are surprised because others the package should be available. You search on the internet and come across a solution that you have to enable universe or multiverse repository to install that package.
+
+**You can enable universe and multiverse repositories in Ubuntu using the commands below:**
+
+```
+sudo add-apt-repository universe multiverse
+sudo apt update
+```
+
+You installed the universe and multiverse repository but do you know what are these repositories? How do they play a role in installing packages? Why there are several repositories?
+
+I’ll explain all these questions in detail here.
+
+### The concept of repositories in Ubuntu
+
+Okay, so you already know that to [install software in Ubuntu][1], you can use the [apt command][2]. This is the same [APT package manager][3] that Ubuntu Software Center utilizes underneath. So all the software (except Snap packages) that you see in the Software Center are basically from APT.
+
+Have you ever wondered where does the apt program install the programs from? How does it know which packages are available and which are not?
+
+Apt basically works on the repository. A repository is nothing but a server that contains a set of software. Ubuntu provides a set of repositories so that you won’t have to search on the internet for the installation file of various software of your need. This centralized way of providing software is one of the main strong points of using Linux.
+
+The APT package manager gets the repository information from the /etc/apt/sources.list file and files listed in /etc/apt/sources.list.d directory. Repository information is usually in the following format:
+
+```
+deb http://us.archive.ubuntu.com/ubuntu/ bionic main
+```
+
+In fact, you can [go to the above server address][4] and see how the repository is structured.
+
+When you [update Ubuntu using the apt update command][5], the apt package manager gets the information about the available packages (and their version info) from the repositories and stores them in local cache. You can see this in /var/lib/apt/lists directory.
+
+Keeping this information locally speeds up the search process because you don’t have to go through the network and search the database of available packages just to check if a certain package is available or not.
+
+Now you know how repositories play an important role, let’s see why there are several repositories provided by Ubuntu.
+
+### Ubuntu Repositories: Main, Universe, Multiverse, Restricted and Partner
+
+![][6]
+
+Software in Ubuntu repository are divided into five categories: main, universe, multiverse, restricted and partner.
+
+Why Ubuntu does that? Why not put all the software into one single repository? To answer this question, let’s see what are these repositories:
+
+#### **Main**
+
+When you install Ubuntu, this is the repository enabled by default. The main repository consists of only FOSS (free and open source software) that can be distributed freely without any restrictions.
+
+Software in this repository are fully supported by the Ubuntu developers. This is what Ubuntu will provide with security updates until your system reaches end of life.
+
+#### **Universe**
+
+This repository also consists free and open source software but Ubuntu doesn’t guarantee of regular security updates to software in this category.
+
+Software in this category are packaged and maintained by the community. The Universe repository has a vast amount of open source software and thus it enables you to have access to a huge number of software via apt package manager.
+
+#### **Multiverse**
+
+Multiverse contains the software that are not FOSS. Due to licensing and legal issues, Ubuntu cannot enable this repository by default and cannot provide fix and updates.
+
+It’s up to you to decide if you want to use Multiverse repository and check if you have the right to use the software.
+
+#### **Restricted**
+
+Ubuntu tries to provide only free and open source software but that’s not always possible specially when it comes to supporting hardware.
+
+The restricted repositories consists of proprietary drivers.
+
+#### **Partner**
+
+This repository consist of proprietary software packaged by Ubuntu for their partners. Earlier, Ubuntu used to provide Skype trough this repository.
+
+#### Third party repositories and PPA (Not provided by Ubuntu)
+
+The above five repositories are provided by Ubuntu. You can also add third party repositories (it’s up to you if you want to do it) to access more software or to access newer version of a software (as Ubuntu might provide old version of the same software).
+
+For example, if you add the repository provided by [VirtualBox][7], you can get the latest version of VurtualBox. It will add a new entry in your sources.list.
+
+You can also install additional application using PPA (Personal Package Archive). I have written about [what is PPA and how it works][8] in detail so please read that article.
+
+Tip
+
+Try NOT adding anything other than Ubuntu’s repositories in your sources.list file. You should keep this file in pristine condition because if you mess it up, you won’t be able to update your system or (at times) even install new packages.
+
+### Add universe, multiverse and other repositories
+
+As I had mentioned earlier, only the Main repository is enabled by default when you install Ubuntu. To access more software, you can add the additional repositories.
+
+Let me show you how to do it in command line first and then I’ll show you the GUI ways as well.
+
+To enable Universe repository, use:
+
+```
+sudo add-apt-repository universe
+```
+
+To enable Restricted repository, use:
+
+```
+sudo add-apt-repository restricted
+```
+
+To enable Multiverse repository, use this command:
+
+```
+sudo add-apt-repository multiverse
+```
+
+You must use sudo apt update command after adding the repository so that you system creates the local cache with package information.
+
+If you want to **remove a repository** , simply add -r like **sudo add-apt-repository -r universe**.
+
+Graphically, go to Software & Updates and you can enable the repositories here:
+
+![Adding Universe, Restricted and Multiverse repositories][9]
+
+You’ll find the option to enable partner repository in the Other Software tab.
+
+![Adding Partner repository][10]
+
+To disable a repository, simply uncheck the box.
+
+### Bonus Tip: How to know which repository a package belongs to?
+
+Ubuntu has a dedicated website that provides you with information about all the packages available in the Ubuntu archive. Go to Ubuntu Packages website.
+
+[Ubuntu Packages][11]
+
+You can search for a package name in the search field. You can select if you are looking for a particular Ubuntu release or a particular repository. I prefer using ‘any’ option in both fields.
+
+![][12]
+
+It will show you all the matching packages, Ubuntu releases and the repository information.
+
+![][13]
+
+As you can see above the package tor is available in the Universe repository for various Ubuntu releases.
+
+**Conclusion**
+
+I hope this article helped you in understanding the concept of repositories in Ubuntu.
+
+If you have any questions or suggestions, please feel free to leave a comment below. If you liked the article, please share it on social media sites like Reddit and Hacker News.
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/ubuntu-repositories
+
+作者:[Abhishek Prakash][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/abhishek/
+[b]: https://github.com/lujun9972
+[1]: https://itsfoss.com/remove-install-software-ubuntu/
+[2]: https://itsfoss.com/apt-command-guide/
+[3]: https://wiki.debian.org/Apt
+[4]: http://us.archive.ubuntu.com/ubuntu/
+[5]: https://itsfoss.com/update-ubuntu/
+[6]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/03/ubuntu-repositories.png?resize=800%2C450&ssl=1
+[7]: https://itsfoss.com/install-virtualbox-ubuntu/
+[8]: https://itsfoss.com/ppa-guide/
+[9]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/03/enable-repositories-ubuntu.png?resize=800%2C490&ssl=1
+[10]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/03/enable-partner-repository-ubuntu.png?resize=800%2C490&ssl=1
+[11]: https://packages.ubuntu.com
+[12]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/03/search-packages-ubuntu-archive.png?ssl=1
+[13]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/03/search-packages-ubuntu-archive-1.png?resize=800%2C454&ssl=1
diff --git a/sources/tech/20190402 When Wi-Fi is mission-critical, a mixed-channel architecture is the best option.md b/sources/tech/20190402 When Wi-Fi is mission-critical, a mixed-channel architecture is the best option.md
new file mode 100644
index 0000000000..29a73998d7
--- /dev/null
+++ b/sources/tech/20190402 When Wi-Fi is mission-critical, a mixed-channel architecture is the best option.md
@@ -0,0 +1,90 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (When Wi-Fi is mission-critical, a mixed-channel architecture is the best option)
+[#]: via: (https://www.networkworld.com/article/3386376/when-wi-fi-is-mission-critical-a-mixed-channel-architecture-is-the-best-option.html#tk.rss_all)
+[#]: author: (Zeus Kerravala https://www.networkworld.com/author/Zeus-Kerravala/)
+
+When Wi-Fi is mission-critical, a mixed-channel architecture is the best option
+======
+
+### Multi-channel is the norm for Wi-Fi today, but it’s not always the best choice. Single-channel and hybrid APs offer compelling alternatives when reliable Wi-Fi is a must.
+
+![Getty Images][1]
+
+I’ve worked with a number of companies that have implemented digital projects only to see them fail. The ideation was correct, the implementation was sound, and the market opportunity was there. The weak link? The Wi-Fi network.
+
+For example, a large hospital wanted to improve clinician response times to patient alarms by having telemetry information sent to mobile devices. Without the system, the only way a nurse would know about a patient alarm is from an audible alert. And with all the background noise, it’s often tough to discern where noises are coming from. The problem was the Wi-Fi network in the hospital had not been upgraded in years and caused messages to be significantly delayed in their delivery, often taking four to five minutes to deliver. The long delivery times caused a lack of confidence in the system, so many clinicians stopped using it and went back to manual alerting. As a result, the project was considered a failure.
+
+I’ve seen similar examples in manufacturing, K-12 education, entertainment, and other industries. Businesses are competing on the basis of customer experience, and that’s driven from the ever-expanding, ubiquitous wireless edge. Great Wi-Fi doesn’t necessarily mean market leadership, but bad Wi-Fi will have a negative impact on customers and employees. And in today’s competitive climate, that’s a recipe for disaster.
+
+**[ Read also:[Wi-Fi site-survey tips: How to avoid interference, dead spots][2] ]**
+
+## Wi-Fi performance historically inconsistent
+
+The problem with Wi-Fi is that it’s inherently flaky. I’m sure everyone reading this has experienced the typical flaws with failed downloads, dropped connections, inconsistent performance, and lengthy wait times to connect to public hot spots.
+
+Picture sitting in a conference prior to a keynote address and being able to tweet, send email, browse the web, and do other things with no problem. Then the keynote speaker comes on stage and the entire audiences start snapping pics, uploading those pictures, and streaming things – and the Wi-Fi stops working. I find this to be the norm more than the exception, underscoring the need for [no-compromise Wi-Fi][3].
+
+The question for network professionals is how to get to a place where the Wi-Fi is rock solid 100% of the time. Some say that just beefing up the existing network will do that, and it might, but in some cases, the type of Wi-Fi might not be appropriate.
+
+The most commonly deployed type of Wi-Fi is multi-channel, also known as micro-cell, where each client connects to the access point (AP) using a radio channel. A high-quality experience is based on two things: good signal strength and minimal interference. Several things can cause interference, such as APs being too close, layout issues, or interference from other equipment. To minimize interference, businesses invest a significant amount of time and money in [site surveys to plan the optimal channel map][2], but even with that’s done well, Wi-Fi glitches can still happen.
+
+**[[Take this mobile device management course from PluralSight and learn how to secure devices in your company without degrading the user experience.][4] ]**
+
+## Multi-channel Wi-Fi not always the best choice
+
+For many carpeted offices, multi-channel Wi-Fi is likely to be solid, but there are some environments where external circumstances will impact performance. A good example of this is a multi-tenant building in which there are multiple Wi-Fi networks transmitting on the same channel and interfering with one another. Another example is a hospital where there are many campus workers moving between APs. The client will also try to connect to the best AP, causing the client to continually disconnect and reconnect resulting in dropped sessions. Then there are environments such as schools, airports, and conference facilities where there is a high number of transient devices and multi-channel can struggle to keep up.
+
+## Single channel Wi-Fi offers better reliability but with a performance hit
+
+What’s a network manager to do? Is inconsistent Wi-Fi just a fait accompli? Multi-channel is the norm, but it isn’t designed for dynamic physical environments or those where reliable connectivity is a must.
+
+Several years ago an alternative architecture was proposed that would solve these problems. As the name suggests, “single channel” Wi-Fi uses a single radio channel for all APs in the network. Think of this as being a single Wi-Fi fabric that operates on one channel. With this architecture, the placement of APs is irrelevant because they all utilize the same channel, so they won’t interfere with one another. This has an obvious simplicity advantage, such as if coverage is poor, there’s no reason to do another expensive site survey. Instead, just drop in APs where they are needed.
+
+One of the disadvantages of single-channel is that aggregate network throughput was lower than multi-channel because only one channel can be used. This might be fine in environments where reliability trumps performance, but many organizations want both.
+
+## Hybrid APs offer the best of both worlds
+
+There has been recent innovation from the manufacturers of single-channel systems that mix channel architectures, creating a “best of both worlds” deployment that offers the throughput of multi-channel with the reliability of single-channel. For example, Allied Telesis offers Hybrid APs that can operate in multi-channel and single-channel mode simultaneously. That means some web clients can be assigned to the multi-channel to have maximum throughput, while others can use single-channel for seamless roaming experience.
+
+A practical use-case of such a mix might be a logistics facility where the office staff uses multi-channel, but the fork-lift operators use single-channel for continuous connectivity as they move throughout the warehouse.
+
+Wi-Fi was once a network of convenience, but now it is perhaps the most mission-critical of all networks. A traditional multi-channel system might work, but due diligence should be done to see how it functions under a heavy load. IT leaders need to understand how important Wi-Fi is to digital transformation initiatives and do the proper testing to ensure it’s not the weak link in the infrastructure chain and choose the best technology for today’s environment.
+
+**Reviews: 4 free, open-source network monitoring tools:**
+
+ * [Icinga: Enterprise-grade, open-source network-monitoring that scales][5]
+ * [Nagios Core: Network-monitoring software with lots of plugins, steep learning curve][6]
+ * [Observium open-source network monitoring tool: Won’t run on Windows but has a great user interface][7]
+ * [Zabbix delivers effective no-frills network monitoring][8]
+
+
+
+Join the Network World communities on [Facebook][9] and [LinkedIn][10] to comment on topics that are top of mind.
+
+--------------------------------------------------------------------------------
+
+via: https://www.networkworld.com/article/3386376/when-wi-fi-is-mission-critical-a-mixed-channel-architecture-is-the-best-option.html#tk.rss_all
+
+作者:[Zeus Kerravala][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.networkworld.com/author/Zeus-Kerravala/
+[b]: https://github.com/lujun9972
+[1]: https://images.idgesg.net/images/article/2018/09/tablet_graph_wifi_analytics-100771638-large.jpg
+[2]: https://www.networkworld.com/article/3315269/wi-fi-site-survey-tips-how-to-avoid-interference-dead-spots.html
+[3]: https://www.alliedtelesis.com/blog/no-compromise-wi-fi
+[4]: https://pluralsight.pxf.io/c/321564/424552/7490?u=https%3A%2F%2Fwww.pluralsight.com%2Fcourses%2Fmobile-device-management-big-picture
+[5]: https://www.networkworld.com/article/3273439/review-icinga-enterprise-grade-open-source-network-monitoring-that-scales.html?nsdr=true#nww-fsb
+[6]: https://www.networkworld.com/article/3304307/nagios-core-monitoring-software-lots-of-plugins-steep-learning-curve.html
+[7]: https://www.networkworld.com/article/3269279/review-observium-open-source-network-monitoring-won-t-run-on-windows-but-has-a-great-user-interface.html?nsdr=true#nww-fsb
+[8]: https://www.networkworld.com/article/3304253/zabbix-delivers-effective-no-frills-network-monitoring.html
+[9]: https://www.facebook.com/NetworkWorld/
+[10]: https://www.linkedin.com/company/network-world
diff --git a/sources/tech/20190402 Zero-trust- microsegmentation networking.md b/sources/tech/20190402 Zero-trust- microsegmentation networking.md
new file mode 100644
index 0000000000..864bd8eea4
--- /dev/null
+++ b/sources/tech/20190402 Zero-trust- microsegmentation networking.md
@@ -0,0 +1,137 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Zero-trust: microsegmentation networking)
+[#]: via: (https://www.networkworld.com/article/3384748/zero-trust-microsegmentation-networking.html#tk.rss_all)
+[#]: author: (Matt Conran https://www.networkworld.com/author/Matt-Conran/)
+
+Zero-trust: microsegmentation networking
+======
+
+### Microsegmentation gives administrators the control to set granular policies in order to protect the application environment.
+
+![Aaron Burson \(CC0\)][1]
+
+The transformation to the digital age has introduced significant changes to the cloud and data center environments. This has compelled the organizations to innovate more quickly than ever before. This, however, brings with it both – the advantages and disadvantages.
+
+The network and security need to keep up with this rapid pace of change. If you cannot match with the speed of the [digital age,][2] then ultimately bad actors will become a hazard. Therefore, the organizations must move to a [zero-trust environment][3]: default deny, with least privilege access. In today’s evolving digital world this is the primary key to success.
+
+Ideally, a comprehensive solution must provide protection across all platforms including legacy servers, VMs, services in public clouds, on-premise, off-premise, hosted, managed or self-managed. We are going to stay hybrid for a long time, therefore we need to equip our architecture with [zero-trust][4].
+
+**[ Don’t miss[customer reviews of top remote access tools][5] and see [the most powerful IoT companies][6] . | Get daily insights by [signing up for Network World newsletters][7]. ]**
+
+We need to have the ability to support all of these hybrid environments that can analyze at a process, flow data, and infrastructure level. As a matter of fact, there is never just one element to analyze within a network in order to create an effective security posture.
+
+To adequately secure such an environment requires a solution with key components: such as appropriate visibility, microsegmentation, and breach detection. Let's learn more about one of these primary elements: zero-trust microsegmentation networking.
+
+There are a variety of microsegmentation vendors, all with competing platforms. We have, for example, SDN-based, container-centric, network-based appliance be it physical or virtual, and container-centric to name just a few.
+
+## What is microsegmentation?
+
+Microsegmentation is the ability to put a wrapper around the access control for each component of an application. The traditional days are gone where we can just impose a block on source/destination/port numbers or higher up in the stack with protocols, such as HTTP or HTTPS.
+
+As the communication patterns become more complex, thereby isolating the communication flows between entities, hence following the microsegmentation principles has become a necessity.
+
+## Why is microsegmentation important?
+
+Microsegmentation gives administrators the control to set granular policies in order to protect the application environment. It defines the rules and policies as to how an application can communicate within its tier. The policies are granular (a lot more granular than what we had before), which restrict the communication to hosts that are only allowed to communicate.
+
+Eventually, this reduces the available attack surface and completely locks down the ability for the bad actors to move laterally within the application infrastructure. Why? Because it governs the application’s activity at a granular level, thereby improving the entire security posture. The traditional zone-based networking no longer cuts it in today’s [digital world][8].
+
+## General networking
+
+Let's start with the basics. We all know that with security, you are only as strong as your weakest link. As a result, enterprises have begun to further segment networks into microsegments. Some call them nanosegments.
+
+But first, let’s recap on what we actually started within the initial stage- nothing! We had IP addresses that were used for connectivity but unfortunately, they have no built-in authentication mechanism. Why? Because it wasn't a requirement back then.
+
+Network connectivity based on network routing protocols was primarily used for sharing resources. A printer, 30 years ago, could cost the same as a house, so connectivity and the sharing of resources were important. The authentication of the communication endpoints was not considered significant.
+
+## Broadcast domains
+
+As networks grew in size, virtual LANs (VLANs) were introduced to divide the broadcast domains and improve network performance. A broadcast domain is a logical division of a computer network. All nodes can reach each other by sending a broadcast at the data link layer. When the broadcast domain swells, the network performance takes a hit.
+
+Over time the role of the VLAN grew to be used as a security tool but it was never meant to be in that space. VLANs were used to improve performance, not to isolate the resources. The problem with VLANs is that there is no intra VLAN filtering. They have a very broad level of access and trust. If bad actors gain access to one segment in the zone, they should not be allowed to try and compromise another device within that zone, but with VLANs, this is a strong possibility.
+
+Hence, VLAN offers the bad actor a pretty large attack surface to play with and move across laterally without inspection. Lateral movements are really hard to detect with traditional architectures.
+
+Therefore, enterprises were forced to switch to microsegmentation. Microsegmentation further segments networks within the zone. On the contrary, the whole area of virtualization complicates the segmentation process. A virtualized server may only have a single physical network port but it supports numerous logical networks where services and applications reside across multiple security zones.
+
+Thus, microsegmentation needs to work at both; the physical network layer as well as within the virtualized networking layer. As you are aware, there has been a change in the traffic pattern. The good thing about microsegmentation is that it controls both; the “north & south” and also the “east & west” movement of traffic, further isolating the size of broadcast domains.
+
+## Microsegmentation – a multi-stage process
+
+Implementing microsegmentation is a multi-stage process. There are certain prerequisites that must be followed before the implementation. Firstly, you need to fully understand the communication patterns, map the flows and all the application dependencies.
+
+Once this is done, it's only then you can enable microsegmentation in a platform-agnostic manner across all the environments. Segmenting your network appropriately creates a dark network until the administrator turns on the lights. Authentication is performed first and then access is granted to the communicating entities operating with zero-trust with least privilege access.
+
+Once you are connecting the entities, they need to run through a number of technologies in order to be fully connected. There is not a once-off check with microsegmentation. It’s rather a continuous process to make sure that both entities are doing what they are supposed to do.
+
+This ensures that everyone is doing what they are entitled to do. You want to reduce the unnecessary cross-talk to an absolute minimum and only allow communication that is a complete necessity.
+
+## How do you implement microsegmentation?
+
+Firstly, you need strong visibility not just at the traffic flow level but also at the process and data contextual level. Without granular application visibility, it's impossible to map and fully understand what is normal traffic flow and irregular application communication patterns.
+
+Visibility cannot be mapped out manually, as there could be hundreds of workloads. Therefore, an automatic approach must be taken. Manual mapping is more prone to errors and is inefficient. The visibility also needs to be in real-time. A static snapshot of the application architecture, even if it's down to a process level, will not tell you anything about the behaviors that are sanctioned or unsanctioned.
+
+You also need to make sure that you, not under-segmenting, similar to what we had in the old days. Primarily, microsegmentation must manage communication workflows all the way up to Layer 7 of the Open Systems Interconnection (OSI) layer. Layer 4 microsegmentation only focuses on the Transport layer. If you are only segmenting the network at Layer 4 then you are widening your attack surface, thereby opening the network to be compromised.
+
+Segmenting right up to the application layer means you are locking down the lateral movements, open ports, and protocols. It enables you to restrict access to the source and destination process rather than source and destination port numbers.
+
+## Security issues with hybrid cloud
+
+Since the [network perimeter][9] has been removed, therefore, it has become difficult to bolt the traditional security tools. Traditionally, we could position a static perimeter around the network infrastructure. However, this is not an available option today as we have a mixture of containerized applications, for example, a legacy database server. We have legacy communicating to the containerized land.
+
+Hybrid enables organizations to use different types of cloud architects to include the on-premise and new technologies, such as containers. We are going to have a hybrid cloud in coming times which will change the way we think about networking. Hybrid forces the organizations to rethink about the network architectures.
+
+When you attach the microsegment policies around the workload itself, then the policies will go with the workload. Then it would not matter if the entity moves to the on-premise or to the cloud. If the workload auto scales up and down or horizontally, the policy needs to go with the workload. Even if you go deeper than the workload, into the process level, you can set even more granular controls for microsegmentation.
+
+## Identity
+
+However, this is the point where identity becomes a challenge. If things are scaling and becoming dynamic, you can’t tie policies to the IP addresses. Rather than using IP addresses as the base for microsegmentation, policies are based on the logical (not physical) attributes.
+
+With microsegmentation, the workload identity is based on logical attributes, such as the multi-factor authentication (MFA), transport layer security (TLS) certificate, the application service, or the use of a logical label associated with the workload.
+
+These are what are known as logical attributes. Ultimately the policies map to the IP addresses but these are set by using the logical attributes, not the physical ones. As we progress in this technological era, the IP address is less relevant now. Named data networking is one of the perfect examples.
+
+Other identity methods for microsegmentation are TLS certificates. If the traffic is encrypted with a different TLS certificate or from an invalid source, it automatically gets dropped, even if it comes from the right location. It will get blocked as it does not have the right identity.
+
+You can even extend that further and look inside the actual payload. If an entity is trying to do a hypertext transfer protocol (HTTP) post to a record and if it tries to perform any other operation, it will get blocked.
+
+## Policy enforcement
+
+Practically, all of these policies can be implemented and enforced in different places throughout the network. However, if you enforce in only one place, that point in the network can become compromised and become an entry door to the bad actor. You can, for example, enforce in 10 different network points, even if you subvert in 2 of them the other 8 will still protect you.
+
+Zero-trust microsegmentation ensures that you can enforce in different points throughout the network and also with different mechanics.
+
+**This article is published as part of the IDG Contributor Network.[Want to Join?][10]**
+
+Join the Network World communities on [Facebook][11] and [LinkedIn][12] to comment on topics that are top of mind.
+
+--------------------------------------------------------------------------------
+
+via: https://www.networkworld.com/article/3384748/zero-trust-microsegmentation-networking.html#tk.rss_all
+
+作者:[Matt Conran][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.networkworld.com/author/Matt-Conran/
+[b]: https://github.com/lujun9972
+[1]: https://images.idgesg.net/images/article/2018/07/hive-structured_windows_architecture_connections_connectivity_network_lincoln_park_pavilion_chicago_by_aaron_burson_cc0_via_unsplash_1200x800-100765880-large.jpg
+[2]: https://youtu.be/AnMQH_noNDo
+[3]: https://network-insight.net/2018/10/zero-trust-networking-ztn-want-ghosted/
+[4]: https://network-insight.net/2018/09/embrace-zero-trust-networking/
+[5]: https://www.networkworld.com/article/3262145/lan-wan/customer-reviews-top-remote-access-tools.html#nww-fsb
+[6]: https://www.networkworld.com/article/2287045/internet-of-things/wireless-153629-10-most-powerful-internet-of-things-companies.html#nww-fsb
+[7]: https://www.networkworld.com/newsletters/signup.html#nww-fsb
+[8]: https://network-insight.net/2017/10/internet-things-iot-dissolving-cloud/
+[9]: https://network-insight.net/2018/09/software-defined-perimeter-zero-trust/
+[10]: /contributor-network/signup.html
+[11]: https://www.facebook.com/NetworkWorld/
+[12]: https://www.linkedin.com/company/network-world
diff --git a/sources/tech/20190403 How to rebase to Fedora 30 Beta on Silverblue.md b/sources/tech/20190403 How to rebase to Fedora 30 Beta on Silverblue.md
new file mode 100644
index 0000000000..892afff5d6
--- /dev/null
+++ b/sources/tech/20190403 How to rebase to Fedora 30 Beta on Silverblue.md
@@ -0,0 +1,70 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (How to rebase to Fedora 30 Beta on Silverblue)
+[#]: via: (https://fedoramagazine.org/how-to-rebase-to-fedora-30-beta-on-silverblue/)
+[#]: author: (Michal Konečný https://fedoramagazine.org/author/zlopez/)
+
+How to rebase to Fedora 30 Beta on Silverblue
+======
+
+![][1]
+
+Silverblue is [an operating system for your desktop built on Fedora][2]. It’s excellent for daily use, development, and container-based workflows. It offers [numerous advantages][3] such as being able to roll back in case of any problems. If you want to test Fedora 30 on your Silverblue system, this article tells you how. It not only shows you what to do, but also how to revert back if anything unforeseen happens.
+
+### Switching to Fedora 30 branch
+
+Switching to Fedora 30 on Silverblue is easy. First, check if the _30_ branch is available, which should be true now:
+
+```
+ostree remote refs fedora-workstation
+```
+
+You should see the following in the output:
+
+```
+fedora-workstation:fedora/30/x86_64/silverblue
+```
+
+Next, import the GPG key for the Fedora 30 branch. Without this step, you won’t be able to rebase.
+
+```
+sudo ostree remote gpg-import fedora-workstation -k /etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-30-primary
+```
+
+Next, rebase your system to the Fedora 30 branch.
+
+```
+rpm-ostree rebase fedora-workstation:fedora/30/x86_64/silverblue
+```
+
+Finally, the last thing to do is restart your computer and boot to Fedora 30.
+
+### How to revert things back
+
+Remember that Fedora 30’s still in beta testing phase, so there could still be some issues. If anything bad happens — for instance, if you can’t boot to Fedora 30 at all — it’s easy to go back. Just pick the previous entry in GRUB, and your system will start in its previous state before switching to Fedora 30. To make this change permanent, use the following command:
+
+```
+rpm-ostree rollback
+```
+
+That’s it. Now you know how to rebase to Fedora 30 and back. So why not test it today? 🙂
+
+--------------------------------------------------------------------------------
+
+via: https://fedoramagazine.org/how-to-rebase-to-fedora-30-beta-on-silverblue/
+
+作者:[Michal Konečný][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://fedoramagazine.org/author/zlopez/
+[b]: https://github.com/lujun9972
+[1]: https://fedoramagazine.org/wp-content/uploads/2019/03/silverblue-f30beta-816x345.jpg
+[2]: https://docs.fedoraproject.org/en-US/fedora-silverblue/
+[3]: https://fedoramagazine.org/give-fedora-silverblue-a-test-drive/
diff --git a/sources/tech/20190403 Intel unveils an epic response to AMD-s server push.md b/sources/tech/20190403 Intel unveils an epic response to AMD-s server push.md
new file mode 100644
index 0000000000..826cd9d413
--- /dev/null
+++ b/sources/tech/20190403 Intel unveils an epic response to AMD-s server push.md
@@ -0,0 +1,78 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Intel unveils an epic response to AMD’s server push)
+[#]: via: (https://www.networkworld.com/article/3386142/intel-unveils-an-epic-response-to-amds-server-push.html#tk.rss_all)
+[#]: author: (Andy Patrizio https://www.networkworld.com/author/Andy-Patrizio/)
+
+Intel unveils an epic response to AMD’s server push
+======
+
+### Intel introduced more than 50 new Xeon Scalable Processors for servers that cover a variety of workloads.
+
+![Intel][1]
+
+Intel on Tuesday introduced its second-generation Xeon Scalable Processors for servers, developed under the codename Cascade Lake, and it’s clear AMD has lit a fire under a once complacent company.
+
+These new Xeon SP processors max out at 28 cores and 56 threads, a bit shy of AMD’s Epyc server processors with 32 cores and 64 threads, but independent benchmarks are still to come, which may show Intel having a lead at single core performance.
+
+And for absolute overkill, there is the Xeon SP Platinum 9200 Series, which sports 56 cores and 112 threads. It will also require up to 400W of power, more than twice what the high-end Xeons usually consume.
+
+**[ Now read:[What is quantum computing (and why enterprises should care)][2] ]**
+
+The new processors were unveiled at a big event at Intel’s headquarters in Santa Clara, California, and live-streamed on the web. [Newly minted CEO][3] Bob Swan kicked off the event, saying the new processors were the “first truly data-centric portfolio for our customers.”
+
+“For the last several years, we have embarked on a journey to transform from a PC-centric company to a data-centric computing company and build the silicon processors with our partners to help our customers prosper and grow in an increasingly data-centric world,” he added.
+
+He also said the move to a data-centric world isn’t just CPUs, but a suite of accelerant technologies, including the [Agilex FPGA processors][4], Optane memory, and more.
+
+This launch is the largest Xeon launch in the company’s history, with more than 50 processor designs across the Xeon 8200 and 9200 lines. While something like that can lead to confusion, many of these are specific to certain workloads instead of general-purpose processors.
+
+**[[Get certified as an Apple Technical Coordinator with this seven-part online course from PluralSight.][5] ]**
+
+Cascade Lake chips are the replacement for the previous Skylake platform, and the mainstream Cascade Lake chips have the same architecture as the Purley motherboard used by Skylake. Like the current Xeon Scalable processors, they have up to 28 cores with up to 38.5 MB of L3 cache, but speeds and feeds have been bumped up.
+
+The Cascade Lake generation supports the new UPI (Ultra Path Interface) high-speed interconnect, up to six memory channels, AVX-512 support, and up to 48 PCIe lanes. Memory capacity has been doubled, from 768GB to 1.5TB of memory per socket. They work in the same socket as Purley motherboards and are built on a 14nm manufacturing process.
+
+Some of the new Xeons, however, can access up to 4.5TB of memory per processor: 1.5TB of memory and 3TB of Optane memory, the new persistent memory that sits between DRAM and NAND flash memory and acts as a massive cache for both.
+
+## Built-in fixes for Meltdown and Spectre vulnerabilities
+
+Most important, though, is that these new Xeons have built-in fixes for the Meltdown and Spectre vulnerabilities. There are existing fixes for the exploits, but they have the effect of reducing performance, which varies based on workload. Intel showed a slide at the event that shows the company is using a combination of firmware and software mitigation.
+
+New features also include Intel Deep Learning Boost (DL Boost), a technology developed to accelerate vector computing that Intel said makes this the first CPU with built-in inference acceleration for AI workloads. It works with the AVX-512 extension, which should make it ideal for machine learning scenarios.
+
+Most of the new Xeons are available now, except for the 9200 Platinum, which is coming in the next few months. Many Intel partners – Dell, Cray, Cisco, Supermicro – all have new products, with Supermicro launching more than 100 new products built around Cascade Lake.
+
+## Intel also rolls out Xeon D-1600 series processors
+
+In addition to its hot rod Xeons, Intel also rolled out the Xeon D-1600 series processors, a low power variant based on a completely different architecture. Xeon D-1600 series processors are designed for space and/or power constrained environments, such as edge network devices and base stations.
+
+Along with the new Xeons and FPGA chips, Intel also announced the Intel Ethernet 800 series adapter, which supports 25, 50 and 100 Gigabit transfer speeds.
+
+Thank you, AMD. This is what competition looks like.
+
+Join the Network World communities on [Facebook][6] and [LinkedIn][7] to comment on topics that are top of mind.
+
+--------------------------------------------------------------------------------
+
+via: https://www.networkworld.com/article/3386142/intel-unveils-an-epic-response-to-amds-server-push.html#tk.rss_all
+
+作者:[Andy Patrizio][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.networkworld.com/author/Andy-Patrizio/
+[b]: https://github.com/lujun9972
+[1]: https://images.idgesg.net/images/article/2019/04/intel-xeon-family-1-100792811-large.jpg
+[2]: https://www.networkworld.com/article/3275367/what-s-quantum-computing-and-why-enterprises-need-to-care.html
+[3]: https://www.networkworld.com/article/3336921/intel-promotes-swan-to-ceo-bumps-off-itanium-and-eyes-mellanox.html
+[4]: https://www.networkworld.com/article/3386158/intels-agilex-fpga-family-targets-data-intensive-workloads.html
+[5]: https://pluralsight.pxf.io/c/321564/424552/7490?u=https%3A%2F%2Fwww.pluralsight.com%2Fpaths%2Fapple-certified-technical-trainer-10-11
+[6]: https://www.facebook.com/NetworkWorld/
+[7]: https://www.linkedin.com/company/network-world
diff --git a/sources/tech/20190403 Top Ten Reasons to Think Outside the Router -1- It-s Time for a Router Refresh.md b/sources/tech/20190403 Top Ten Reasons to Think Outside the Router -1- It-s Time for a Router Refresh.md
new file mode 100644
index 0000000000..72d566a7d0
--- /dev/null
+++ b/sources/tech/20190403 Top Ten Reasons to Think Outside the Router -1- It-s Time for a Router Refresh.md
@@ -0,0 +1,101 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Top Ten Reasons to Think Outside the Router #1: It’s Time for a Router Refresh)
+[#]: via: (https://www.networkworld.com/article/3386116/top-ten-reasons-to-think-outside-the-router-1-it-s-time-for-a-router-refresh.html#tk.rss_all)
+[#]: author: (Rami Rammaha https://www.networkworld.com/author/Rami-Rammaha/)
+
+Top Ten Reasons to Think Outside the Router #1: It’s Time for a Router Refresh
+======
+
+![istock][1]
+
+We’re now at the end of our homage to the iconic David Letterman Top Ten List segment from his former Late Show, as [Silver Peak][2] counts down the _Top Ten Reasons to Think Outside the Router._ Click for the [#2][3], [#3][4], [#4][5], [#5][6], [#6][7], [#7][8], [#8][9], [#9][10] and [#10][11] reasons to retire traditional branch routers.
+
+_**The #1 reason it’s time to retire conventional routers at the branch: your branch routers are coming due for a refresh – the perfect time to evaluate new options.**_
+
+Your WAN architecture is due for a branch router refresh! You’re under immense pressure to advance your organization’s digital transformation initiatives and deliver a high quality of experience to your users and customers. Your applications – at least SaaS apps – are all cloud-based. You know you need to move more quickly to keep pace with changing business requirements to realize the transformational promise of the cloud. And, you’re dealing with shifting traffic patterns and an insatiable appetite for more bandwidth at branch sites to support your users and applications. Finally, you know your IT budget for networking isn’t going to increase.
+
+_So, what’s next?_ You really only have three options when it comes to refreshing your WAN. You can continue to try and stretch your conventional router-centric model. You can choose a basic [SD-WAN][12] model that may or may not be good enough. Or you can take a new approach and deploy a business-driven SD-WAN edge platform.
+
+### **The pitfalls of a router-centric model**
+
+![][13]
+
+The router-centric approach worked well when enterprise applications were hosted in the data center; before the advent of the cloud. All traffic was routed directly from branch offices to the data center. With the emergence of the cloud, businesses were forced to conform to the constraints of the network when deploying new applications or making network changes. This is a bottoms-up device centric approach in which the network becomes a bottleneck to the business.
+
+A router-centric approach requires manual device-by-device configuration that results in endless hours of manual programming, making it extremely difficult for network administrators to scale without experiencing major challenges in configuration, outages and troubleshooting. Any changes that arise when deploying a new application or changing a QoS or security policy, once again requires manually programming every router at every branch across the network. Re-programming is time consuming and requires utilizing a complex, cumbersome CLI, further adding to the inefficiencies of the model. In short, the router-centric WAN has hit the wall.
+
+### **Basic SD-WAN, a step in the right direction**
+
+![][14]
+
+In this model, businesses realize the benefit of foundational features, but this model falls short of the goal of a fully automated, business-driven network. A basic SD-WAN approach is unable to provide what the business really needs, including the ability to deliver the best Quality of Experience for users.
+
+Some of the basic SD-WAN features include the ability to use multiple forms of transport, path selection, centralized management, zero-touch provisioning and encrypted VPN overlays. However, a basic SD-WAN lacks in many areas:
+
+ * Limited end-to-end orchestration of WAN edge network functions
+ * Rudimentary path selection with traffic steering limited to pre-defined rules
+ * Long fail-over times in response to WAN transport outages
+ * Inability to use links when they experience brownouts due to link congestion or packet loss
+ * Fixed application definitions and manually scripted ACLs to control traffic steering across the internet
+
+
+
+### **The solution: shift to a business-first networking model**
+
+![][15]
+
+In this model, the network enables the business. The WAN is transformed into a business accelerant that is fully automated and continuous, giving every application the resources it truly needs while delivering 10x the bandwidth for the same budget – ultimately achieving the highest quality of experience to users and IT alike. With a business-first networking model, the network functions (SD-WAN, firewall, segmentation, routing, WAN optimization and application visibility and control) are unified in a single platform and are centrally orchestrated and managed. Top-down business intent is the driver, enabling businesses to unlock the full transformational promise of the cloud.
+
+The business-driven [Silver Peak® EdgeConnect™ SD-WAN][16] edge platform was built for the cloud, enabling enterprises to liberate their applications from the constraints of existing WAN approaches. EdgeConnect offers the following advanced capabilities:
+
+1\. Automates traffic steering and security policy enforcement based on business intent instead of TCP/IP addresses, delivering the highest Quality of Experience for users
+
+2\. Actively embraces broadband to increase application performance and availability while lowering costs
+
+3\. Securely and directly connect branch users to SaaS and IaaS cloud services
+
+4\. Increases operational efficiency while increasing business agility and time-to-market via centralized orchestration
+
+Silver Peak has more than 1,000 enterprise customer deployments across a range of vertical industries. Bentley Systems, [Nuffield Health][17] and [Solis Mammography][18] have all realized tangible business outcomes from their EdgeConnect deployments.
+
+![][19]
+
+Learn why the time is now to [think outside the router][20]!
+
+--------------------------------------------------------------------------------
+
+via: https://www.networkworld.com/article/3386116/top-ten-reasons-to-think-outside-the-router-1-it-s-time-for-a-router-refresh.html#tk.rss_all
+
+作者:[Rami Rammaha][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.networkworld.com/author/Rami-Rammaha/
+[b]: https://github.com/lujun9972
+[1]: https://images.idgesg.net/images/article/2019/04/istock-478729482-100792542-large.jpg
+[2]: https://www.silver-peak.com/why-silver-peak
+[3]: http://blog.silver-peak.com/think-outside-the-router-reason-2-simplify-and-consolidate-the-wan-edge
+[4]: http://blog.silver-peak.com/think-outside-the-router-reason-3-mpls-contract-renewal
+[5]: http://blog.silver-peak.com/top-ten-reasons-to-think-outside-the-router-4-broadband-is-used-only-for-failover
+[6]: http://blog.silver-peak.com/think-outside-the-router-reason-5-manual-cli-based-configuration-and-management
+[7]: http://blog.silver-peak.com/https-blog-silver-peak-com-think-outside-the-router-reason-6
+[8]: http://blog.silver-peak.com/think-outside-the-router-reason-7-exorbitant-router-support-and-maintenance-costs
+[9]: http://blog.silver-peak.com/think-outside-the-router-reason-8-garbled-voip-pixelated-video
+[10]: http://blog.silver-peak.com/think-outside-router-reason-9-sub-par-saas-performance
+[11]: http://blog.silver-peak.com/think-outside-router-reason-10-its-getting-cloudy
+[12]: https://www.silver-peak.com/sd-wan/sd-wan-explained
+[13]: https://images.idgesg.net/images/article/2019/04/1_router-centric-vs-business-first-100792538-medium.jpg
+[14]: https://images.idgesg.net/images/article/2019/04/2_basic-sd-wan-vs-business-first-100792539-medium.jpg
+[15]: https://images.idgesg.net/images/article/2019/04/3_bus-first-networking-model-100792540-large.jpg
+[16]: https://www.silver-peak.com/products/unity-edge-connect
+[17]: https://www.silver-peak.com/resource-center/nuffield-health-deploys-uk-wide-sd-wan-silver-peak
+[18]: https://www.silver-peak.com/resource-center/national-leader-mammography-services-accelerates-access-life-critical-scans
+[19]: https://images.idgesg.net/images/article/2019/04/4_real-world-business-outcomes-100792541-large.jpg
+[20]: https://www.silver-peak.com/think-outside-router
diff --git a/sources/tech/20190403 Use Git as the backend for chat.md b/sources/tech/20190403 Use Git as the backend for chat.md
new file mode 100644
index 0000000000..e564bbc6e7
--- /dev/null
+++ b/sources/tech/20190403 Use Git as the backend for chat.md
@@ -0,0 +1,141 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Use Git as the backend for chat)
+[#]: via: (https://opensource.com/article/19/4/git-based-chat)
+[#]: author: (Seth Kenlon https://opensource.com/users/seth)
+
+Use Git as the backend for chat
+======
+GIC is a prototype chat application that showcases a novel way to use Git.
+![Team communication, chat][1]
+
+[Git][2] is one of those rare applications that has managed to encapsulate so much of modern computing into one program that it ends up serving as the computational engine for many other applications. While it's best-known for tracking source code changes in software development, it has many other uses that can make your life easier and more organized. In this series leading up to Git's 14th anniversary on April 7, we'll share seven little-known ways to use Git. Today, we'll look at GIC, a Git-based chat application
+
+### Meet GIC
+
+While the authors of Git probably expected frontends to be created for Git, they undoubtedly never expected Git would become the backend for, say, a chat client. Yet, that's exactly what developer Ephi Gabay did with his experimental proof-of-concept [GIC][3]: a chat client written in [Node.js][4] using Git as its backend database.
+
+GIC is by no means intended for production use. It's purely a programming exercise, but it's one that demonstrates the flexibility of open source technology. What's astonishing is that the client consists of just 300 lines of code, excluding the Node libraries and Git itself. And that's one of the best things about the chat client and about open source; the ability to build upon existing work. Seeing is believing, so you should give GIC a look for yourself.
+
+### Get set up
+
+GIC uses Git as its engine, so you need an empty Git repository to serve as its chatroom and logger. The repository can be hosted anywhere, as long as you and anyone who needs access to the chat service has access to it. For instance, you can set up a Git repository on a free Git hosting service like GitLab and grant chat users contributor access to the Git repository. (They must be able to make commits to the repository, because each chat message is a literal commit.)
+
+If you're hosting it yourself, create a centrally located bare repository. Each user in the chat must have an account on the server where the bare repository is located. You can create accounts specific to Git with Git hosting software like [Gitolite][5] or [Gitea][6], or you can give them individual user accounts on your server, possibly using **git-shell** to restrict their access to Git.
+
+Performance is best on a self-hosted instance. Whether you host your own or you use a hosting service, the Git repository you create must have an active branch, or GIC won't be able to make commits as users chat because there is no Git HEAD. The easiest way to ensure that a branch is initialized and active is to commit a README or license file upon creation. If you don't do that, you can create and commit one after the fact:
+
+```
+$ echo "chat logs" > README
+$ git add README
+$ git commit -m 'just creating a HEAD ref'
+$ git push -u origin HEAD
+```
+
+### Install GIC
+
+Since GIC is based on Git and written in Node.js, you must first install Git, Node.js, and the Node package manager, npm (which should be bundled with Node). The command to install these differs depending on your Linux or BSD distribution, but here's an example command on Fedora:
+
+```
+$ sudo dnf install git nodejs
+```
+
+If you're not running Linux or BSD, follow the installation instructions on [git-scm.com][7] and [nodejs.org][8].
+
+There's no install process, as such, for GIC. Each user (Alice and Bob, in this example) must clone the repository to their hard drive:
+
+```
+$ git cone https://github.com/ephigabay/GIC GIC
+```
+
+Change directory into the GIC directory and install the Node.js dependencies with **npm** :
+
+```
+$ cd GIC
+$ npm install
+```
+
+Wait for the Node modules to download and install.
+
+### Configure GIC
+
+The only configuration GIC requires is the location of your Git chat repository. Edit the **config.js** file:
+
+```
+module.exports = {
+gitRepo: '[seth@example.com][9]:/home/gitchat/chatdemo.git',
+messageCheckInterval: 500,
+branchesCheckInterval: 5000
+};
+```
+
+
+Test your connection to the Git repository before trying GIC, just to make sure your configuration is sane:
+
+```
+$ git clone --quiet seth@example.com:/home/gitchat/chatdemo.git > /dev/null
+```
+
+Assuming you receive no errors, you're ready to start chatting.
+
+### Chat with Git
+
+From within the GIC directory, start the chat client:
+
+```
+$ npm start
+```
+
+When the client first launches, it must clone the chat repository. Since it's nearly an empty repository, it won't take long. Type your message and press Enter to send a message.
+
+![GIC][10]
+
+A Git-based chat client. What will they think of next?
+
+As the greeting message says, a branch in Git serves as a chatroom or channel in GIC. There's no way to create a new branch from within the GIC UI, but if you create one in another terminal session or in a web UI, it shows up immediately in GIC. It wouldn't take much to patch some IRC-style commands into GIC.
+
+After chatting for a while, take a look at your Git repository. Since the chat happens in Git, the repository itself is also a chat log:
+
+```
+$ git log --pretty=format:"%p %cn %s"
+4387984 Seth Kenlon Hey Chani, did you submit a talk for All Things Open this year?
+36369bb Chani No I didn't get a chance. Did you?
+[...]
+```
+
+### Exit GIC
+
+Not since Vim has there been an application as difficult to stop as GIC. You see, there is no way to stop GIC. It will continue to run until it is killed. When you're ready to stop GIC, open another terminal tab or window and issue this command:
+
+```
+$ kill `pgrep npm`
+```
+
+GIC is a novelty. It's a great example of how an open source ecosystem encourages and enables creativity and exploration and challenges us to look at applications from different angles. Try GIC out. Maybe it will give you ideas. At the very least, it's a great excuse to spend an afternoon with Git.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/4/git-based-chat
+
+作者:[Seth Kenlon (Red Hat, Community Moderator)][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/seth
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/talk_chat_team_mobile_desktop.png?itok=d7sRtKfQ (Team communication, chat)
+[2]: https://git-scm.com/
+[3]: https://github.com/ephigabay/GIC
+[4]: https://nodejs.org/en/
+[5]: http://gitolite.com
+[6]: http://gitea.io
+[7]: http://git-scm.com
+[8]: http://nodejs.org
+[9]: mailto:seth@example.com
+[10]: https://opensource.com/sites/default/files/uploads/gic.jpg (GIC)
diff --git a/sources/tech/20190404 9 features developers should know about Selenium IDE.md b/sources/tech/20190404 9 features developers should know about Selenium IDE.md
new file mode 100644
index 0000000000..b099da68e2
--- /dev/null
+++ b/sources/tech/20190404 9 features developers should know about Selenium IDE.md
@@ -0,0 +1,158 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (9 features developers should know about Selenium IDE)
+[#]: via: (https://opensource.com/article/19/4/features-selenium-ide)
+[#]: author: (Al Sargent https://opensource.com/users/alsargent)
+
+9 features developers should know about Selenium IDE
+======
+The new Selenium IDE brings the benefits of functional test automation
+to many IT professionals—and to frontend developers specifically.
+![magnifying glass on computer screen][1]
+
+There has long been a stigma associated with using record-and-playback tools for testing rather than scripted QA automation tools like [Selenium Webdriver][2], [Cypress][3], and [WebdriverIO][4].
+
+Record-and-playbook tools are perceived to suffer from many issues, including a lack of cross-browser support, no way to run scripts in parallel or from CI build scripts, poor support for responsive web apps, and no way to quickly diagnose frontend bugs.
+
+Needless to say, it's been somewhat of a rough road for these tools, and after Selenium IDE [went end-of-life][5] in 2017, many thought the road for record and playback would end altogether.
+
+Well, it turns out this perception was wrong. Not long after the Selenium IDE project was discontinued, my colleagues at [Applitools approached the Selenium open source community][6] to see how they could help.
+
+Since then, much of Selenium IDE's code has been revamped. The code is now freely available on GitHub under an Apache 2.0 license, managed by the Selenium community, and supported by [two full-time engineers][7], one of whom literally wrote the book on [Selenium testing][8].
+
+![Selenium IDE's GitHub repository][9]
+
+The new Selenium IDE brings the benefits of functional test automation to many IT professionals—and to frontend developers specifically. Here are nine things developers should know about the new Selenium IDE.
+
+### 1\. Selenium IDE is now cross-browser
+
+When the record-and-playback tool first came out in 2006, Firefox was the shiny new browser it hitched its wagon to, and it remained that way for a decade. No more! Selenium IDE is now available as a [Google Chrome Extension][10] and [Firefox Add-on][11].
+
+Even better, Selenium IDE can run its tests on Selenium WebDriver servers by using Selenium IDE's new command-line test runner, [SIDE Runner][12]. SIDE Runner blends elements of Selenium IDE and Selenium Webdriver. It takes a Selenium IDE script, saved as a [**.side** file][13], and runs it using browser drivers such as [ChromeDriver][14], [EdgeDriver][15], Firefox's [Geckodriver][16], [IEDriver][17], and [SafariDriver][18].
+
+SIDE Runner and the other drivers above are available as [straightforward npm installs][12]. Here's what it looks like in action.
+
+![SIDE Runner][19]
+
+### 2\. No more brittle functional tests
+
+For years, brittle tests have been an issue for functional tests—whether you record them or code them by hand. Now that developers are releasing new features more frequently, their user interface (UI) code is constantly changing as well. When a UI changes, object locators often change, too.
+
+Selenium IDE fixes that by capturing multiple object locators when you record your script. During playback, if Selenium IDE can't find one locator, it tries each of the other locators until it finds one that works. Your test will fail only if none of the locators work. This doesn't guarantee scripts will always play back, but it does insulate scripts against numerous changes. As you can see below, Selenium IDE captures linkText, an xPath expression, and CSS-based locators.
+
+![Selenium IDE captures linkText, an xPath expression, and CSS-based locators][20]
+
+### 3\. Conditional logic to handle UI features
+
+When testing web apps, scripts have to handle intermittent UI elements that can randomly appear in your app. These come in the form of cookie notices, popups for special offers, quote requests, newsletter subscriptions, paywall notifications, adblocker requests, and more.
+
+Conditional logic is a great way to handle these intermittent UI features. Developers can easily insert conditional logic—also called control flow—into Selenium IDE scripts. [Here are details][21] and how it looks.
+
+![Selenium IDE's Conditional logic][22]
+
+### 4\. Support for embedded code
+
+As broad as the new [Selenium IDE API][23] is, it doesn't do everything. For this reason, Selenium IDE has **[**execute** **script**][24]** and **[execute async script][25]** commands that let your script call a JavaScript snippet.
+
+This provides developers with a tremendous amount of flexibility to take advantage of JavaScript's flexibility and wide range of libraries. To use it, click on the test step where you want JavaScript to run, choose **Insert New Command** , and enter **execute script** or **execute async script** in the command field, as shown below.
+
+![Selenium IDE's command line][26]
+
+### 5\. Selenium IDE runs from CI build scripts
+
+Because SIDE Runner is called from the command line, you can easily fit it into CI build scripts, so long as the CI server can call **selenium-ide-runner** and upload the **.side** file (the test script) as a build artifact. For example, here's how to upload an input file in [Jenkins][27], [Travis][28], and [CircleCI][29].
+
+This means Selenium IDE can be better integrated into the software development technology stack. In addition, the scripts created by less-technical QA team members—including business analysts—can run with every build. This helps better align QA with the developer so fewer bugs escape into production.
+
+### 6\. Support for third-party plugins
+
+Imagine companies building plugins to have Selenium IDE do all kinds of things, like uploading scripts to a functional testing cloud, a load testing cloud, or a production application monitoring service.
+
+Plenty of companies have integrated Selenium Webdriver into their offerings, and I bet the same will happen with Selenium IDE. You can also [build your own Selenium IDE plugin][30].
+
+### 7\. Visual UI testing
+
+Speaking of new plugins, Applitools introduced a new Selenium IDE plugin to add artificial intelligence-powered visual validations to the equation. Available through the [Chrome][31] and [Firefox][32] stores via a three-second install, just plug in the Applitools API key and go.
+
+Visual checkpoints are a great way to ensure a UI renders correctly. Rather than a bunch of assert statements on all the UI elements—which would be a pain to maintain—one visual checkpoint checks all your page elements.
+
+Best of all, visual AI looks at a web app the same way a human does, ignoring minor differences. This means fewer fake bugs to frustrate a development team.
+
+### 8\. Visually test responsive web apps
+
+When testing the visual layout of [responsive web apps][33], it's best to do it on a wide range of screen sizes (also called viewports) to ensure nothing appears out of whack. It's all too easy for responsive web bugs to creep in, and when they do, the problems can range from merely cosmetic to business stopping.
+
+When you use visual UI testing for Selenium IDE, you can visually test your webpages on the Applitools [Visual Grid][34], which has more than 100 combinations of browsers, emulated devices, and viewport sizes.
+
+Once tests run on the Visual Grid, developers can easily check the test results on all the various combinations.
+
+![Selenium IDE's Visual Grid][35]
+
+### 9\. Responsive web bugs have nowhere to hide
+
+Selenium IDE can help pinpoint the cause of frontend bugs. Every Selenium IDE script that's run with the Visual Grid can be analyzed with Applitools' [Root Cause Analysis][36]. It's no longer enough to find a bug—developers also need to fix it.
+
+When a visual bug is discovered, it can be clicked on and just the relevant (not all) Document Object Model (DOM) and CSS differences will be displayed.
+
+![Finding visual bugs][37]
+
+In summary, much like many emerging technologies in software development, Selenium IDE is part of a larger trend of making life easier and simpler for technical professionals and enabling them to spend more time and effort on creating code for even faster feedback.
+
+* * *
+
+_This article is based on[16 reasons why to use Selenium IDE in 2019 (and 2 why not)][38] originally published on the Applitools blog._
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/4/features-selenium-ide
+
+作者:[Al Sargent][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/alsargent
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/search_find_code_issue_bug_programming.png?itok=XPrh7fa0 (magnifying glass on computer screen)
+[2]: https://www.seleniumhq.org/projects/webdriver/
+[3]: https://www.cypress.io/
+[4]: https://webdriver.io/
+[5]: https://seleniumhq.wordpress.com/2017/08/09/firefox-55-and-selenium-ide/
+[6]: https://seleniumhq.wordpress.com/2018/08/06/selenium-ide-tng/
+[7]: https://github.com/SeleniumHQ/selenium-ide/graphs/contributors
+[8]: http://davehaeffner.com/
+[9]: https://opensource.com/sites/default/files/uploads/selenium_ide_github_graphic_1.png (Selenium IDE's GitHub repository)
+[10]: https://chrome.google.com/webstore/detail/selenium-ide/mooikfkahbdckldjjndioackbalphokd
+[11]: https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/
+[12]: https://www.seleniumhq.org/selenium-ide/docs/en/introduction/command-line-runner/
+[13]: https://www.seleniumhq.org/selenium-ide/docs/en/introduction/command-line-runner/#launching-the-runner
+[14]: http://chromedriver.chromium.org/
+[15]: https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
+[16]: https://github.com/mozilla/geckodriver
+[17]: https://github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver
+[18]: https://developer.apple.com/documentation/webkit/testing_with_webdriver_in_safari
+[19]: https://opensource.com/sites/default/files/uploads/selenium_ide_side_runner_2.png (SIDE Runner)
+[20]: https://opensource.com/sites/default/files/uploads/selenium_ide_linktext_3.png (Selenium IDE captures linkText, an xPath expression, and CSS-based locators)
+[21]: https://www.seleniumhq.org/selenium-ide/docs/en/introduction/control-flow/
+[22]: https://opensource.com/sites/default/files/uploads/selenium_ide_conditional_logic_4.png (Selenium IDE's Conditional logic)
+[23]: https://www.seleniumhq.org/selenium-ide/docs/en/api/commands/
+[24]: https://www.seleniumhq.org/selenium-ide/docs/en/api/commands/#execute-script
+[25]: https://www.seleniumhq.org/selenium-ide/docs/en/api/commands/#execute-async-script
+[26]: https://opensource.com/sites/default/files/uploads/selenium_ide_command_line_5.png (Selenium IDE's command line)
+[27]: https://stackoverflow.com/questions/27491789/how-to-upload-a-generic-file-into-a-jenkins-job
+[28]: https://docs.travis-ci.com/user/uploading-artifacts/
+[29]: https://circleci.com/docs/2.0/artifacts/
+[30]: https://www.seleniumhq.org/selenium-ide/docs/en/plugins/plugins-getting-started/
+[31]: https://chrome.google.com/webstore/detail/applitools-for-selenium-i/fbnkflkahhlmhdgkddaafgnnokifobik
+[32]: https://addons.mozilla.org/en-GB/firefox/addon/applitools-for-selenium-ide/
+[33]: https://en.wikipedia.org/wiki/Responsive_web_design
+[34]: https://applitools.com/visualgrid
+[35]: https://opensource.com/sites/default/files/uploads/selenium_ide_visual_grid_6.png (Selenium IDE's Visual Grid)
+[36]: https://applitools.com/root-cause-analysis
+[37]: https://opensource.com/sites/default/files/uploads/seleniumice_rootcauseanalysis_7.png (Finding visual bugs)
+[38]: https://applitools.com/blog/why-selenium-ide-2019
diff --git a/sources/tech/20190404 Edge Computing is Key to Meeting Digital Transformation Demands - and Partnerships Can Help Deliver Them.md b/sources/tech/20190404 Edge Computing is Key to Meeting Digital Transformation Demands - and Partnerships Can Help Deliver Them.md
new file mode 100644
index 0000000000..b2f8a59ab4
--- /dev/null
+++ b/sources/tech/20190404 Edge Computing is Key to Meeting Digital Transformation Demands - and Partnerships Can Help Deliver Them.md
@@ -0,0 +1,72 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Edge Computing is Key to Meeting Digital Transformation Demands – and Partnerships Can Help Deliver Them)
+[#]: via: (https://www.networkworld.com/article/3387140/edge-computing-is-key-to-meeting-digital-transformation-demands-and-partnerships-can-help-deliver-t.html#tk.rss_all)
+[#]: author: (Rob McKernan https://www.networkworld.com/author/Rob-McKernan/)
+
+Edge Computing is Key to Meeting Digital Transformation Demands – and Partnerships Can Help Deliver Them
+======
+
+### Organizations in virtually every vertical industry are undergoing a digital transformation in an attempt to take advantage of edge computing technology
+
+![Getty Images][1]
+
+Organizations in virtually every vertical industry are undergoing a digital transformation in an attempt to take advantage of [edge computing][2] technology to make their businesses more efficient, innovative and profitable. In the process, they’re coming face to face with challenges ranging from time to market to reliability of IT infrastructure.
+
+It’s a complex problem, especially when you consider the scope of what digital transformation entails. “Digital transformation is not simply a list of IT projects, it involves completely rethinking how an organization uses technology to pursue new revenue streams, products, services, and business models,” as the [research firm IDC says][3].
+
+Companies will be spending more than $650 billion per year on digital transformation efforts by 2024, a CAGR of more than 18.5% from 2018, according to the research firm [Market Research Engine][4].
+
+The drivers behind all that spending include Internet of Things (IoT) technology, which involves collecting data from machines and sensors covering every aspect of the organization. That is contributing to Big Data – the treasure trove of data that companies mine to find the keys to efficiency, opportunity and more. Artificial intelligence and machine learning are crucial to that effort, helping companies make sense of the mountains of data they’re creating and consuming, and to find opportunities.
+
+**Requirements for Edge Computing**
+
+All of these trends are creating the need for more and more compute power and data storage. And much of it needs to be close to the source of the data, and to those employees who are working with it. In other words, it’s driving the need for companies to build edge data centers or edge computing sites.
+
+Physically, these edge computing sites bear little resemblance to large, centralized data centers, but they have many of the same requirements in terms of performance, reliability, efficiency and security. Given they are typically in locations with few if any IT personnel, the data centers must have a high degree of automation and remote management capabilities. And to meet business requirements, they must be built quickly.
+
+**Answering the Call at the Edge**
+
+These are complex requirements, but if companies are to meet time-to-market goals and deal with the lack of IT personnel at the edge, they demand simple solutions.
+
+One solution is integration. We’re seeing this already in the IT space, with vendors delivering hyper-converged infrastructure that combines servers, storage, networking and software that is tightly integrated and delivered in a single enclosure. This saves IT groups valuable time in terms of procuring and configuring equipment and makes it far easier to manage over the long term.
+
+Now we’re seeing the same strategy applied to edge data centers. Prefabricated, modular data centers are an ideal solution for delivering edge data center capacity quickly and reliably. All the required infrastructure – power, cooling, racks, UPSs – can be configured and installed in a factory and delivered as a single, modular unit to the data center site (or multiple modules, depending on requirements).
+
+Given they’re built in a factory under controlled conditions, modular data centers are more reliable over the long haul. They can be configured with management software built-in, enabling remote management capabilities and a high degree of automation. And they can be delivered in weeks or months, not years – and in whatever size is required, including small “micro” data centers.
+
+Few companies, however, have all the components required to deliver a complete, functional data center, not to mention the expertise required to install and configure it. So, it takes effective partnerships to deliver complete edge data center solutions.
+
+**Tech Data Partnership Delivers at the Edge **
+
+APC by Schneider Electric has a long history of partnering to deliver complete solutions that address customer needs. Of the thousands of partnerships it has established over the years, the [25-year partnership][5] with [Tech Data][6] is particularly relevant for the digital transformation era.
+
+Tech Data is a $36.8 billion, Fortune 100 company that has established itself as the world’s leading end-to-end IT distributor. Power and physical infrastructure specialists from Tech Data team up with their counterparts from APC to deliver innovative solutions, including modular and [micro data centers][7]. Many of these solutions are pre-certified by major alliance partners, including IBM, HPE, Cisco, Nutanix, Dell EMC and others.
+
+To learn more, [access the full story][8] that explains how the Tech Data and APC partnership helps deliver [Certainty in a Connected World][9] and effective edge computing solutions that meet today’s time to market requirements.
+
+--------------------------------------------------------------------------------
+
+via: https://www.networkworld.com/article/3387140/edge-computing-is-key-to-meeting-digital-transformation-demands-and-partnerships-can-help-deliver-t.html#tk.rss_all
+
+作者:[Rob McKernan][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.networkworld.com/author/Rob-McKernan/
+[b]: https://github.com/lujun9972
+[1]: https://images.idgesg.net/images/article/2019/04/gettyimages-494323751-942x445-100792905-large.jpg
+[2]: https://www.apc.com/us/en/solutions/business-solutions/edge-computing.jsp
+[3]: https://www.idc.com/getdoc.jsp?containerId=US43985717
+[4]: https://www.marketresearchengine.com/digital-transformation-market
+[5]: https://www.apc.com/us/en/partners-alliances/partners/tech-data-and-apc-partnership-drives-edge-computing-success/full-resource.jsp
+[6]: https://www.techdata.com/
+[7]: https://www.apc.com/us/en/solutions/business-solutions/micro-data-centers.jsp
+[8]: https://www.apc.com/us/en/partners-alliances/partners/tech-data-and-apc-partnership-drives-edge-computing-success/index.jsp
+[9]: https://www.apc.com/us/en/who-we-are/certainty-in-a-connected-world.jsp
diff --git a/sources/tech/20190404 Intel formally launches Optane for data center memory caching.md b/sources/tech/20190404 Intel formally launches Optane for data center memory caching.md
new file mode 100644
index 0000000000..3ec4b4600e
--- /dev/null
+++ b/sources/tech/20190404 Intel formally launches Optane for data center memory caching.md
@@ -0,0 +1,73 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Intel formally launches Optane for data center memory caching)
+[#]: via: (https://www.networkworld.com/article/3387117/intel-formally-launches-optane-for-data-center-memory-caching.html#tk.rss_all)
+[#]: author: (Andy Patrizio https://www.networkworld.com/author/Andy-Patrizio/)
+
+Intel formally launches Optane for data center memory caching
+======
+
+### Intel formally launched the Optane persistent memory product line, which includes 3D Xpoint memory technology. The Intel-only solution is meant to sit between DRAM and NAND and to speed up performance.
+
+![Intel][1]
+
+As part of its [massive data center event][2] on Tuesday, Intel formally launched the Optane persistent memory product line. It had been out for a while, but the current generation of Xeon server processors could not fully utilize it. The new Xeon 8200 and 9200 lines take full advantage of it.
+
+And since Optane is an Intel product (co-developed with Micron), that means AMD and Arm server processors are out of luck.
+
+As I have [stated in the past][3], Optane DC Persistent Memory uses 3D Xpoint memory technology that Intel developed with Micron Technology. 3D Xpoint is a non-volatile memory type that is much faster than solid-state drives (SSD), almost at the speed of DRAM, but it has the persistence of NAND flash.
+
+**[ Read also:[Why NVMe? Users weigh benefits of NVMe-accelerated flash storage][4] and [IDC’s top 10 data center predictions][5] | Get regularly scheduled insights [Sign up for Network World newsletters][6] ]**
+
+The first 3D Xpoint products were SSDs called Intel’s ["ruler,"][7] because they were designed in a long, thin format similar to the shape of a ruler. They were designed that way to fit in 1u server carriages. As part of Tuesday’s announcement, Intel introduced the new Intel SSD D5-P4326 'Ruler' SSD, using four-cell or QLC 3D NAND memory, with up to 1PB of storage in a 1U design.
+
+Optane DC Persistent Memory will be available in DIMM capacities of 128GB on up to 512GB initially. That’s two to four times what you can get with DRAM, said Navin Shenoy, executive vice president and general manager of Intel’s Data Center Group, who keynoted the event.
+
+“We expect system capacity in a server system to scale to 4.5 terabytes per socket or 36 TB in an 8-socket system. That’s three times larger than what we were able to do with the first-generation of Xeon Scalable,” he said.
+
+## Intel Optane memory uses and speed
+
+Optane runs in two different modes: Memory Mode and App Direct Mode. Memory mode is what I have been describing to you, where Optane memory exists “above” the DRAM and acts as a cache. In App Direct mode, the DRAM and Optane DC Persistent Memory are pooled together to maximize the total capacity. Not every workload is ideal for this kind of configuration, so it should be used in applications that are not latency-sensitive. The primary use case for Optane, as Intel is promoting it, is Memory Mode.
+
+**[[Get certified as an Apple Technical Coordinator with this seven-part online course from PluralSight.][8] ]**
+
+When 3D Xpoint was initially announced a few years back, Intel claimed it was 1,000 times faster than NAND, with 1000 times the endurance, and 10 times the density potential of DRAM. Well that was a little exaggerated, but it does have some intriguing elements.
+
+Optane memory, when used in 256B contiguous 4 cacheline, can achieve read speeds of 8.3GB/sec and write speeds of 3.0GB/sec. Compare that with the read/write speed of 500 or so MB/sec for a SATA SSD, and you can see the performance gain. Optane, remember, is feeding memory, so it caches frequently accessed SSD content.
+
+This is the key takeaware of Optane DC. It will keep very large data sets very close to memory, and hence the CPU, with low latency while at the same time minimizing the need to access the slower storage subsystem, whether it’s SSD or HDD. It now offers the possibility of putting multiple terabytes of data very close to the CPU for much faster access.
+
+## One challenge with Optane memory
+
+The only real challenge is that Optane goes into DIMM slots, which is where memory goes. Now some motherboards come with as many as 16 DIMM slots per CPU socket, but that’s still board real estate that the customer and OEM provider will need to balance out: Optane vs. memory. There are some Optane drives in PCI Express format, which alleviate the memory crowding on the motherboard.
+
+3D Xpoint also offers higher endurance than traditional NAND flash memory due to the way it writes data. Intel promises a five-year warranty with its Optane, while a lot of SSDs offer only three years.
+
+Join the Network World communities on [Facebook][9] and [LinkedIn][10] to comment on topics that are top of mind.
+
+--------------------------------------------------------------------------------
+
+via: https://www.networkworld.com/article/3387117/intel-formally-launches-optane-for-data-center-memory-caching.html#tk.rss_all
+
+作者:[Andy Patrizio][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.networkworld.com/author/Andy-Patrizio/
+[b]: https://github.com/lujun9972
+[1]: https://images.idgesg.net/images/article/2018/06/intel-optane-persistent-memory-100760427-large.jpg
+[2]: https://www.networkworld.com/article/3386142/intel-unveils-an-epic-response-to-amds-server-push.html
+[3]: https://www.networkworld.com/article/3279271/intel-launches-optane-the-go-between-for-memory-and-storage.html
+[4]: https://www.networkworld.com/article/3290421/why-nvme-users-weigh-benefits-of-nvme-accelerated-flash-storage.html
+[5]: https://www.networkworld.com/article/3242807/data-center/top-10-data-center-predictions-idc.html#nww-fsb
+[6]: https://www.networkworld.com/newsletters/signup.html#nww-fsb
+[7]: https://www.theregister.co.uk/2018/02/02/ruler_and_miniruler_ssd_formats_look_to_banish_diskstyle_drives/
+[8]: https://pluralsight.pxf.io/c/321564/424552/7490?u=https%3A%2F%2Fwww.pluralsight.com%2Fpaths%2Fapple-certified-technical-trainer-10-11
+[9]: https://www.facebook.com/NetworkWorld/
+[10]: https://www.linkedin.com/company/network-world
diff --git a/sources/tech/20190404 Running LEDs in reverse could cool computers.md b/sources/tech/20190404 Running LEDs in reverse could cool computers.md
new file mode 100644
index 0000000000..2eb3c66c6b
--- /dev/null
+++ b/sources/tech/20190404 Running LEDs in reverse could cool computers.md
@@ -0,0 +1,68 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Running LEDs in reverse could cool computers)
+[#]: via: (https://www.networkworld.com/article/3386876/running-leds-in-reverse-could-cool-computers.html#tk.rss_all)
+[#]: author: (Patrick Nelson https://www.networkworld.com/author/Patrick-Nelson/)
+
+Running LEDs in reverse could cool computers
+======
+
+### The miniaturization of electronics is reaching its limits in part because of heat management. Many are now aggressively trying to solve the problem. A kind of reverse-running LED is one avenue being explored.
+
+![monsitj / Getty Images][1]
+
+The quest to find more efficient methods for cooling computers is almost as high on scientists’ agendas as the desire to discover better battery chemistries.
+
+More cooling is crucial for reducing costs. It would also allow for more powerful processing to take place in smaller spaces, where limited processing should be crunching numbers instead of making wasteful heat. It would stop heat-caused breakdowns, thereby creating longevity in components, and it would promote eco-friendly data centers — less heat means less impact on the environment.
+
+Removing heat from microprocessors is one angle scientists have been exploring, and they think they have come up with a simple, but unusual and counter-intuitive solution. They say that running a variant of a Light Emitting Diode (LED) with its electrodes reversed forces the component to act as if it were at an unusually low temperature. Placing it next to warmer electronics, then, with a nanoscale gap introduced, causes the LED to suck out the heat.
+
+**[ Read also:[IDC’s top 10 data center predictions][2] | Get regularly scheduled insights: [Sign up for Network World newsletters][3] ]**
+
+“Once the LED is reverse biased, it began acting as a very low temperature object, absorbing photons,” says Edgar Meyhofer, professor of mechanical engineering at University of Michigan, in a [press release][4] announcing the breakthrough. “At the same time, the gap prevents heat from traveling back, resulting in a cooling effect.”
+
+The researchers say the LED and the adjacent electrical device (in this case a calorimeter, usually used for measuring heat energy) have to be extremely close. They say they’ve been able to demonstrate cooling of six watts per meter-squared. That’s about the power of sunshine on the earth’s surface, they explain.
+
+Internet of things (IoT) devices and smartphones could be among those electronics that would ultimately benefit from the LED modification. Both kinds of devices require increasing computing power to be squashed into smaller spaces.
+
+“Removing the heat from the microprocessor is beginning to limit how much power can be squeezed into a given space,” the University of Michigan announcement says.
+
+### Materials Science and cooling computers
+
+[I’ve written before about new forms of computer cooling][5]. Exotic materials, derived from Materials Science, are among ideas being explored. Sodium bismuthide (Na3Bi) could be used in transistor design, the U.S. Department of Energy’s Lawrence Berkeley National Laboratory says. The new substance carries a charge and is importantly tunable; however, it doesn’t need to be chilled as superconductors currently do.
+
+In fact, that’s a problem with superconductors. They unfortunately need more cooling than most electronics — electrical resistance with the technology is expelled through extreme cooling.
+
+Separately, [researchers in Germany at the University of Konstanz][6] say they soon will have superconductor-driven computers without waste heat. They plan to use electron spin — a new physical dimension in electrons that could create efficiency gains. The method “significantly reduces the energy consumption of computing centers,” the university said in a press release last year.
+
+Another way to reduce heat could be [to replace traditional heatsinks with spirals and mazes][7] embedded on microprocessors. Miniscule channels printed on the chip itself could provide paths for coolant to travel, again separately, scientists from Binghamton University say.
+
+“The miniaturization of the semiconductor technology is approaching its physical limits,” the University of Konstanz says. Heat management is very much on scientists’ agenda now. It’s “one of the big challenges in miniaturization."
+
+Join the Network World communities on [Facebook][8] and [LinkedIn][9] to comment on topics that are top of mind.
+
+--------------------------------------------------------------------------------
+
+via: https://www.networkworld.com/article/3386876/running-leds-in-reverse-could-cool-computers.html#tk.rss_all
+
+作者:[Patrick Nelson][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.networkworld.com/author/Patrick-Nelson/
+[b]: https://github.com/lujun9972
+[1]: https://images.idgesg.net/images/article/2019/02/big_data_center_server_racks_storage_binary_analytics_by_monsitj_gettyimages-944444446_3x2-100787357-large.jpg
+[2]: https://www.networkworld.com/article/3242807/data-center/top-10-data-center-predictions-idc.html#nww-fsb
+[3]: https://www.networkworld.com/newsletters/signup.html#nww-fsb
+[4]: https://news.umich.edu/running-an-led-in-reverse-could-cool-future-computers/
+[5]: https://www.networkworld.com/article/3326831/computers-could-soon-run-cold-no-heat-generated.html
+[6]: https://www.uni-konstanz.de/en/university/news-and-media/current-announcements/news/news-in-detail/Supercomputer-ohne-Abwaerme/
+[7]: https://www.networkworld.com/article/3322956/chip-cooling-breakthrough-will-reduce-data-center-power-costs.html
+[8]: https://www.facebook.com/NetworkWorld/
+[9]: https://www.linkedin.com/company/network-world
diff --git a/sources/tech/20190404 Why blockchain (might be) coming to an IoT implementation near you.md b/sources/tech/20190404 Why blockchain (might be) coming to an IoT implementation near you.md
new file mode 100644
index 0000000000..f5915aebe7
--- /dev/null
+++ b/sources/tech/20190404 Why blockchain (might be) coming to an IoT implementation near you.md
@@ -0,0 +1,79 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Why blockchain (might be) coming to an IoT implementation near you)
+[#]: via: (https://www.networkworld.com/article/3386881/why-blockchain-might-be-coming-to-an-iot-implementation-near-you.html#tk.rss_all)
+[#]: author: (Jon Gold https://www.networkworld.com/author/Jon-Gold/)
+
+Why blockchain (might be) coming to an IoT implementation near you
+======
+
+![MF3D / Getty Images][1]
+
+Companies have found that IoT partners well with a host of other popular enterprise computing technologies of late, and blockchain – the innovative system of distributed trust most famous for underpinning cryptocurrencies – is no exception. Yet while the two phenomena can be complementary in certain circumstances, those expecting an explosion of blockchain-enabled IoT technologies probably shouldn’t hold their breath.
+
+Blockchain technology can be counter-intuitive to understand at a basic level, but it’s probably best thought of as a sort of distributed ledger keeping track of various transactions. Every “block” on the chain contains transactional records or other data to be secured against tampering, and is linked to the previous one by a cryptographic hash, which means that any tampering with the block will invalidate that connection. The nodes – which can be largely anything with a CPU in it – communicate via a decentralized, peer-to-peer network to share data and ensure the validity of the data in the chain.
+
+**[ Also see[What is edge computing?][2] and [How edge networking and IoT will reshape data centers][3].]**
+
+The system works because all the blocks have to agree with each other on the specifics of the data that they’re safeguarding, according to Nir Kshetri, a professor of management at the University of North Carolina – Greensboro. If someone attempts to alter a previous transaction on a given node, the rest of the data on the network pushes back. “The old record of the data is still there,” said Kshetri.
+
+That’s a powerful security technique – absent a bad actor successfully controlling all of the nodes on a given blockchain (the [famous “51% attack][4]”), the data protected by that blockchain can’t be falsified or otherwise fiddled with. So it should be no surprise that the use of blockchain is an attractive option to companies in some corners of the IoT world.
+
+Part of the reason for that, over and above the bare fact of blockchain’s ability to securely distribute trusted information across a network, is its place in the technology stack, according to Jay Fallah, CTO and co-founder of NXMLabs, an IoT security startup.
+
+“Blockchain stands at a very interesting intersection. Computing has accelerated in the last 15 years [in terms of] storage, CPU, etc, but networking hasn’t changed that much until recently,” he said. “[Blockchain]’s not a network technology, it’s not a data technology, it’s both.”
+
+### Blockchain and IoT**
+
+**
+
+Where blockchain makes sense as a part of the IoT world depends on who you speak to and what they are selling, but the closest thing to a general summation may have come from Allison Clift-Jenning, CEO of enterprise blockchain vendor Filament.
+
+“Anywhere where you've got people who are kind of wanting to trust each other, and have very archaic ways of doing it, that is usually a good place to start with use cases,” she said.
+
+One example, culled directly from Filament’s own customer base, is used car sales. Filament’s working with “a major Detroit automaker” to create a trusted-vehicle history platform, based on a device that plugs into the diagnostic port of a used car, pulls information from there, and writes that data to a blockchain. Just like that, there’s an immutable record of a used car’s history, including whether its airbags have ever been deployed, whether it’s been flooded, and so on. No unscrupulous used car lot or duplicitous former owner could change the data, and even unplugging the device would mean that there’s a suspicious blank period in the records.
+
+Most of present-day blockchain IoT implementation is about trust and the validation of data, according to Elvira Wallis, senior vice president and global head of IoT at SAP.
+
+“Most of the use cases that we have come across are in the realm of tracking and tracing items,” she said, giving the example of a farm-to-fork tracking system for high-end foodstuffs, using blockchain nodes mounted on crates and trucks, allowing for the creation of an un-fudgeable record of an item’s passage through transport infrastructure. (e.g., how long has this steak been refrigerated at such-and-such a temperature, how far has it traveled today, and so on.)
+
+### **Is using blockchain with IoT a good idea?**
+
+Different vendors sell different blockchain-based products for different use cases, which use different implementations of blockchain technology, some of which don’t bear much resemblance to the classic, linear, mined-transaction blockchain used in cryptocurrency.
+
+That means it’s a capability that you’d buy from a vendor for a specific use case, at this point. Few client organizations have the in-house expertise to implement a blockchain security system, according to 451 Research senior analyst Csilla Zsigri.
+
+The idea with any intelligent application of blockchain technology is to play to its strengths, she said, creating a trusted platform for critical information.
+
+“That’s where I see it really adding value, just in adding a layer of trust and validation,” said Zsigri.
+
+Yet while the basic idea of blockchain-enabled IoT applications is fairly well understood, it’s not applicable to every IoT use case, experts agree. Applying blockchain to non-transactional systems – although there are exceptions, including NXM Labs’ blockchain-based configuration product for IoT devices – isn’t usually the right move.
+
+If there isn’t a need to share data between two different parties – as opposed to simply moving data from sensor to back-end – blockchain doesn’t generally make sense, since it doesn’t really do anything for the key value-add present in most IoT implementations today: data analysis.
+
+“We’re still in kind of the early dial-up era of blockchain today,” said Clift-Jennings. “It’s slower than a typical database, it often isn't even readable, it often doesn't have a query engine tied to it. You don't really get privacy, by nature of it.”
+
+Join the Network World communities on [Facebook][5] and [LinkedIn][6] to comment on topics that are top of mind.
+
+--------------------------------------------------------------------------------
+
+via: https://www.networkworld.com/article/3386881/why-blockchain-might-be-coming-to-an-iot-implementation-near-you.html#tk.rss_all
+
+作者:[Jon Gold][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.networkworld.com/author/Jon-Gold/
+[b]: https://github.com/lujun9972
+[1]: https://images.idgesg.net/images/article/2019/02/chains_binary_data_blockchain_security_by_mf3d_gettyimages-941175690_2400x1600-100788434-large.jpg
+[2]: https://www.networkworld.com/article/3224893/internet-of-things/what-is-edge-computing-and-how-it-s-changing-the-network.html
+[3]: https://www.networkworld.com/article/3291790/data-center/how-edge-networking-and-iot-will-reshape-data-centers.html
+[4]: https://bitcoinist.com/51-percent-attack-hackers-steals-18-million-bitcoin-gold-btg-tokens/
+[5]: https://www.facebook.com/NetworkWorld/
+[6]: https://www.linkedin.com/company/network-world
diff --git a/sources/tech/20190405 5 open source tools for teaching young children to read.md b/sources/tech/20190405 5 open source tools for teaching young children to read.md
new file mode 100644
index 0000000000..c3a1fe82c8
--- /dev/null
+++ b/sources/tech/20190405 5 open source tools for teaching young children to read.md
@@ -0,0 +1,97 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (5 open source tools for teaching young children to read)
+[#]: via: (https://opensource.com/article/19/4/early-literacy-tools)
+[#]: author: (Laura B. Janusek https://opensource.com/users/lbjanusek)
+
+5 open source tools for teaching young children to read
+======
+Early literacy apps give kids a foundation in letter recognition,
+alphabet sequencing, word finding, and more.
+![][1]
+
+Anyone who sees a child using a tablet or smartphone observes their seemingly innate ability to scroll through apps and swipe through screens, flexing those "digital native" muscles. According to [Common Sense Media][2], the percentage of US households in which 0- to 8-year-olds have access to a smartphone has grown from 52% in 2011 to 98% in 2017. While the debates around age guidelines and screen time surge, it's hard to deny that children are developing familiarity and skills with technology at an unprecedented rate.
+
+This rise in early technical literacy may be astonishing, but what about _traditional_ literacy, the good old-fashioned ability to read? What does the intersection of early literacy development and early tech use look like? Let's explore some open source tools for early learners that may help develop both of these critical skill sets.
+
+### Balancing risks and rewards
+
+But first, a disclaimer: Guidelines for technology use, especially for young children, are [constantly changing][3]. Organizations like the American Academy of Pediatrics, Common Sense Media, Zero to Three, and PBS Kids are continually conducting research and publishing recommendations. One position that all of these and other organizations can agree on is that plopping a child in front of a screen with unmonitored content for an unlimited set of time is highly inadvisable.
+
+Even setting kids up with educational content or tools for extended periods of time may have risks. And on the flip side, research on the benefits of education technologies is often limited or unavailable. In short, there are many cases in which we don't know for certain if educational technology use at a young age is beneficial, detrimental, or simply neutral.
+
+But if screen time is available to your child or student, it's logical to infer that educational resources would be preferable over simpler pop-the-bubble or slice-the-fruit games or platforms that could house inappropriate content or online predators. While we may not be able to prove that education apps will make a child's test scores soar, we can at least take comfort in their generally being safer and more age-appropriate than the internet at large.
+
+That said, if you're open to exploring early-education technologies, there are many reasons to look to open source options. Open source technologies are not only free but open to collaborative improvement. In many cases, they are created by developers who are educators or parents themselves, and they're a great way to avoid in-app purchases, advertisements, and paid upgrades. Open source programs can often be downloaded and installed on your device and accessed without an internet connection. Plus, the idea of [open source in education][4] is a growing trend, and there are countless resources to [learn more][5] about the concept.
+
+But for now, let's check out some open source tools for early literacy in action!
+
+### Childsplay
+
+![Childsplay screenshot][6]
+
+Let's start simple. [Childsplay][7], licensed under the GPLv2, is the most basic of the resources on this list. It's a compilation of just over a dozen educational games for young learners, four of which are specific to letter recognition, including memory games and an activity where the learner identifies a spoken letter.
+
+### eduActiv8
+
+![eduActiv8 screenshot][8]
+
+[eduActiv8][9] started in 2011 as a personal project for the developer's son, "whose thirst for learning and knowledge inspired the creation of this educational program." It includes activities for building basic math and early literacy skills, including a variety of spelling, matching, and listening activities. Games include filling in missing letters in the alphabet, unscrambling letters to form a word, matching words to images, and completing mazes by connecting letters in the correct order. eduActiv8 was written in [Python][10] and is available under the GPLv3.
+
+### GCompris
+
+![GCompris screenshot][11]
+
+[GCompris][12] is an open source behemoth (licensed under the GPLv3) of early educational activities. A French software engineer started it in 2000, and it now includes over 130 educational games in nearly 20 languages. Tailored for learners under age 10, it includes activities for letter recognition and drawing, alphabet sequencing, vocabulary building, and games like hangman to identify missing letters in words, plus activities for learning braille. It also includes games in math and music, plus classics from tic-tac-toe to chess.
+
+### Feed the Monster
+
+![Feed the Monster screenshot][13]
+
+The quality of the playful "monster" graphics in [Feed the Monster][14] definitely sets it apart from the others on this list, plus it supports nearly 40 languages! The app includes activities for sorting letters to form words, memory games to match words to images, and letter-tracing writing activities. The app is developed by Curious Learning, which states: "We create, localize, distribute, and optimize open source mobile software so every child can learn to read." While Feed the Monster's offerings are geared toward early readers, Curious Mind's roadmap suggests it's headed towards a more robust personalized literacy platform growing on a foundation of research with MIT, Tufts, and Georgia State University.
+
+### Syntax Untangler
+
+![Syntax Untangler screenshot][15]
+
+[Syntax Untangler][16] is the outlier of this group. Developed by a technologist at the University of Wisconsin–Madison under the GPLv2, the application is "particularly designed for training language learners to recognize and parse linguistic features." Examples show the software being used for foreign language learning, but anyone can use it to create language identification games, including games for early literacy activities like letter recognition. It could also be applied to later literacy skills, like identifying parts of speech in complex sentences or literary techniques in poetry or fiction.
+
+### Wrapping up
+
+Access to [literary environments][17] has been shown to impact literacy and attitudes towards reading. Why not strive to create a digital literary environment for our kids by filling our devices with educational technologies, just like our shelves are filled with books?
+
+Now it's your turn! What open source literacy tools have you used? Comment below to share.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/4/early-literacy-tools
+
+作者:[Laura B. Janusek][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/lbjanusek
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/idea_innovation_kid_education.png?itok=3lRp6gFa
+[2]: https://www.commonsensemedia.org/research/the-common-sense-census-media-use-by-kids-age-zero-to-eight-2017?action
+[3]: https://www.businessinsider.com/smartphone-use-young-kids-toddlers-limits-science-2018-3
+[4]: /article/18/1/best-open-education
+[5]: https://opensource.com/resources/open-source-education
+[6]: https://opensource.com/sites/default/files/uploads/cp_flashcards.gif (Childsplay screenshot)
+[7]: http://www.childsplay.mobi/
+[8]: https://opensource.com/sites/default/files/uploads/eduactiv8.jpg (eduActiv8 screenshot)
+[9]: https://www.eduactiv8.org/
+[10]: /article/17/11/5-approaches-learning-python
+[11]: https://opensource.com/sites/default/files/uploads/gcompris2.png (GCompris screenshot)
+[12]: https://gcompris.net/index-en.html
+[13]: https://opensource.com/sites/default/files/uploads/feedthemonster.png (Feed the Monster screenshot)
+[14]: https://www.curiouslearning.org/
+[15]: https://opensource.com/sites/default/files/uploads/syntaxuntangler.png (Syntax Untangler screenshot)
+[16]: https://courses.dcs.wisc.edu/untangler/
+[17]: http://www.jstor.org/stable/41386459
diff --git a/sources/tech/20190405 File sharing with Git.md b/sources/tech/20190405 File sharing with Git.md
new file mode 100644
index 0000000000..13f95b8287
--- /dev/null
+++ b/sources/tech/20190405 File sharing with Git.md
@@ -0,0 +1,234 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (File sharing with Git)
+[#]: via: (https://opensource.com/article/19/4/file-sharing-git)
+[#]: author: (Seth Kenlon https://opensource.com/users/seth)
+
+File sharing with Git
+======
+SparkleShare is an open source, Git-based, Dropbox-style file sharing
+application. Learn more in our series about little-known uses of Git.
+![][1]
+
+[Git][2] is one of those rare applications that has managed to encapsulate so much of modern computing into one program that it ends up serving as the computational engine for many other applications. While it's best-known for tracking source code changes in software development, it has many other uses that can make your life easier and more organized. In this series leading up to Git's 14th anniversary on April 7, we'll share seven little-known ways to use Git. Today, we'll look at SparkleShare, which uses Git as the backbone for file sharing.
+
+### Git for file sharing
+
+One of the nice things about Git is that it's inherently distributed. It's built to share. Even if you're sharing a repository just with other computers on your own network, Git brings transparency to the act of getting files from a shared location.
+
+As interfaces go, Git is pretty simple. It varies from user to user, but the common incantation when sitting down to get some work done is just **git pull** or maybe the slightly more complex **git pull && git checkout -b my-branch**. Still, for some people, the idea of _entering a command_ into their computer at all is confusing or bothersome. Computers are meant to make life easy, and computers are good at repetitious tasks, and so there are easier ways to share files with Git.
+
+### SparkleShare
+
+The [SparkleShare][3] project is a cross-platform, open source, Dropbox-style file sharing application based on Git. It automates all Git commands, triggering the add, commit, push, and pull processes with the simple act of dragging-and-dropping a file into a specially designated SparkleShare directory. Because it is based on Git, you get fast, diff-based pushes and pulls, and you inherit all the benefits of Git version control and backend infrastructure (like Git hooks). It can be entirely self-hosted, or you can use it with Git hosting services like [GitLab][4], GitHub, Bitbucket, and others. Furthermore, because it's basically just a frontend to Git, you can access your SparkleShare files on devices that may not have a SparkleShare client but do have Git clients.
+
+Just as you get all the benefits of Git, you also get all the usual Git restrictions: It's impractical to use SparkleShare to store hundreds of photos and music and videos because Git is designed and optimized for text. Git certainly has the capability to store large files of binary data but it is designed to track history, so once a file is added to it, it's nearly impossible to completely remove it. This somewhat limits the usefulness of SparkleShare for some people, but it makes it ideal for many workflows, including [calendaring][5].
+
+#### Installing SparkleShare
+
+SparkleShare is cross-platform, with installers for Windows and Mac available from its [website][6]. For Linux, there's a [Flatpak][7] in your software installer, or you can run these commands in a terminal:
+
+
+```
+$ sudo flatpak remote-add flathub
+$ sudo flatpak install flathub org.sparkleshare.SparkleShare
+```
+
+### Creating a Git repository
+
+SparkleShare isn't software-as-a-service (SaaS). You run SparkleShare on your computer to communicate with a Git repository—SparkleShare doesn't store your data. If you don't have a Git repository to sync a folder with yet, you must create one before launching SparkleShare. You have three options: hosted Git, self-hosted Git, or self-hosted SparkleShare.
+
+#### Git hosting
+
+SparkleShare can use any Git repository you can access for storage, so if you have or create an account with GitLab or any other hosting service, it can become the backend for your SparkleShare. For example, the open source [Notabug.org][8] service is a Git hosting service like GitHub and GitLab, but unique enough to prove SparkleShare's flexibility. Creating a new repository differs from host to host depending on the user interface, but all of the major ones follow the same general model.
+
+First, locate the button in your hosting service to create a new project or repository and click on it to begin. Then step through the repository creation process, providing a name for your repository, privacy level (repositories often default to being public), and whether or not to initialize the repository with a README file. Whether you need a README or not, enable an initial README file. Starting a repository with a file isn't strictly necessary, but it forces the Git host to instantiate a **master** branch in the repository, which helps ensure that frontend applications like SparkleShare have a branch to commit and push to. It's also useful for you to see a file, even if it's an almost empty README file, to confirm that you have connected.
+
+![Creating a Git repository][9]
+
+Once you've created a repository, obtain the URL it uses for SSH clones. You can get this URL the same way anyone gets any URL for a Git project: navigate to the page of the repository and look for the **Clone** button or field.
+
+![Cloning a URL on GitHub][10]
+
+Cloning a GitHub URL.
+
+![Cloning a URL on GitLab][11]
+
+Cloning a GitLab URL.
+
+This is the address SparkleShare uses to reach your data, so make note of it. Your Git repository is now configured.
+
+#### Self-hosted Git
+
+You can use SparkleShare to access a Git repository on any computer you have access to. No special setup is required, aside from a bare Git repository. However, if you want to give access to your Git repository to anyone else, then you should run a Git manager like [Gitolite][12] or SparkleShare's own Dazzle server to help you manage SSH keys and accounts. At the very least, create a user specific to Git so that users with access to your Git repository don't also automatically gain access to the rest of your server.
+
+Log into your server as the Git user (or yourself, if you're very good at managing user and group permissions) and create a repository:
+
+
+```
+$ mkdir ~/sparkly.git
+$ cd ~/sparkly.git
+$ git init --bare .
+```
+
+Your Git repository is now configured.
+
+#### Dazzle
+
+SparkleShare's developers provide a Git management system called [Dazzle][13] to help you self-host Git repositories.
+
+On your server, download the Dazzle application to some location in your path:
+
+
+```
+$ curl \
+\--output ~/bin/dazzle
+$ chmod +x ~/bin/dazzle
+```
+
+Dazzle sets up a user specific to Git and SparkleShare and also implements access rights based on keys generated by the SparkleShare application. For now, just set up a project:
+
+
+```
+`$ dazzle create sparkly`
+```
+
+Your server is now configured as a SparkleShare host.
+
+### Configuring SparkleShare
+
+When you launch SparkleShare for the first time, you are prompted to configure what server you want SparkleShare to use for storage. This process may feel like a first-run setup wizard, but it's actually the usual process for setting up a new shared location within SparkleShare. Unlike many shared drive applications, with SparkleShare you can have several locations configured at once. The first shared location you configure isn't any more significant than any shared location you may set up later, and you're not signing up with SparkleShare or any other service. You're just pointing SparkleShare at a Git repository so that it knows what to keep your first SparkleShare folder in sync with.
+
+On the first screen, identify yourself by whatever means you want on record in the Git commits that SparkleShare makes on your behalf. You can use anything, even fake information that resolves to nothing. It's purely for the commit messages, which you may never even see if you have no interest in reviewing the Git backend processes.
+
+The next screen prompts you to choose your hosting type. If you are using GitLab, GitHub, Planio, or Bitbucket, then select the appropriate one. For anything else, select **Own server**.
+
+![Choosing a Sparkleshare host][14]
+
+At the bottom of this screen, you must enter the SSH clone URL. If you're self-hosting, the address is something like **** and the remote path is the absolute path to the Git repository you created for this purpose.
+
+Based on my self-hosted examples above, the address to my imaginary server is **** (the **:22122** indicates a nonstandard SSH port) and the remote path is **/home/git/sparkly.git**.
+
+If I use my Notabug.org account instead, the address from the example above is **[git@notabug.org][15]** and the path is **seth/sparkly.git**.
+
+SparkleShare will fail the first time it attempts to connect to the host because you have not yet copied the SparkleShare client ID (an SSH key specific to the SparkleShare application) to the Git host. This is expected, so don't cancel the process. Leave the SparkleShare setup window open and obtain the client ID from the SparkleShare icon in your system tray. Then copy the client ID to your clipboard so you can add it to your Git host.
+
+![Getting the client ID from Sparkleshare][16]
+
+#### Adding your client ID to a hosted Git account
+
+Minor UI differences aside, adding an SSH key (which is all the client ID is) is basically the same process on any hosting service. In your Git host's web dashboard, navigate to your user settings and find the **SSH Keys** category. Click the **Add New Key** button (or similar) and paste the contents of your SparkleShare client ID.
+
+![Adding an SSH key][17]
+
+Save the key. If you want someone else, such as collaborators or family members, to be able to access this same repository, they must provide you with their SparkleShare client ID so you can add it to your account.
+
+#### Adding your client ID to a self-hosted Git account
+
+A SparkleShare client ID is just an SSH key, so copy and paste it into your Git user's **~/.ssh/authorized_keys** file.
+
+#### Adding your client ID with Dazzle
+
+If you are using Dazzle to manage your SparkleShare projects, add a client ID with this command:
+
+
+```
+`$ dazzle link`
+```
+
+When Dazzle prompts you for the ID, paste in the client ID found in the SparkleShare menu.
+
+### Using SparkleShare
+
+Once you've added your client ID to your Git host, click the **Retry** button in the SparkleShare window to finish setup. When it's finished cloning your repository, you can close the SparkleShare setup window, and you'll find a new **SparkleShare** folder in your home directory. If you set up a Git repository with a hosting service and chose to include a README or license file, you can see them in your SparkleShare directory.
+
+![Sparkleshare file manager][18]
+
+Otherwise, there are some hidden directories, which you can see by revealing hidden directories in your file manager.
+
+![Showing hidden files in GNOME][19]
+
+You use SparkleShare the same way you use any directory on your computer: you put files into it. Anytime a file or directory is placed into a SparkleShare folder, it's copied in the background to your Git repository.
+
+#### Excluding certain files
+
+Since Git is designed to remember _everything_ , you may want to exclude specific file types from ever being recorded. There are a few reasons to manage excluded files. By defining files that are off limits for SparkleShare, you can avoid accidental copying of large files. You can also design a scheme for yourself that enables you to store files that logically belong together (MIDI files with their **.flac** exports, for instance) in one directory, but manually back up the large files yourself while letting SparkleShare back up the text-based files.
+
+If you can't see hidden files in your system's file manager, then reveal them. Navigate to your SparkleShare folder, then to the directory representing your repository, locate a file called **.gitignore** , and open it in a text editor. You can enter file extensions or file names, one per line, into **.gitignore** , and any file matching what you list will be (as the file name suggests) ignored.
+
+
+```
+Thumbs.db
+$RECYCLE.BIN/
+.DS_Store
+._*
+.fseventsd
+.Spotlight-V100
+.Trashes
+.directory
+.Trash-*
+*.wav
+*.ogg
+*.flac
+*.mp3
+*.m4a
+*.opus
+*.jpg
+*.png
+*.mp4
+*.mov
+*.mkv
+*.avi
+*.pdf
+*.djvu
+*.epub
+*.od{s,t}
+*.cbz
+```
+
+You know the types of files you encounter most often, so concentrate on the ones most likely to sneak their way into your SparkleShare directory. If you want to exercise a little overkill, you can find good collections of **.gitignore** files on Notabug.org and also on the internet at large.
+
+With those entries in your **.gitignore** file, you can place large files that you don't want sent to your Git host in your SparkleShare directory, and SparkleShare will ignore them entirely. Of course, that means it's up to you to make sure they get onto a backup or distributed to your SparkleShare collaborators through some other means.
+
+### Automation
+
+[Automation][20] is part of the silent agreement we have with computers: they do the repetitious, boring stuff that we humans either aren't very good at doing or aren't very good at remembering. SparkleShare is a nice, simple way to automate the routine distribution of data. It isn't right for every Git repository, by any means. It doesn't have an interface for advanced Git functions; it doesn't have a pause button or a manual override. And that's OK because its scope is intentionally limited. SparkleShare does what SparkleShare sets out to do, it does it well, and it's one Git repository you won't have to think about.
+
+If you have a use for that kind of steady, invisible automation, give SparkleShare a try.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/4/file-sharing-git
+
+作者:[Seth Kenlon (Red Hat, Community Moderator)][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/seth
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/rh_003499_01_cloud21x_cc.png?itok=5UwC92dO
+[2]: https://git-scm.com/
+[3]: http://www.sparkleshare.org/
+[4]: http://gitlab.com
+[5]: https://opensource.com/article/19/4/calendar-git
+[6]: http://sparkleshare.org
+[7]: /business/16/8/flatpak
+[8]: http://notabug.org
+[9]: https://opensource.com/sites/default/files/uploads/git-new-repo.jpg (Creating a Git repository)
+[10]: https://opensource.com/sites/default/files/uploads/github-clone-url.jpg (Cloning a URL on GitHub)
+[11]: https://opensource.com/sites/default/files/uploads/gitlab-clone-url.jpg (Cloning a URL on GitLab)
+[12]: http://gitolite.org
+[13]: https://github.com/hbons/Dazzle
+[14]: https://opensource.com/sites/default/files/uploads/sparkleshare-host.jpg (Choosing a Sparkleshare host)
+[15]: mailto:git@notabug.org
+[16]: https://opensource.com/sites/default/files/uploads/sparkleshare-clientid.jpg (Getting the client ID from Sparkleshare)
+[17]: https://opensource.com/sites/default/files/uploads/git-ssh-key.jpg (Adding an SSH key)
+[18]: https://opensource.com/sites/default/files/uploads/sparkleshare-file-manager.jpg (Sparkleshare file manager)
+[19]: https://opensource.com/sites/default/files/uploads/gnome-show-hidden-files.jpg (Showing hidden files in GNOME)
+[20]: /downloads/ansible-quickstart
diff --git a/sources/tech/20190405 How to Authenticate a Linux Desktop to Your OpenLDAP Server.md b/sources/tech/20190405 How to Authenticate a Linux Desktop to Your OpenLDAP Server.md
new file mode 100644
index 0000000000..6ee1633f9d
--- /dev/null
+++ b/sources/tech/20190405 How to Authenticate a Linux Desktop to Your OpenLDAP Server.md
@@ -0,0 +1,190 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (How to Authenticate a Linux Desktop to Your OpenLDAP Server)
+[#]: via: (https://www.linux.com/blog/how-authenticate-linux-desktop-your-openldap-server)
+[#]: author: (Jack Wallen https://www.linux.com/users/jlwallen)
+
+How to Authenticate a Linux Desktop to Your OpenLDAP Server
+======
+
+![][1]
+
+[Creative Commons Zero][2]
+
+In this final part of our three-part series, we reach the conclusion everyone has been waiting for. The ultimate goal of using LDAP (in many cases) is enabling desktop authentication. With this setup, admins are better able to manage and control user accounts and logins. After all, Active Directory admins shouldn’t have all the fun, right?
+
+WIth OpenLDAP, you can manage your users on a centralized directory server and connect the authentication of every Linux desktop on your network to that server. And since you already have [OpenLDAP][3] and the [LDAP Authentication Manager][4] setup and running, the hard work is out of the way. At this point, there is just a few quick steps to enabling those Linux desktops to authentication with that server.
+
+I’m going to walk you through this process, using the Ubuntu Desktop 18.04 to demonstrate. If your desktop distribution is different, you’ll only have to modify the installation steps, as the configurations should be similar.
+
+**What You’ll Need**
+
+Obviously you’ll need the OpenLDAP server up and running. You’ll also need user accounts created on the LDAP directory tree, and a user account on the client machines with sudo privileges. With those pieces out of the way, let’s get those desktops authenticating.
+
+**Installation**
+
+The first thing we must do is install the necessary client software. This will be done on all the desktop machines that require authentication with the LDAP server. Open a terminal window on one of the desktop machines and issue the following command:
+
+```
+sudo apt-get install libnss-ldap libpam-ldap ldap-utils nscd -y
+```
+
+During the installation, you will be asked to enter the LDAP server URI ( **Figure 1** ).
+
+![][5]
+
+Figure 1: Configuring the LDAP server URI for the client.
+
+[Used with permission][6]
+
+The LDAP URI is the address of the OpenLDAP server, in the form ldap://SERVER_IP (Where SERVER_IP is the IP address of the OpenLDAP server). Type that address, tab to OK, and press Enter on your keyboard.
+
+In the next window ( **Figure 2)** , you are required to enter the Distinguished Name of the OpenLDAP server. This will be in the form dc=example,dc=com.
+
+![][7]
+
+Figure 2: Configuring the DN of your OpenLDAP server.
+
+[Used with permission][6]
+
+If you’re unsure of what your OpenLDAP DN is, log into the LDAP Account Manager, click Tree View, and you’ll see the DN listed in the left pane ( **Figure 3** ).
+
+![][8]
+
+Figure 3: Locating your OpenLDAP DN with LAM.
+
+[Used with permission][6]
+
+The next few configuration windows, will require the following information:
+
+ * Specify LDAP version (select 3)
+
+ * Make local root Database admin (select Yes)
+
+ * Does the LDAP database require login (select No)
+
+ * Specify LDAP admin account suffice (this will be in the form cn=admin,dc=example,dc=com)
+
+ * Specify password for LDAP admin account (this will be the password for the LDAP admin user)
+
+
+
+
+Once you’ve answered the above questions, the installation of the necessary bits is complete.
+
+**Configuring the LDAP Client**
+
+Now it’s time to configure the client to authenticate against the OpenLDAP server. This is not nearly as hard as you might think.
+
+First, we must configure nsswitch. Open the configuration file with the command:
+
+```
+sudo nano /etc/nsswitch.conf
+```
+
+In that file, add ldap at the end of the following line:
+
+```
+passwd: compat systemd
+
+group: compat systemd
+
+shadow: files
+```
+
+These configuration entries should now look like:
+
+```
+passwd: compat systemd ldap
+group: compat systemd ldap
+shadow: files ldap
+```
+
+At the end of this section, add the following line:
+
+```
+gshadow files
+```
+
+The entire section should now look like:
+
+```
+passwd: compat systemd ldap
+
+group: compat systemd ldap
+
+shadow: files ldap
+
+gshadow files
+```
+
+Save and close that file.
+
+Now we need to configure PAM for LDAP authentication. Issue the command:
+
+```
+sudo nano /etc/pam.d/common-password
+```
+
+Remove use_authtok from the following line:
+
+```
+password [success=1 user_unknown=ignore default=die] pam_ldap.so use_authtok try_first_pass
+```
+
+Save and close that file.
+
+There’s one more PAM configuration to take care of. Issue the command:
+
+```
+sudo nano /etc/pam.d/common-session
+```
+
+At the end of that file, add the following:
+
+```
+session optional pam_mkhomedir.so skel=/etc/skel umask=077
+```
+
+The above line will create the default home directory (upon first login), on the Linux desktop, for any LDAP user that doesn’t have a local account on the machine. Save and close that file.
+
+**Logging In**
+
+Reboot the client machine. When the login is presented, attempt to log in with a user on your OpenLDAP server. The user account should authenticate and present you with a desktop. You are good to go.
+
+Make sure to configure every single Linux desktop on your network in the same fashion, so they too can authenticate against the OpenLDAP directory tree. By doing this, any user in the tree will be able to log into any configured Linux desktop machine on your network.
+
+You now have an OpenLDAP server running, with the LDAP Account Manager installed for easy account management, and your Linux clients authenticating against that LDAP server.
+
+And that, my friends, is all there is to it.
+
+We’re done.
+
+Keep using Linux.
+
+It’s been an honor.
+
+--------------------------------------------------------------------------------
+
+via: https://www.linux.com/blog/how-authenticate-linux-desktop-your-openldap-server
+
+作者:[Jack Wallen][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.linux.com/users/jlwallen
+[b]: https://github.com/lujun9972
+[1]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/cyber-3400789_1280_0.jpg?itok=YiinDnTw
+[2]: /LICENSES/CATEGORY/CREATIVE-COMMONS-ZERO
+[3]: https://www.linux.com/blog/2019/3/how-install-openldap-ubuntu-server-1804
+[4]: https://www.linux.com/blog/learn/2019/3/how-install-ldap-account-manager-ubuntu-server-1804
+[5]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/ldapauth_1.jpg?itok=DgYT8iY1
+[6]: /LICENSES/CATEGORY/USED-PERMISSION
+[7]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/ldapauth_2.jpg?itok=CXITs7_J
+[8]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/ldapauth_3.jpg?itok=HmhiYj7J
diff --git a/sources/tech/20190406 Run a server with Git.md b/sources/tech/20190406 Run a server with Git.md
new file mode 100644
index 0000000000..2d7749a465
--- /dev/null
+++ b/sources/tech/20190406 Run a server with Git.md
@@ -0,0 +1,240 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Run a server with Git)
+[#]: via: (https://opensource.com/article/19/4/server-administration-git)
+[#]: author: (Seth Kenlon https://opensource.com/users/seth/users/seth)
+
+Run a server with Git
+======
+Thanks to Gitolite, you can manage a Git server with Git. Learn how in
+our series about little-known Git uses.
+![computer servers processing data][1]
+
+As I've tried to demonstrate in this series leading up to Git's 14th anniversary on April 7, [Git][2] can do a wide range of things beyond tracking source code. Believe it or not, Git can even manage your Git server, so you can, more or less, run a Git server with Git itself.
+
+Of course, this involves a lot of components beyond everyday Git, not the least of which is [Gitolite][3], the backend application managing the fiddly bits that you configure using Git. The great thing about Gitolite is that, because it uses Git as its frontend interface, it's easy to integrate Git server administration within the rest of your Git-based workflow. Gitolite provides precise control over who can access specific repositories on your server and what permissions they have. You can manage that sort of thing yourself with the usual Linux system tools, but it takes a lot of work if you have more than just one or two repos across a half-dozen users.
+
+Gitolite's developers have done the hard work to make it easy for you to provide many users with access to your Git server without giving them access to your entire environment—and you can do it all with Git.
+
+What Gitolite is _not_ is a GUI admin and user panel. That sort of experience is available with the excellent [Gitea][4] project, but this article focuses on the simple elegance and comforting familiarity of Gitolite.
+
+### Install Gitolite
+
+Assuming your Git server runs Linux, you can install Gitolite with your package manager ( **yum** on CentOS and RHEL, **apt** on Debian and Ubuntu, **zypper** on OpenSUSE, and so on). For example, on RHEL:
+
+
+```
+`$ sudo yum install gitolite3`
+```
+
+Many repositories still have older versions of Gitolite for legacy support, but the current version is version 3.
+
+You must have passwordless SSH access to your server. You can use a password to log in if you prefer, but Gitolite relies on SSH keys, so you must configure the option to log in with keys. If you don't know how to configure a server for passwordless SSH access, go learn how to do that first (the [Setting up SSH key authentication][5] section of Steve Ovens's Ansible article explains it well). It's an essential part of secure server administration—as well as of running Gitolite.
+
+### Configure a Git user
+
+Without Gitolite, if a person requests access to a Git repository you host on a server, you have to provide that person with a user account. Git provides a special shell, the **git-shell** , which is an ultra-specific shell that performs only Git tasks. This lets you have users who can access your server only through the filter of a very limited shell environment.
+
+That solution works, but it usually means a user gains access to all repositories on your server unless you have a very good schema for group permissions and maintain those permissions strictly whenever a new repository is created. It also requires a lot of manual configuration at the system level, an area usually reserved for a specific tier of sysadmins and not necessarily the person usually in charge of Git repositories.
+
+Gitolite sidesteps this issue entirely by designating one username for every person who needs access to any repository. By default, the username is **git** , and because Gitolite's documentation assumes that's what is used, it's a good default to keep when you're learning the tool. It's also a well-known convention for anyone who's ever used GitLab or GitHub or any other Git hosting service.
+
+Gitolite calls this user the _hosting user_. Create an account on your server to act as the hosting user (I'll stick with **git** because that's the convention):
+
+
+```
+` $ sudo adduser --create-home git`
+```
+
+For you to control the **git** user account, it must have a valid public SSH key that belongs to you. You should already have this set up, so **cp** your public key ( _not your private key_ ) to the **git** user's home directory:
+
+
+```
+$ sudo cp ~/.ssh/id_ed25519.pub /home/git/
+$ sudo chown git:git /home/git/id_ed25519.pub
+```
+
+If your public key doesn't end with the extension **.pub** , Gitolite will not use it, so rename the file accordingly. Change to that user account to run Gitolite's setup:
+
+
+```
+$ sudo su - git
+$ gitolite setup --pubkey id_ed25519.pub
+```
+
+After the setup script runs, the **git** home's user directory will have a **repositories** directory, which (for now) contains the files **git-admin.git** and **testing.git**. That's all the setup the server requires, so log out.
+
+### Use Gitolite
+
+Managing Gitolite is a matter of editing text files in a Git repository, specifically **gitolite-admin.git**. You won't SSH into your server for Git administration, and Gitolite encourages you not to try. The repositories you and your users store on the Gitolite server are _bare_ repositories, so it's best to stay out of them.
+
+
+```
+$ git clone [git@example.com][6]:gitolite-admin.git gitolite-admin.git
+$ cd gitolite-admin.git
+$ ls -1
+conf
+keydir
+```
+
+The **conf** directory in this repository contains a file called **gitolite.conf**. Open it in a text editor or use **cat** to view its contents:
+
+
+```
+repo gitolite-admin
+RW+ = id_ed22519
+
+repo testing
+RW+ = @all
+```
+
+You may have an idea of what this configuration file does: **gitolite-admin** represents this repository, and the owner of the **id_ed25519** key has read, write, and Git administrative privileges. In other words, rather than mapping users to normal local Unix users (because all your users log in using the **git** hosting user identity), Gitolite maps users to SSH keys listed in the **keydir** directory.
+
+The **testing.git** repository gives full permissions to everyone with access to the server using special group notation.
+
+#### Add users
+
+If you want to add a user called **alice** to your Git server, the person Alice must send you her public SSH key. Gitolite uses whatever is to the left of the **.pub** extension as the identifier for your Git users. Rather than using the default key name values, give keys a name indicative of the key owner. If a user has more than one key (e.g., one for her laptop, one for her desktop), you can use subdirectories to avoid file name collisions. For instance, the key Alice uses from her laptop might come to you as the default **id_rsa.pub** , so rename it **alice.pub** or similar (or let the users name the key according to their local user accounts on their computers), and place it into the **gitolite-admin.git/keydir/work/laptop/** directory. If she sends you another key from her desktop, name it **alice.pub** (the same as the previous one) and add it to **keydir/work/desktop/**. Another key might go into **keydir/home/desktop/** , and so on. Gitolite recursively searches **keydir** for a **.pub** file matching a repository "user" and treats any match as the same identity.
+
+When you add keys to the **keydir** directory, you must commit them back to your server. This is such an easy thing to forget that there's a real argument here for using an automated Git application like [**Sparkleshare**][7] so any change is committed back to your Gitolite admin immediately. The first time you forget to commit and push—and waste three hours of your time and your user's time troubleshooting—you'll see that Gitolite is the perfect justification for using Sparkleshare.
+
+
+```
+$ git add keydir
+$ git commit -m 'added alice-laptop-0.pub'
+$ git push origin HEAD
+```
+
+Alice, by default, gains access to the **testing.git** directory so she can test connectivity and functionality with that.
+
+#### Set permissions
+
+As with users, directory permissions and groups are abstracted away from the normal Unix tools you might be used to (or find information about online). Permissions to projects are granted in the **gitolite.conf** file in **gitolite-admin.git/conf** directory. There are four levels of permissions:
+
+ * **R** allows read-only. A user with **R** permissions on a repository may clone it, and that's all.
+ * **RW** allows a user to perform a fast-forward push of a branch, create new branches, and create new tags. More or less, this one feels like a "normal" Git repository to most users.
+ * **RW+** allows Git actions that are potentially destructive. A user can perform normal fast-forward pushes, as well as rewind pushes, do rebases, and delete branches and tags. This may or may not be something you want to grant to all contributors on a project.
+ * **-** explicitly denies access to a repository. This is essentially the same as a user not being listed in the repository's configuration.
+
+
+
+Create a new repository or modify an existing repository's permissions by adjusting **gitolite.conf**. For instance, to give Alice permissions to administrate a new repository called **widgets.git** :
+
+
+```
+repo gitolite-admin
+RW+ = id_ed22519
+
+repo testing
+RW+ = @all
+
+repo widgets
+RW+ = alice
+```
+
+Now Alice—and Alice alone—can clone the repo:
+
+
+```
+[alice]$ git clone [git@example.com][6]:widgets.git
+Cloning into 'widgets'...
+warning: You appear to have cloned an empty repository.
+```
+
+On her initial push, Alice must use the **-u** option to send her branch to the empty repository (as she would have to do with any Git host).
+
+To make user management easier, you can define groups of repositories:
+
+
+```
+@qtrepo = widgets
+@qtrepo = games
+
+repo gitolite-admin
+RW+ = id_ed22519
+
+repo testing
+RW+ = @all
+
+repo @qtrepo
+RW+ = alice
+```
+
+Just as you can create group repositories, you can group users. One user group exists by default: **@all**. As you might expect, it includes all users, without exception. You can create your own:
+
+
+```
+@qtrepo = widgets
+@qtrepo = games
+
+@developers = alice bob
+
+repo gitolite-admin
+RW+ = id_ed22519
+
+repo testing
+RW+ = @all
+
+repo @qtrepo
+RW+ = @developers
+```
+
+As with adding or modifying key files, any change to the **gitolite.conf** file must be committed and pushed to take effect.
+
+### Create a repository
+
+By default, Gitolite assumes repository creation happens from the top down. For instance, a project manager with access to the Git server creates a project repository and, through the Gitolite administration repo, adds developers.
+
+In practice, you might prefer to grant users permission to create repositories. Gitolite calls these "wild repos" (I'm not sure whether that's commentary on how the repos come into being or a reference to the wildcard characters required by the configuration file to let it happen). Here's an example:
+
+
+```
+@managers = alice bob
+
+repo foo/CREATOR/[a-z]..*
+C = @managers
+RW+ = CREATOR
+RW = WRITERS
+R = READERS
+```
+
+The first line defines a group of users: the group is called **@managers** and contains users **alice** and **bob**. The next line sets up a wildcard allowing repositories that do not yet exist to be created in a directory called **foo** followed by a subdirectory named for the user creating the repo. For example:
+
+
+```
+[alice]$ git clone [git@example.com][6]:foo/alice/cool-app.git
+Cloning into cool-app'...
+Initialized empty Git repository in /home/git/repositories/foo/alice/cool-app.git
+warning: You appear to have cloned an empty repository.
+```
+
+There are some mechanisms for the creator of a wild repo to define who can read and write to their repository, but they're limited in scope. For the most part, Gitolite assumes that a specific set of users governs project permission. One solution is to grant all users access to **gitolite-admin** using a Git hook to require manager approval to merge changes into the master branch.
+
+### Learn more
+
+Gitolite has many more features than what this introductory article covers, so try it out. The [documentation][8] is excellent, and once you read through it, you can customize your Gitolite server to provide your users whatever level of control you are comfortable with. Gitolite is a low-maintenance, simple system that you can install, set up, and then more or less forget about.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/4/server-administration-git
+
+作者:[Seth Kenlon (Red Hat, Community Moderator)][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/seth/users/seth
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/server_data_system_admin.png?itok=q6HCfNQ8 (computer servers processing data)
+[2]: https://git-scm.com/
+[3]: http://gitolite.com
+[4]: http://gitea.io
+[5]: Setting%20up%20SSH%20key%20authentication
+[6]: mailto:git@example.com
+[7]: https://opensource.com/article/19/4/file-sharing-git
+[8]: http://gitolite.com/gitolite/quick_install.html
diff --git a/sources/tech/20190407 Manage multimedia files with Git.md b/sources/tech/20190407 Manage multimedia files with Git.md
new file mode 100644
index 0000000000..340c356aa9
--- /dev/null
+++ b/sources/tech/20190407 Manage multimedia files with Git.md
@@ -0,0 +1,247 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Manage multimedia files with Git)
+[#]: via: (https://opensource.com/article/19/4/manage-multimedia-files-git)
+[#]: author: (Seth Kenlon https://opensource.com/users/seth)
+
+Manage multimedia files with Git
+======
+Learn how to use Git to track large multimedia files in your projects in
+the final article in our series on little-known uses of Git.
+![video editing dashboard][1]
+
+Git is very specifically designed for source code version control, so it's rarely embraced by projects and industries that don't primarily work in plaintext. However, the advantages of an asynchronous workflow are appealing, especially in the ever-growing number of industries that combine serious computing with seriously artistic ventures, including web design, visual effects, video games, publishing, currency design (yes, that's a real industry), education… the list goes on and on.
+
+In this series leading up to Git's 14th anniversary, we've shared six little-known ways to use Git. In this final article, we'll look at software that brings the advantages of Git to managing multimedia files.
+
+### The problem with managing multimedia files with Git
+
+It seems to be common knowledge that Git doesn't work well with non-text files, but it never hurts to challenge assumptions. Here's an example of copying a photo file using Git:
+
+
+```
+$ du -hs
+108K .
+$ cp ~/photos/dandelion.tif .
+$ git add dandelion.tif
+$ git commit -m 'added a photo'
+[master (root-commit) fa6caa7] two photos
+1 file changed, 0 insertions(+), 0 deletions(-)
+create mode 100644 dandelion.tif
+$ du -hs
+1.8M .
+```
+
+Nothing unusual so far; adding a 1.8MB photo to a directory results in a directory 1.8MB in size. So, let's try removing the file:
+
+
+```
+$ git rm dandelion.tif
+$ git commit -m 'deleted a photo'
+$ du -hs
+828K .
+```
+
+You can see the problem here: Removing a large file after it's been committed increases a repository's size roughly eight times its original, barren state (from 108K to 828K). You can perform tests to get a better average, but this simple demonstration is consistent with my experience. The cost of committing files that aren't text-based is minimal at first, but the longer a project stays active, the more changes people make to static content, and the more those fractions start to add up. When a Git repository becomes very large, the major cost is usually speed. The time to perform pulls and pushes goes from being how long it takes to take a sip of coffee to how long it takes to wonder if your computer got kicked off the network.
+
+The reason static content causes Git to grow in size is that formats based on text allow Git to pull out just the parts that have changed. Raster images and music files make as much sense to Git as they would to you if you looked at the binary data contained in a .png or .wav file. So Git just takes all the data and makes a new copy of it, even if only one pixel changes from one photo to the next.
+
+### Git-portal
+
+In practice, many multimedia projects don't need or want to track the media's history. The media part of a project tends to have a different lifecycle than the text or code part of a project. Media assets generally progress in one direction: a picture starts as a pencil sketch, proceeds toward its destination as a digital painting, and, even if the text is rolled back to an earlier version, the art continues its forward progress. It's rare for media to be bound to a specific version of a project. The exceptions are usually graphics that reflect datasets—usually tables or graphs or charts—that can be done in text-based formats such as SVG.
+
+So, on many projects that involve both media and text (whether it's narrative prose or code), Git is an acceptable solution to file management, as long as there's a playground outside the version control cycle for artists to play in.
+
+![Graphic showing relationship between art assets and Git][2]
+
+A simple way to enable that is [Git-portal][3], a Bash script armed with Git hooks that moves your asset files to a directory outside Git's purview and replaces them with symlinks. Git commits the symlinks (sometimes called aliases or shortcuts), which are trivially small, so all you commit are your text files and whatever symlinks represent your media assets. Because the replacement files are symlinks, your project continues to function as expected because your local machine follows the symlinks to their "real" counterparts. Git-portal maintains a project's directory structure when it swaps out a file with a symlink, so it's easy to reverse the process, should you decide that Git-portal isn't right for your project or you need to build a version of your project without symlinks (for distribution, for instance).
+
+Git-portal also allows remote synchronization of assets over rsync, so you can set up a remote storage location as a centralized source of authority.
+
+Git-portal is ideal for multimedia projects, including video game and tabletop game design, virtual reality projects with big 3D model renders and textures, [books][4] with graphics and .odt exports, collaborative [blog websites][5], music projects, and much more. It's not uncommon for an artist to perform versioning in their application—in the form of layers (in the graphics world) and tracks (in the music world)—so Git adds nothing to multimedia project files themselves. The power of Git is leveraged for other parts of artistic projects (prose and narrative, project management, subtitle files, credits, marketing copy, documentation, and so on), and the power of structured remote backups is leveraged by the artists.
+
+#### Install Git-portal
+
+There are RPM packages for Git-portal located at , which you can download and install.
+
+Alternately, you can install Git-portal manually from its home on GitLab. It's just a Bash script and some Git hooks (which are also Bash scripts), but it requires a quick build process so that it knows where to install itself:
+
+
+```
+$ git clone git-portal.clone
+$ cd git-portal.clone
+$ ./configure
+$ make
+$ sudo make install
+```
+
+#### Use Git-portal
+
+Git-portal is used alongside Git. This means, as with all large-file extensions to Git, there are some added steps to remember. But you only need Git-portal when dealing with your media assets, so it's pretty easy to remember unless you've acclimated yourself to treating large files the same as text files (which is rare for Git users). There's one setup step you must do to use Git-portal in a project:
+
+
+```
+$ mkdir bigproject.git
+$ cd !$
+$ git init
+$ git-portal init
+```
+
+Git-portal's **init** function creates a **_portal** directory in your Git repository and adds it to your .gitignore file.
+
+Using Git-portal in a daily routine integrates smoothly with Git. A good example is a MIDI-based music project: the project files produced by the music workstation are text-based, but the MIDI files are binary data:
+
+
+```
+$ ls -1
+_portal
+song.1.qtr
+song.qtr
+song-Track_1-1.mid
+song-Track_1-3.mid
+song-Track_2-1.mid
+$ git add song*qtr
+$ git-portal song-Track*mid
+$ git add song-Track*mid
+```
+
+If you look into the **_portal** directory, you'll find the original MIDI files. The files in their place are symlinks to **_portal** , which keeps the music workstation working as expected:
+
+
+```
+$ ls -lG
+[...] _portal/
+[...] song.1.qtr
+[...] song.qtr
+[...] song-Track_1-1.mid -> _portal/song-Track_1-1.mid*
+[...] song-Track_1-3.mid -> _portal/song-Track_1-3.mid*
+[...] song-Track_2-1.mid -> _portal/song-Track_2-1.mid*
+```
+
+As with Git, you can also add a directory of files:
+
+
+```
+$ cp -r ~/synth-presets/yoshimi .
+$ git-portal add yoshimi
+Directories cannot go through the portal. Sending files instead.
+$ ls -lG _portal/yoshimi
+[...] yoshimi.stat -> ../_portal/yoshimi/yoshimi.stat*
+```
+
+Removal works as expected, but when removing something in **_portal** , you should use **git-portal rm** instead of **git rm**. Using Git-portal ensures that the file is removed from **_portal** :
+
+
+```
+$ ls
+_portal/ song.qtr song-Track_1-3.mid@ yoshimi/
+song.1.qtr song-Track_1-1.mid@ song-Track_2-1.mid@
+$ git-portal rm song-Track_1-3.mid
+rm 'song-Track_1-3.mid'
+$ ls _portal/
+song-Track_1-1.mid* song-Track_2-1.mid* yoshimi/
+```
+
+If you forget to use Git-portal, then you have to remove the portal file manually:
+
+
+```
+$ git-portal rm song-Track_1-1.mid
+rm 'song-Track_1-1.mid'
+$ ls _portal/
+song-Track_1-1.mid* song-Track_2-1.mid* yoshimi/
+$ trash _portal/song-Track_1-1.mid
+```
+
+Git-portal's only other function is to list all current symlinks and find any that may have become broken, which can sometimes happen if files move around in a project directory:
+
+
+```
+$ mkdir foo
+$ mv yoshimi foo
+$ git-portal status
+bigproject.git/song-Track_2-1.mid: symbolic link to _portal/song-Track_2-1.mid
+bigproject.git/foo/yoshimi/yoshimi.stat: broken symbolic link to ../_portal/yoshimi/yoshimi.stat
+```
+
+If you're using Git-portal for a personal project and maintaining your own backups, this is technically all you need to know about Git-portal. If you want to add in collaborators or you want Git-portal to manage backups the way (more or less) Git does, you can a remote.
+
+#### Add Git-portal remotes
+
+Adding a remote location for Git-portal is done through Git's existing remote function. Git-portal implements Git hooks, scripts hidden in your repository's .git directory, to look at your remotes for any that begin with **_portal**. If it finds one, it attempts to **rsync** to the remote location and synchronize files. Git-portal performs this action anytime you do a Git push or a Git merge (or pull, which is really just a fetch and an automatic merge).
+
+If you've only cloned Git repositories, then you may never have added a remote yourself. It's a standard Git procedure:
+
+
+```
+$ git remote add origin [git@gitdawg.com][6]:seth/bigproject.git
+$ git remote -v
+origin [git@gitdawg.com][6]:seth/bigproject.git (fetch)
+origin [git@gitdawg.com][6]:seth/bigproject.git (push)
+```
+
+The name **origin** is a popular convention for your main Git repository, so it makes sense to use it for your Git data. Your Git-portal data, however, is stored separately, so you must create a second remote to tell Git-portal where to push to and pull from. Depending on your Git host, you may need a separate server because gigabytes of media assets are unlikely to be accepted by a Git host with limited space. Or maybe you're on a server that permits you to access only your Git repository and not external storage directories:
+
+
+```
+$ git remote add _portal [seth@example.com][7]:/home/seth/git/bigproject_portal
+$ git remote -v
+origin [git@gitdawg.com][6]:seth/bigproject.git (fetch)
+origin [git@gitdawg.com][6]:seth/bigproject.git (push)
+_portal [seth@example.com][7]:/home/seth/git/bigproject_portal (fetch)
+_portal [seth@example.com][7]:/home/seth/git/bigproject_portal (push)
+```
+
+You may not want to give all of your users individual accounts on your server, and you don't have to. To provide access to the server hosting a repository's large file assets, you can run a Git frontend like **[Gitolite][8]** , or you can use **rrsync** (i.e., restricted rsync).
+
+Now you can push your Git data to your remote Git repository and your Git-portal data to your remote portal:
+
+
+```
+$ git push origin HEAD
+master destination detected
+Syncing _portal content...
+sending incremental file list
+sent 9,305 bytes received 18 bytes 1,695.09 bytes/sec
+total size is 60,358,015 speedup is 6,474.10
+Syncing _portal content to example.com:/home/seth/git/bigproject_portal
+```
+
+If you have Git-portal installed and a **_portal** remote configured, your **_portal** directory will be synchronized, getting new content from the server and sending fresh content with every push. While you don't have to do a Git commit and push to sync with the server (a user could just use rsync directly), I find it useful to require commits for artistic changes. It integrates artists and their digital assets into the rest of the workflow, and it provides useful metadata about project progress and velocity.
+
+### Other options
+
+If Git-portal is too simple for you, there are other options for managing large files with Git. [Git Large File Storage][9] (LFS) is a fork of a defunct project called git-media and is maintained and supported by GitHub. It requires special commands (like **git lfs track** to protect large files from being tracked by Git) and requires the user to manage a .gitattributes file to update which files in the repository are tracked by LFS. It supports _only_ HTTP and HTTPS remotes for large files, so your LFS server must be configured so users can authenticate over HTTP rather than SSH or rsync.
+
+A more flexible option than LFS is [git-annex][10], which you can learn more about in my article about [managing binary blobs in Git][11] (ignore the parts about the deprecated git-media, as its former flexibility doesn't apply to its successor, Git LFS). Git-annex is a flexible and elegant solution with a detailed system for adding, removing, and moving large files within a repository. Because it's flexible and powerful, there are lots of new commands and rules to learn, so take a look at its [documentation][12].
+
+If, however, your needs are simple and you like a solution that utilizes existing technology to do simple and obvious tasks, Git-portal might be the tool for the job.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/4/manage-multimedia-files-git
+
+作者:[Seth Kenlon (Red Hat, Community Moderator)][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/seth
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/video_editing_folder_music_wave_play.png?itok=-J9rs-My (video editing dashboard)
+[2]: https://opensource.com/sites/default/files/uploads/git-velocity.jpg (Graphic showing relationship between art assets and Git)
+[3]: http://gitlab.com/slackermedia/git-portal.git
+[4]: https://www.apress.com/gp/book/9781484241691
+[5]: http://mixedsignals.ml
+[6]: mailto:git@gitdawg.com
+[7]: mailto:seth@example.com
+[8]: https://opensource.com/article/19/4/file-sharing-git
+[9]: https://git-lfs.github.com/
+[10]: https://git-annex.branchable.com/
+[11]: https://opensource.com/life/16/8/how-manage-binary-blobs-git-part-7
+[12]: https://git-annex.branchable.com/walkthrough/
diff --git a/sources/tech/20190407 What it means to be Cloud-Native approach - the CNCF way.md b/sources/tech/20190407 What it means to be Cloud-Native approach - the CNCF way.md
new file mode 100644
index 0000000000..10e073a029
--- /dev/null
+++ b/sources/tech/20190407 What it means to be Cloud-Native approach - the CNCF way.md
@@ -0,0 +1,123 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (What it means to be Cloud-Native approach — the CNCF way)
+[#]: via: (https://medium.com/@sonujose993/what-it-means-to-be-cloud-native-approach-the-cncf-way-9e8ab99d4923)
+[#]: author: (Sonu Jose https://medium.com/@sonujose993)
+
+What it means to be Cloud-Native approach — the CNCF way
+======
+
+
+
+While discussing on Digital Transformation and modern application development Cloud-Native is a term which frequently comes in. But what does it actually means to be cloud-native? This blog is all about giving a good understanding of the cloud-native approach and the ways to achieve it in the CNCF way.
+
+Michael Dell once said that “the cloud isn’t a place, it’s a way of doing IT”. He was right, and the same can be said of cloud-native.
+
+Cloud-native is an approach to building and running applications that exploit the advantages of the cloud computing delivery model. Cloud-native is about how applications are created and deployed, not where. … It’s appropriate for both public and private clouds.
+
+Cloud native architectures take full advantage of on-demand delivery, global deployment, elasticity, and higher-level services. They enable huge improvements in developer productivity, business agility, scalability, availability, utilization, and cost savings.
+
+### CNCF (Cloud native computing foundation)
+
+Google has been using containers for many years and they led the Kubernetes project which is a leading container orchestration platform. But alone they can’t really change the broad perspective in the industry around modern applications. So there was a huge need for industry leaders to come together and solve the major problems facing the modern approach. In order to achieve this broader vision, Google donated kubernetes to the Cloud Native foundation and this lead to the birth of CNCF in 2015.
+
+
+
+Cloud Native computing foundation is created in the Linux foundation for building and managing platforms and solutions for modern application development. It really is a home for amazing projects that enable modern application development. CNCF defines cloud-native as “scalable applications” running in “modern dynamic environments” that use technologies such as containers, microservices, and declarative APIs. Kubernetes is the world’s most popular container-orchestration platform and the first CNCF project.
+
+### The approach…
+
+CNCF created a trail map to better understand the concept of Cloud native approach. In this article, we will be discussed based on this landscape. The newer version is available at https://landscape.cncf.io/
+
+The Cloud Native Trail Map is CNCF’s recommended path through the cloud-native landscape. This doesn’t define a specific path with which we can approach digital transformation rather there are many possible paths you can follow to align with this concept based on your business scenario. This is just a trail to simplify the journey to cloud-native.
+
+
+Let's start discussing the steps defined in this trail map.
+
+### 1. CONTAINERIZATION
+
+![][1]
+
+You can’t do cloud-native without containerizing your application. It doesn’t matter what size the application is any type of application will do. **A container is a standard unit of software that packages up the code and all its dependencies** so the application runs quickly and reliably from one computing environment to another. Docker is the most preferred platform for containerization. A **Docker container** image is a lightweight, standalone, executable package of software that includes everything needed to run an application.
+
+### 2. CI/CD
+
+![][2]
+
+Setup Continuous Integration/Continuous Delivery (CI/CD) so that changes to your source code automatically result in a new container being built, tested, and deployed to staging and eventually, perhaps, to production. Next thing we need to setup is automated rollouts, rollbacks as well as testing. There are a lot of platforms for CI/CD: **Jenkins, VSTS, Azure DevOps** , TeamCity, JFRog, Spinnaker, etc..
+
+### 3. ORCHESTRATION
+
+![][3]
+
+Container orchestration is all about managing the lifecycles of containers, especially in large, dynamic environments. Software teams use container orchestration to control and automate many tasks. **Kubernetes** is the market-leading orchestration solution. There are other orchestrators like Docker swarm, Mesos, etc.. **Helm Charts** help you define, install, and upgrade even the most complex Kubernetes application.
+
+### 4. OBSERVABILITY & ANALYSIS
+
+Kubernetes provides no native storage solution for log data, but you can integrate many existing logging solutions into your Kubernetes cluster. Kubernetes provides detailed information about an application’s resource usage at each of these levels. This information allows you to evaluate your application’s performance and where bottlenecks can be removed to improve overall performance.
+
+![][4]
+
+Pick solutions for monitoring, logging, and tracing. Consider CNCF projects Prometheus for monitoring, Fluentd for logging and Jaeger for TracingFor tracing, look for an OpenTracing-compatible implementation like Jaeger.
+
+### 5. SERVICE MESH
+
+As its name says it’s all about connecting services, the **discovery of services** , **health checking, routing** and it is used to **monitoring ingress** from the internet. A service mesh also often has more complex operational requirements, like A/B testing, canary rollouts, rate limiting, access control, and end-to-end authentication.
+
+![][5]
+
+**Istio** provides behavioral insights and operational control over the service mesh as a whole, offering a complete solution to satisfy the diverse requirements of microservice applications. **CoreDNS** is a fast and flexible tool that is useful for service discovery. **Envoy** and **Linkerd** each enable service mesh architectures.
+
+### 6. NETWORKING AND POLICY
+
+It is really important to enable more flexible networking layers. To enable more flexible networking, use a CNI compliant network project like Calico, Flannel, or Weave Net. Open Policy Agent (OPA) is a general purpose policy engine with uses ranging from authorization and admission control to data filtering
+
+### 7. DISTRIBUTED DATABASE
+
+A distributed database is a database in which not all storage devices are attached to a common processor. It may be stored in multiple computers, located in the same physical location; or may be dispersed over a network of interconnected computers.
+
+![][6]
+
+When you need more resiliency and scalability than you can get from a single database, **Vitess** is a good option for running MySQL at scale through sharding. Rook is a storage orchestrator that integrates a diverse set of storage solutions into Kubernetes. Serving as the “brain” of Kubernetes, etcd provides a reliable way to store data across a cluster of machine
+
+### 8. MESSAGING
+
+When you need higher performance than JSON-REST, consider using gRPC or NATS. gRPC is a universal RPC framework. NATS is a multi-modal messaging system that includes request/reply, pub/sub and load balanced queues. It is also applicable and take care of much newer and use cases like IoT.
+
+### 9. CONTAINER REGISTRY & RUNTIMES
+
+Container Registry is a single place for your team to manage Docker images, perform vulnerability analysis, and decide who can access what with fine-grained access control. There are many container registries available in market docker hub, Azure Container registry, Harbor, Nexus registry, Amazon Elastic Container Registry and way more…
+
+![][7]
+
+Container runtime **containerd** is available as a daemon for Linux and Windows. It manages the complete container lifecycle of its host system, from image transfer and storage to container execution and supervision to low-level storage to network attachments and beyond.
+
+### 10. SOFTWARE DISTRIBUTION
+
+If you need to do secure software distribution, evaluate Notary, implementation of The Update Framework (TUF).
+
+TUF provide a framework (a set of libraries, file formats, and utilities) that can be used to secure new and existing software update systems. The framework should enable applications to be secure from all known attacks on the software update process. It is not concerned with exposing information about what software is being updated (and thus what software the client may be running) or the contents of updates.
+
+--------------------------------------------------------------------------------
+
+via: https://medium.com/@sonujose993/what-it-means-to-be-cloud-native-approach-the-cncf-way-9e8ab99d4923
+
+作者:[Sonu Jose][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://medium.com/@sonujose993
+[b]: https://github.com/lujun9972
+[1]: https://cdn-images-1.medium.com/max/1200/1*glD7bNJG3SlO0_xNmSGPcQ.png
+[2]: https://cdn-images-1.medium.com/max/1600/1*qOno8YNzmwimlaL9j2fSbA.png
+[3]: https://cdn-images-1.medium.com/max/1200/1*fw8YJnfF32dWsX_beQpWOw.png
+[4]: https://cdn-images-1.medium.com/max/1600/1*sbjPYNq76s9lR7D_FK4ltg.png
+[5]: https://cdn-images-1.medium.com/max/1600/1*kUFBuGfjZSS-n-32CCjtwQ.png
+[6]: https://cdn-images-1.medium.com/max/1600/1*4OGiB3HHQZBFsALjaRb9pA.jpeg
+[7]: https://cdn-images-1.medium.com/max/1600/1*VMCJN41mGZs4p2lQHD0nDw.png
diff --git a/sources/tech/20190408 A beginner-s guide to building DevOps pipelines with open source tools.md b/sources/tech/20190408 A beginner-s guide to building DevOps pipelines with open source tools.md
new file mode 100644
index 0000000000..2110c17606
--- /dev/null
+++ b/sources/tech/20190408 A beginner-s guide to building DevOps pipelines with open source tools.md
@@ -0,0 +1,352 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (A beginner's guide to building DevOps pipelines with open source tools)
+[#]: via: (https://opensource.com/article/19/4/devops-pipeline)
+[#]: author: (Bryant Son https://opensource.com/users/brson/users/milindsingh/users/milindsingh/users/dscripter)
+
+A beginner's guide to building DevOps pipelines with open source tools
+======
+If you're new to DevOps, check out this five-step process for building
+your first pipeline.
+![Shaking hands, networking][1]
+
+DevOps has become the default answer to fixing software development processes that are slow, siloed, or otherwise dysfunctional. But that doesn't mean very much when you're new to DevOps and aren't sure where to begin. This article explores what a DevOps pipeline is and offers a five-step process to create one. While this tutorial is not comprehensive, it should give you a foundation to start on and expand later. But first, a story.
+
+### My DevOps journey
+
+I used to work for the cloud team at Citi Group, developing an Infrastructure-as-a-Service (IaaS) web application to manage Citi's cloud infrastructure, but I was always interested in figuring out ways to make the development pipeline more efficient and bring positive cultural change to the development team. I found my answer in a book recommended by Greg Lavender, who was the CTO of Citi's cloud architecture and infrastructure engineering, called _[The Phoenix Project][2]_. The book reads like a novel while it explains DevOps principles.
+
+A table at the back of the book shows how often different companies deploy to the release environment:
+
+Company | Deployment Frequency
+---|---
+Amazon | 23,000 per day
+Google | 5,500 per day
+Netflix | 500 per day
+Facebook | 1 per day
+Twitter | 3 per week
+Typical enterprise | 1 every 9 months
+
+How are the frequency rates of Amazon, Google, and Netflix even possible? It's because these companies have figured out how to make a nearly perfect DevOps pipeline.
+
+This definitely wasn't the case before we implemented DevOps at Citi. Back then, my team had different staged environments, but deployments to the development server were very manual. All developers had access to just one development server based on IBM WebSphere Application Server Community Edition. The problem was the server went down whenever multiple users simultaneously tried to make deployments, so the developers had to let each other know whenever they were about to make a deployment, which was quite a pain. In addition, there were problems with low code test coverages, cumbersome manual deployment processes, and no way to track code deployments with a defined task or a user story.
+
+I realized something had to be done, and I found a colleague who felt the same way. We decided to collaborate to build an initial DevOps pipeline—he set up a virtual machine and a Tomcat application server while I worked on Jenkins, integrating with Atlassian Jira and BitBucket, and code testing coverages. This side project was hugely successful: we almost fully automated the development pipeline, we achieved nearly 100% uptime on our development server, we could track and improve code testing coverage, and the Git branch could be associated with the deployment and Jira task. And most of the tools we used to construct our DevOps pipeline were open source.
+
+I now realize how rudimentary our DevOps pipeline was, as we didn't take advantage of advanced configurations like Jenkins files or Ansible. However, this simple process worked well, maybe due to the [Pareto][3] principle (also known as the 80/20 rule).
+
+### A brief introduction to DevOps and the CI/CD pipeline
+
+If you ask several people, "What is DevOps? you'll probably get several different answers. DevOps, like agile, has evolved to encompass many different disciplines, but most people will agree on a few things: DevOps is a software development practice or a software development lifecycle (SDLC) and its central tenet is cultural change, where developers and non-developers all breathe in an environment where formerly manual things are automated; everyone does what they are best at; the number of deployments per period increases; throughput increases; and flexibility improves.
+
+While having the right software tools is not the only thing you need to achieve a DevOps environment, some tools are necessary. A key one is continuous integration and continuous deployment (CI/CD). This pipeline is where the environments have different stages (e.g., DEV, INT, TST, QA, UAT, STG, PROD), manual things are automated, and developers can achieve high-quality code, flexibility, and numerous deployments.
+
+This article describes a five-step approach to creating a DevOps pipeline, like the one in the following diagram, using open source tools.
+
+![Complete DevOps pipeline][4]
+
+Without further ado, let's get started.
+
+### Step 1: CI/CD framework
+
+The first thing you need is a CI/CD tool. Jenkins, an open source, Java-based CI/CD tool based on the MIT License, is the tool that popularized the DevOps movement and has become the de facto standard.
+
+So, what is Jenkins? Imagine it as some sort of a magical universal remote control that can talk to many many different services and tools and orchestrate them. On its own, a CI/CD tool like Jenkins is useless, but it becomes more powerful as it plugs into different tools and services.
+
+Jenkins is just one of many open source CI/CD tools that you can leverage to build a DevOps pipeline.
+
+Name | License
+---|---
+[Jenkins][5] | Creative Commons and MIT
+[Travis CI][6] | MIT
+[CruiseControl][7] | BSD
+[Buildbot][8] | GPL
+[Apache Gump][9] | Apache 2.0
+[Cabie][10] | GNU
+
+Here's what a DevOps process looks like with a CI/CD tool.
+
+![CI/CD tool][11]
+
+You have a CI/CD tool running in your localhost, but there is not much you can do at the moment. Let's follow the next step of DevOps journey.
+
+### Step 2: Source control management
+
+The best (and probably the easiest) way to verify that your CI/CD tool can perform some magic is by integrating with a source control management (SCM) tool. Why do you need source control? Suppose you are developing an application. Whenever you build an application, you are programming—whether you are using Java, Python, C++, Go, Ruby, JavaScript, or any of the gazillion programming languages out there. The programming codes you write are called source codes. In the beginning, especially when you are working alone, it's probably OK to put everything in your local directory. But when the project gets bigger and you invite others to collaborate, you need a way to avoid merge conflicts while effectively sharing the code modifications. You also need a way to recover a previous version—and the process of making a backup and copying-and-pasting gets old. You (and your teammates) want something better.
+
+This is where SCM becomes almost a necessity. A SCM tool helps by storing your code in repositories, versioning your code, and coordinating among project members.
+
+Although there are many SCM tools out there, Git is the standard and rightly so. I highly recommend using Git, but there are other open source options if you prefer.
+
+Name | License
+---|---
+[Git][12] | GPLv2 & LGPL v2.1
+[Subversion][13] | Apache 2.0
+[Concurrent Versions System][14] (CVS) | GNU
+[Vesta][15] | LGPL
+[Mercurial][16] | GNU GPL v2+
+
+Here's what the DevOps pipeline looks like with the addition of SCM.
+
+![Source control management][17]
+
+The CI/CD tool can automate the tasks of checking in and checking out source code and collaborating across members. Not bad? But how can you make this into a working application so billions of people can use and appreciate it?
+
+### Step 3: Build automation tool
+
+Excellent! You can check out the code and commit your changes to the source control, and you can invite your friends to collaborate on the source control development. But you haven't yet built an application. To make it a web application, it has to be compiled and put into a deployable package format or run as an executable. (Note that an interpreted programming language like JavaScript or PHP doesn't need to be compiled.)
+
+Enter the build automation tool. No matter which build tool you decide to use, all build automation tools have a shared goal: to build the source code into some desired format and to automate the task of cleaning, compiling, testing, and deploying to a certain location. The build tools will differ depending on your programming language, but here are some common open source options to consider.
+
+Name | License | Programming Language
+---|---|---
+[Maven][18] | Apache 2.0 | Java
+[Ant][19] | Apache 2.0 | Java
+[Gradle][20] | Apache 2.0 | Java
+[Bazel][21] | Apache 2.0 | Java
+[Make][22] | GNU | N/A
+[Grunt][23] | MIT | JavaScript
+[Gulp][24] | MIT | JavaScript
+[Buildr][25] | Apache | Ruby
+[Rake][26] | MIT | Ruby
+[A-A-P][27] | GNU | Python
+[SCons][28] | MIT | Python
+[BitBake][29] | GPLv2 | Python
+[Cake][30] | MIT | C#
+[ASDF][31] | Expat (MIT) | LISP
+[Cabal][32] | BSD | Haskell
+
+Awesome! You can put your build automation tool configuration files into your source control management and let your CI/CD tool build it.
+
+![Build automation tool][33]
+
+Everything is good, right? But where can you deploy it?
+
+### Step 4: Web application server
+
+So far, you have a packaged file that might be executable or deployable. For any application to be truly useful, it has to provide some kind of a service or an interface, but you need a vessel to host your application.
+
+For a web application, a web application server is that vessel. An application server offers an environment where the programming logic inside the deployable package can be detected, render the interface, and offer the web services by opening sockets to the outside world. You need an HTTP server as well as some other environment (like a virtual machine) to install your application server. For now, let's assume you will learn about this along the way (although I will discuss containers below).
+
+There are a number of open source web application servers available.
+
+Name | License | Programming Language
+---|---|---
+[Tomcat][34] | Apache 2.0 | Java
+[Jetty][35] | Apache 2.0 | Java
+[WildFly][36] | GNU Lesser Public | Java
+[GlassFish][37] | CDDL & GNU Less Public | Java
+[Django][38] | 3-Clause BSD | Python
+[Tornado][39] | Apache 2.0 | Python
+[Gunicorn][40] | MIT | Python
+[Python Paste][41] | MIT | Python
+[Rails][42] | MIT | Ruby
+[Node.js][43] | MIT | Javascript
+
+Now the DevOps pipeline is almost usable. Good job!
+
+![Web application server][44]
+
+Although it's possible to stop here and integrate further on your own, code quality is an important thing for an application developer to be concerned about.
+
+### Step 5: Code testing coverage
+
+Implementing code test pieces can be another cumbersome requirement, but developers need to catch any errors in an application early on and improve the code quality to ensure end users are satisfied. Luckily, there are many open source tools available to test your code and suggest ways to improve its quality. Even better, most CI/CD tools can plug into these tools and automate the process.
+
+There are two parts to code testing: _code testing frameworks_ that help write and run the tests, and _code quality suggestion tools_ that help improve code quality.
+
+#### Code test frameworks
+
+Name | License | Programming Language
+---|---|---
+[JUnit][45] | Eclipse Public License | Java
+[EasyMock][46] | Apache | Java
+[Mockito][47] | MIT | Java
+[PowerMock][48] | Apache 2.0 | Java
+[Pytest][49] | MIT | Python
+[Hypothesis][50] | Mozilla | Python
+[Tox][51] | MIT | Python
+
+#### Code quality suggestion tools
+
+Name | License | Programming Language
+---|---|---
+[Cobertura][52] | GNU | Java
+[CodeCover][53] | Eclipse Public (EPL) | Java
+[Coverage.py][54] | Apache 2.0 | Python
+[Emma][55] | Common Public License | Java
+[JaCoCo][56] | Eclipse Public License | Java
+[Hypothesis][50] | Mozilla | Python
+[Tox][51] | MIT | Python
+[Jasmine][57] | MIT | JavaScript
+[Karma][58] | MIT | JavaScript
+[Mocha][59] | MIT | JavaScript
+[Jest][60] | MIT | JavaScript
+
+Note that most of the tools and frameworks mentioned above are written for Java, Python, and JavaScript, since C++ and C# are proprietary programming languages (although GCC is open source).
+
+Now that you've implemented code testing coverage tools, your DevOps pipeline should resemble the DevOps pipeline diagram shown at the beginning of this tutorial.
+
+### Optional steps
+
+#### Containers
+
+As I mentioned above, you can host your application server on a virtual machine or a server, but containers are a popular solution.
+
+[What are][61] [containers][61]? The short explanation is that a VM needs the huge footprint of an operating system, which overwhelms the application size, while a container just needs a few libraries and configurations to run the application. There are clearly still important uses for a VM, but a container is a lightweight solution for hosting an application, including an application server.
+
+Although there are other options for containers, Docker and Kubernetes are the most popular.
+
+Name | License
+---|---
+[Docker][62] | Apache 2.0
+[Kubernetes][63] | Apache 2.0
+
+To learn more, check out these other [Opensource.com][64] articles about Docker and Kubernetes:
+
+ * [What Is Docker?][65]
+ * [An introduction to Docker][66]
+ * [What is Kubernetes?][67]
+ * [From 0 to Kubernetes][68]
+
+
+
+#### Middleware automation tools
+
+Our DevOps pipeline mostly focused on collaboratively building and deploying an application, but there are many other things you can do with DevOps tools. One of them is leveraging Infrastructure as Code (IaC) tools, which are also known as middleware automation tools. These tools help automate the installation, management, and other tasks for middleware software. For example, an automation tool can pull applications, like a web application server, database, and monitoring tool, with the right configurations and deploy them to the application server.
+
+Here are several open source middleware automation tools to consider:
+
+Name | License
+---|---
+[Ansible][69] | GNU Public
+[SaltStack][70] | Apache 2.0
+[Chef][71] | Apache 2.0
+[Puppet][72] | Apache or GPL
+
+For more on middleware automation tools, check out these other [Opensource.com][64] articles:
+
+ * [A quickstart guide to Ansible][73]
+ * [Automating deployment strategies with Ansible][74]
+ * [Top 5 configuration management tools][75]
+
+
+
+### Where can you go from here?
+
+This is just the tip of the iceberg for what a complete DevOps pipeline can look like. Start with a CI/CD tool and explore what else you can automate to make your team's job easier. Also, look into [open source communication tools][76] that can help your team work better together.
+
+For more insight, here are some very good introductory articles about DevOps:
+
+ * [What is DevOps][77]
+ * [5 things to master to be a DevOps engineer][78]
+ * [DevOps is for everyone][79]
+ * [Getting started with predictive analytics in DevOps][80]
+
+
+
+Integrating DevOps with open source agile tools is also a good idea:
+
+ * [What is agile?][81]
+ * [4 steps to becoming an awesome agile developer][82]
+
+
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/4/devops-pipeline
+
+作者:[Bryant Son (Red Hat, Community Moderator)][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/brson/users/milindsingh/users/milindsingh/users/dscripter
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/network_team_career_hand.png?itok=_ztl2lk_ (Shaking hands, networking)
+[2]: https://www.amazon.com/dp/B078Y98RG8/
+[3]: https://en.wikipedia.org/wiki/Pareto_principle
+[4]: https://opensource.com/sites/default/files/uploads/1_finaldevopspipeline.jpg (Complete DevOps pipeline)
+[5]: https://github.com/jenkinsci/jenkins
+[6]: https://github.com/travis-ci/travis-ci
+[7]: http://cruisecontrol.sourceforge.net
+[8]: https://github.com/buildbot/buildbot
+[9]: https://gump.apache.org
+[10]: http://cabie.tigris.org
+[11]: https://opensource.com/sites/default/files/uploads/2_runningjenkins.jpg (CI/CD tool)
+[12]: https://git-scm.com
+[13]: https://subversion.apache.org
+[14]: http://savannah.nongnu.org/projects/cvs
+[15]: http://www.vestasys.org
+[16]: https://www.mercurial-scm.org
+[17]: https://opensource.com/sites/default/files/uploads/3_sourcecontrolmanagement.jpg (Source control management)
+[18]: https://maven.apache.org
+[19]: https://ant.apache.org
+[20]: https://gradle.org/
+[21]: https://bazel.build
+[22]: https://www.gnu.org/software/make
+[23]: https://gruntjs.com
+[24]: https://gulpjs.com
+[25]: http://buildr.apache.org
+[26]: https://github.com/ruby/rake
+[27]: http://www.a-a-p.org
+[28]: https://www.scons.org
+[29]: https://www.yoctoproject.org/software-item/bitbake
+[30]: https://github.com/cake-build/cake
+[31]: https://common-lisp.net/project/asdf
+[32]: https://www.haskell.org/cabal
+[33]: https://opensource.com/sites/default/files/uploads/4_buildtools.jpg (Build automation tool)
+[34]: https://tomcat.apache.org
+[35]: https://www.eclipse.org/jetty/
+[36]: http://wildfly.org
+[37]: https://javaee.github.io/glassfish
+[38]: https://www.djangoproject.com/
+[39]: http://www.tornadoweb.org/en/stable
+[40]: https://gunicorn.org
+[41]: https://github.com/cdent/paste
+[42]: https://rubyonrails.org
+[43]: https://nodejs.org/en
+[44]: https://opensource.com/sites/default/files/uploads/5_applicationserver.jpg (Web application server)
+[45]: https://junit.org/junit5
+[46]: http://easymock.org
+[47]: https://site.mockito.org
+[48]: https://github.com/powermock/powermock
+[49]: https://docs.pytest.org
+[50]: https://hypothesis.works
+[51]: https://github.com/tox-dev/tox
+[52]: http://cobertura.github.io/cobertura
+[53]: http://codecover.org/
+[54]: https://github.com/nedbat/coveragepy
+[55]: http://emma.sourceforge.net
+[56]: https://github.com/jacoco/jacoco
+[57]: https://jasmine.github.io
+[58]: https://github.com/karma-runner/karma
+[59]: https://github.com/mochajs/mocha
+[60]: https://jestjs.io
+[61]: /resources/what-are-linux-containers
+[62]: https://www.docker.com
+[63]: https://kubernetes.io
+[64]: http://Opensource.com
+[65]: https://opensource.com/resources/what-docker
+[66]: https://opensource.com/business/15/1/introduction-docker
+[67]: https://opensource.com/resources/what-is-kubernetes
+[68]: https://opensource.com/article/17/11/kubernetes-lightning-talk
+[69]: https://www.ansible.com
+[70]: https://www.saltstack.com
+[71]: https://www.chef.io
+[72]: https://puppet.com
+[73]: https://opensource.com/article/19/2/quickstart-guide-ansible
+[74]: https://opensource.com/article/19/1/automating-deployment-strategies-ansible
+[75]: https://opensource.com/article/18/12/configuration-management-tools
+[76]: https://opensource.com/alternatives/slack
+[77]: https://opensource.com/resources/devops
+[78]: https://opensource.com/article/19/2/master-devops-engineer
+[79]: https://opensource.com/article/18/11/how-non-engineer-got-devops
+[80]: https://opensource.com/article/19/1/getting-started-predictive-analytics-devops
+[81]: https://opensource.com/article/18/10/what-agile
+[82]: https://opensource.com/article/19/2/steps-agile-developer
diff --git a/sources/tech/20190408 Beyond SD-WAN- VMware-s vision for the network edge.md b/sources/tech/20190408 Beyond SD-WAN- VMware-s vision for the network edge.md
new file mode 100644
index 0000000000..4ec5b372e0
--- /dev/null
+++ b/sources/tech/20190408 Beyond SD-WAN- VMware-s vision for the network edge.md
@@ -0,0 +1,114 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Beyond SD-WAN: VMware’s vision for the network edge)
+[#]: via: (https://www.networkworld.com/article/3387641/beyond-sd-wan-vmwares-vision-for-the-network-edge.html#tk.rss_all)
+[#]: author: (Linda Musthaler https://www.networkworld.com/author/Linda-Musthaler/)
+
+Beyond SD-WAN: VMware’s vision for the network edge
+======
+Under the ownership of VMware, the VeloCloud Business Unit is greatly expanding its vision of what an SD-WAN should be. VMware calls the strategy “the network edge.”
+![istock][1]
+
+VeloCloud is now a Business Unit within VMware since being acquired in December 2017. The two companies have had sufficient time to integrate their operations and fit their technologies together to build a cohesive offering. In January, Neal Weinberg provided [an overview of where VMware is headed with its reinvention][2]. Now let’s look at it from the VeloCloud [SD-WAN][3] perspective.
+
+I recently talked to Sanjay Uppal, vice president and general manager of the VeloCloud Business Unit. He shared with me where VeloCloud is heading, adding that it’s all possible because of the complementary products that VMware brings to VeloCloud’s table.
+
+**[ Read also:[Edge computing is the place to address a host of IoT security concerns][4] ]**
+
+It all starts with this architecture chart that shows the VMware vision for the network edge.
+
+![][5]
+
+The left side of the chart shows that in the branch office, you can put an edge device that can be either a VeloCloud hardware appliance or VeloCloud software running on some third-party hardware. Then the right side of the chart shows where the workloads are — the traditional data center, the public cloud, and SaaS applications. You can put one or more edge devices there and then you have the classic hub-and-spoke model with the VeloCloud SD-WAN on running on top.
+
+In the middle of the diagram are the gateways, which are a differentiator and a unique benefit of VeloCloud.
+
+“If you have applications in the public cloud or SaaS, then you can use our gateways instead of spinning up individual edges at each of the applications,” Uppal said. “Those gateways really perform a multi-tenanted edge function. So, instead of locating an individual edge at every termination point at the cloud, you basically go from an edge in the branch to a gateway in the cloud, and then from that gateway you go to your final destination. We've engineered it so that the gateways are close to where the end applications are — typically within five milliseconds.”
+
+Going back to the architecture diagram, there are two clouds in the middle of the chart. The left-hand cloud is the over-the-top (OTT) service run by VeloCloud. It uses 800 gateways deployed over 30 points of presence (PoPs) around the world. The right-hand cloud is the telco cloud, which deploys gateways as network-based services. VeloCloud has several telco partners that take the same VeloCloud gateways and deploy them in their cloud.
+
+“Between a telco service, a cloud service, and hub and spoke on premise, we essentially have covered all the bases in terms of how enterprises would want to consume software-defined WAN. This flexibility is part of the reason why we've been successful in this market,” Uppal said.
+
+Where is VeloCloud going with this strategy? Again, looking at the architecture chart, the “vision” pieces are labeled 1 through 5. Let’s look at each of those areas.
+
+### Edge compute
+
+Starting with number 1 on the left-hand side of the diagram, there is the expansion from the edge itself going deeper into the branch by crossing over a LAN or a Wi-Fi boundary to get to where the individual users and IoT “things” are. This approach uses the same VeloCloud platform to spin up [compute at the edge][6], which can be either a container or a virtual machine (VM).
+
+“Of course, VMwareis very strong in compute in the data center. Our CEO recently articulated the VMware edge story, which is compute edge and device edge. When you combine it with the network edge, which is VeloCloud, then you have a full edge solution,” Uppal explained. “So, this first piece that you see is our foray into getting deeper into the branch all the way up to the individual users and things and combining compute functions on to the VeloCloud solution. There's been a lot of talk about edge compute and we do know that the pendulum is swinging back, but one of the major challenges is how to manage it all. VMware has strong technology in the data center space that we are bringing to bear out there at the edge.”
+
+### 5G underlay intelligence
+
+The next piece, number 2 on the diagram, is [5G][7]. At the Mobile World Congress, VMware and AT&T announced they are bringing SD-WAN out running on 5G. The idea here is that 5G should give you a low-latency connection and you get on-demand control, so you can tell 5G on the fly that you want this type of connection. Once that is done, the right network slices would be put in place and then you can get a connection according to the specifications that you asked for.
+
+“We as VeloCloud would measure the underlay continuously. It's like a speed test on steroids. We would measure bandwidth, packet loss, jitter and latency continuously with low overhead because we piggyback on real user traffic. And then on the basis of that measurement, we would steer the traffic one way or another,” Uppal said. “For example, your real-time voice is important, so let's pick the best performing network at that instant of time, which might change in the next instant, so that's why we have to make that decision on a per-packet basis.”
+
+Uppal continued, “What 5G allows us to do is to look at that underlay as not just being one underlay, but it could be several different underlays, and it's programmable so you could ask it for a type of underlay. That is actually pretty revolutionary — that we would run an overlay with the intelligence of SD-WAN counting on the underlay intelligence of 5G.
+
+“We are working pretty closely with our partner AT&T in this space. We are talking about the business aspect of 5G being used as a transport mechanism for enterprise data, rather than consumer phones having 5G on them. This is available from AT&T today in a handful of cities. So as 5G becomes more ubiquitous, you'll begin to see it deployed more and more. Then we will do an Ethernet or Wi-Fi handoff to the hotspot, and from then on, we'll jump onto the 5G network for the SD-WAN. Then the next phase of that will be 5G natively on our devices, which is what we are working on today.”
+
+### Gateway federation
+
+The third part of the vision is gateway federation, some of which is available today. The left-hand cloud in the diagram, which is the OTT service, should be able to interoperate gateway to gateway with the cloud on the right-hand side, which is the network-based service. For example, if you have a telco cloud of gateways but those gateways don't reach out into areas where the telco doesn’t have a presence, then you can reuse VeloCloud gateways that are sitting in other locations. A gateway would federate with another gateway, so it would extend the telco’s network beyond the facilities that they own. That's the first step of gateway federation, which is available from VeloCloud today.
+
+Uppal said the next step is a telco-to telco-federation. “There's a lot of interest from folks in the industry on how to get that federation done. We're working with the Metro Ethernet Forum (MEF) on that,” he said.
+
+### SD-WAN as a platform
+
+The next piece of the vision is SD-WAN as a platform. VeloCloud already incorporates security services into its SD-WAN platform in the form of [virtual network functions][8] (VNFs) from Palo Alto, Check Point Software, and other partners. Deploying a service as a VNF eliminates having separate hardware on the network. Now the company is starting to bring more services onto its platform.
+
+“Analytics is the area we are bringing in next,” Uppal said. “We partnered with SevOne and Plixer so that they can take analytics that we are providing, correlate them with other analytics that they have and then come up with inferences on whether things worked correctly or not, or to check for anomalous behavior.”
+
+Two additional areas that VeloCloud is working on are unified communications as a service (UCaaS) and universal customer premises equipment (uCPE).
+
+“We announced that we are working with RingCentral in the UCaaS space, and with ADVA and Telco Systems for uCPE. We have our own uCPE offering today but with a limited number of VNFs, so ADVA and Telco Systems will help us expand those capabilities,” Uppal explained. “With SD-WAN becoming a platform for on-premise deployments, you can virtualize functions and manage them from the same place, whether they're VNF-type of functions or compute-type of functions. This is an important direction that we are moving towards.”
+
+### Hybrid and multi-cloud integration
+
+The final piece of the strategy is hybrid and multi-cloud integration. Since its inception, VeloCloud has had gateways to facilitate access to specific applications running in the cloud. These gateways provide a secure end-to-end connection and an ROI advantage.
+
+Recognizing that workloads have expanded to multi-cloud and hybrid cloud, VeloCloud is broadening this approach utilizing VMware’s relationships with Microsoft, Amazon, and Google and offerings on Azure, Amazon Web Services, and Google Cloud, respectively. From a networking standpoint, you can get the same consistency of access using VeloCloud because you can decide from the gateway whichever direction you want to go. That direction will be chosen — and services added — based on your business policy.
+
+“We think this is the next hurdle in terms of deployment of SD-WAN, and once that is solved, people are going to deploy a lot more for hybrid and multi-cloud,” said Uppal. “We want to be the first ones out of the gate to get that done.”
+
+Uppal further said, “These five areas are where we see our SD-WAN headed, and we call this a network edge because it's beyond just the traditional SD-WAN functions. It includes edge computing, SD-WAN becoming a broader platform, integrating with hybrid multi cloud — these are all aspects of features that go way beyond just the narrower definition of SD-WAN.”
+
+**More about edge networking:**
+
+ * [How edge networking and IoT will reshape data centers][9]
+ * [Edge computing best practices][10]
+ * [How edge computing can help secure the IoT][11]
+
+
+
+Join the Network World communities on [Facebook][12] and [LinkedIn][13] to comment on topics that are top of mind.
+
+--------------------------------------------------------------------------------
+
+via: https://www.networkworld.com/article/3387641/beyond-sd-wan-vmwares-vision-for-the-network-edge.html#tk.rss_all
+
+作者:[Linda Musthaler][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.networkworld.com/author/Linda-Musthaler/
+[b]: https://github.com/lujun9972
+[1]: https://images.idgesg.net/images/article/2018/01/istock-864405678-100747484-large.jpg
+[2]: https://www.networkworld.com/article/3340259/vmware-s-transformation-takes-hold.html
+[3]: https://www.networkworld.com/article/3031279/sd-wan-what-it-is-and-why-you-ll-use-it-one-day.html
+[4]: https://www.networkworld.com/article/3307859/edge-computing-helps-a-lot-of-iot-security-problems-by-getting-it-involved.html
+[5]: https://images.idgesg.net/images/article/2019/04/vmware-vision-for-network-edge-100793086-large.jpg
+[6]: https://www.networkworld.com/article/3224893/what-is-edge-computing-and-how-it-s-changing-the-network.html
+[7]: https://www.networkworld.com/article/3203489/what-is-5g-how-is-it-better-than-4g.html
+[8]: https://www.networkworld.com/article/3206709/what-s-the-difference-between-sdn-and-nfv.html
+[9]: https://www.networkworld.com/article/3291790/data-center/how-edge-networking-and-iot-will-reshape-data-centers.html
+[10]: https://www.networkworld.com/article/3331978/lan-wan/edge-computing-best-practices.html
+[11]: https://www.networkworld.com/article/3331905/internet-of-things/how-edge-computing-can-help-secure-the-iot.html
+[12]: https://www.facebook.com/NetworkWorld/
+[13]: https://www.linkedin.com/company/network-world
diff --git a/sources/tech/20190408 InitRAMFS, Dracut, and the Dracut Emergency Shell.md b/sources/tech/20190408 InitRAMFS, Dracut, and the Dracut Emergency Shell.md
new file mode 100644
index 0000000000..b0e1948ff4
--- /dev/null
+++ b/sources/tech/20190408 InitRAMFS, Dracut, and the Dracut Emergency Shell.md
@@ -0,0 +1,135 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (InitRAMFS, Dracut, and the Dracut Emergency Shell)
+[#]: via: (https://fedoramagazine.org/initramfs-dracut-and-the-dracut-emergency-shell/)
+[#]: author: (Gregory Bartholomew https://fedoramagazine.org/author/glb/)
+
+InitRAMFS, Dracut, and the Dracut Emergency Shell
+======
+
+![][1]
+
+The [Linux startup process][2] goes through several stages before reaching the final [graphical or multi-user target][3]. The initramfs stage occurs just before the root file system is mounted. Dracut is a tool that is used to manage the initramfs. The dracut emergency shell is an interactive mode that can be initiated while the initramfs is loaded.
+
+This article will show how to use the dracut command to modify the initramfs. Some basic troubleshooting commands that can be run from the dracut emergency shell will also be demonstrated.
+
+### The InitRAMFS
+
+[Initramfs][4] stands for Initial Random-Access Memory File System. On modern Linux systems, it is typically stored in a file under the /boot directory. The kernel version for which it was built will be included in the file name. A new initramfs is generated every time a new kernel is installed.
+
+![A Linux Boot Directory][5]
+
+By default, Fedora keeps the previous two versions of the kernel and its associated initramfs. This default can be changed by modifying the value of the _installonly_limit_ setting the /etc/dnf/dnf.conf file.
+
+You can use the _lsinitrd_ command to list the contents of your initramfs archive:
+
+![The LsInitRD Command][6]
+
+The above screenshot shows that my initramfs archive contains the _nouveau_ GPU driver. The _modinfo_ command tells me that the nouveau driver supports several models of NVIDIA video cards. The _lspci_ command shows that there is an NVIDIA GeForce video card in my computer’s PCI slot. There are also several basic Unix commands included in the archive such as _cat_ and _cp_.
+
+By default, the initramfs archive only includes the drivers that are needed for your specific computer. This allows the archive to be smaller and decreases the time that it takes for your computer to boot.
+
+### The Dracut Command
+
+The _dracut_ command can be used to modify the contents of your initramfs. For example, if you are going to move your hard drive to a new computer, you might want to temporarily include all drivers in the initramfs to be sure that the operating system can load on the new computer. To do so, you would run the following command:
+
+```
+# dracut --force --no-hostonly
+```
+
+The _force_ parameter tells dracut that it is OK to overwrite the existing initramfs archive. The _no-hostonly_ parameter overrides the default behavior of including only drivers that are germane to the currently-running computer and causes dracut to instead include all drivers in the initramfs.
+
+By default dracut operates on the initramfs for the currently-running kernel. You can use the _uname_ command to display which version of the Linux kernel you are currently running:
+
+```
+$ uname -r
+5.0.5-200.fc29.x86_64
+```
+
+Once you have your hard drive installed and running in your new computer, you can re-run the dracut command to regenerate the initramfs with only the drivers that are needed for the new computer:
+
+```
+# dracut --force
+```
+
+There are also parameters to add arbitrary drivers, dracut modules, and files to the initramfs archive. You can also create configuration files for dracut and save them under the /etc/dracut.conf.d directory so that your customizations will be automatically applied to all new initramfs archives that are generated when new kernels are installed. As always, check the man page for the details that are specific to the version of dracut you have installed on your computer:
+
+```
+$ man dracut
+```
+
+### The Dracut Emergency Shell
+
+![The Dracut Emergency Shell][7]
+
+Sometimes something goes wrong during the initramfs stage of your computer’s boot process. When this happens, you will see “Entering emergency mode” printed to the screen followed by a shell prompt. This gives you a chance to try and fix things up manually and continue the boot process.
+
+As a somewhat contrived example, let’s suppose that I accidentally deleted an important kernel parameter in my boot loader configuration:
+
+```
+# sed -i 's/ rd.lvm.lv=fedora\/root / /' /boot/grub2/grub.cfg
+```
+
+The next time I reboot my computer, it will seem to hang for several minutes while it is trying to find the root partition and eventually give up and drop to an emergency shell.
+
+From the emergency shell, I can enter _journalctl_ and then use the **Space** key to page down though the startup logs. Near the end of the log I see a warning that reads “/dev/mapper/fedora-root does not exist”. I can then use the _ls_ command to find out what does exist:
+
+```
+# ls /dev/mapper
+control fedora-swap
+```
+
+Hmm, the fedora-root LVM volume appears to be missing. Let’s see what I can find with the lvm command:
+
+```
+# lvm lvscan
+ACTIVE '/dev/fedora/swap' [3.85 GiB] inherit
+inactive '/dev/fedora/home' [22.85 GiB] inherit
+inactive '/dev/fedora/root' [46.80 GiB] inherit
+```
+
+Ah ha! There’s my root partition. It’s just inactive. All I need to do is activate it and exit the emergency shell to continue the boot process:
+
+```
+# lvm lvchange -a y fedora/root
+# exit
+```
+
+![The Fedora Login Screen][8]
+
+The above example only demonstrates the basic concept. You can check the [troubleshooting section][9] of the [dracut guide][10] for a few more examples.
+
+It is possible to access the dracut emergency shell manually by adding the _rd.break_ parameter to your kernel command line. This can be useful if you need to access your files before any system services have been started.
+
+Check the _dracut.kernel_ man page for details about what kernel options your version of dracut supports:
+
+```
+$ man dracut.kernel
+```
+
+--------------------------------------------------------------------------------
+
+via: https://fedoramagazine.org/initramfs-dracut-and-the-dracut-emergency-shell/
+
+作者:[Gregory Bartholomew][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://fedoramagazine.org/author/glb/
+[b]: https://github.com/lujun9972
+[1]: https://fedoramagazine.org/wp-content/uploads/2019/04/dracut-816x345.png
+[2]: https://en.wikipedia.org/wiki/Linux_startup_process
+[3]: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system_administrators_guide/sect-managing_services_with_systemd-targets
+[4]: https://en.wikipedia.org/wiki/Initial_ramdisk
+[5]: https://fedoramagazine.org/wp-content/uploads/2019/04/boot.jpg
+[6]: https://fedoramagazine.org/wp-content/uploads/2019/04/lsinitrd.jpg
+[7]: https://fedoramagazine.org/wp-content/uploads/2019/04/dracut-shell.jpg
+[8]: https://fedoramagazine.org/wp-content/uploads/2019/04/fedora-login-1024x768.jpg
+[9]: http://www.kernel.org/pub/linux/utils/boot/dracut/dracut.html#_troubleshooting
+[10]: http://www.kernel.org/pub/linux/utils/boot/dracut/dracut.html
diff --git a/sources/tech/20190408 Linux Server Hardening Using Idempotency with Ansible- Part 1.md b/sources/tech/20190408 Linux Server Hardening Using Idempotency with Ansible- Part 1.md
new file mode 100644
index 0000000000..ca0d81d89a
--- /dev/null
+++ b/sources/tech/20190408 Linux Server Hardening Using Idempotency with Ansible- Part 1.md
@@ -0,0 +1,94 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Linux Server Hardening Using Idempotency with Ansible: Part 1)
+[#]: via: (https://www.linux.com/blog/linux-server-hardening-using-idempotency-ansible-part-1)
+[#]: author: (Chris Binnie https://www.linux.com/users/chrisbinnie)
+
+Linux Server Hardening Using Idempotency with Ansible: Part 1
+======
+
+![][1]
+
+[Creative Commons Zero][2]
+
+I think it’s safe to say that the need to frequently update the packages on our machines has been firmly drilled into us. To ensure the use of latest features and also keep security bugs to a minimum, skilled engineers and even desktop users are well-versed in the need to update their software.
+
+Hardware, software and SaaS (Software as a Service) vendors have also firmly embedded the word “firewall” into our vocabulary for both domestic and industrial uses to protect our computers. In my experience, however, even within potentially more sensitive commercial environments, few engineers actively tweak the operating system (OS) they’re working on, to any great extent at least, to bolster security.
+
+Standard fare on Linux systems, for example, might mean looking at configuring a larger swap file to cope with your hungry application’s demands. Or, maybe adding a separate volume to your server for extra disk space, specifying a more performant CPU at launch time, installing a few of your favorite DevOps tools, or chucking a couple of certificates onto the filesystem for each new server you build. This isn’t quite the same thing.
+
+### Improve your Security Posture
+
+What I am specifically referring to is a mixture of compliance and security, I suppose. In short, there’s a surprisingly large number of areas in which a default OS can improve its security posture. We can agree that tweaking certain aspects of an OS are a little riskier than others. Consider your network stack, for example. Imagine that, completely out of the blue, your server’s networking suddenly does something unexpected and causes you troubleshooting headaches or even some downtime. This might happen because a new application or updated package suddenly expects routing to behave in a less-common way or needs a specific protocol enabled to function correctly.
+
+However, there are many changes that you can make to your servers without suffering any sleepless nights. The version and flavor of an OS helps determine which changes and to what extent you might want to comfortably make. Most importantly though what’s good for the goose is rarely good for the gander. In other words every single server estate has different, both broad and subtle, requirements which makes each use case unique. And, don’t forget that a database server also has very different needs to a web server so you can have a number of differing needs even within one small cluster of servers.
+
+Over the last few years I’ve introduced these hardening and compliance tweaks more than a handful of times across varying server estates in my DevSecOps roles. The OSs have included: Debian, Red Hat Enterprise Linux (RHEL) and their respective derivatives (including what I suspect will be the increasingly popular RHEL derivative, Amazon Linux). There have been times that, admittedly including a multitude of relatively tiny tweaks, the number of changes to a standard server build was into the hundreds. It all depended on the time permitted for the work, the appetite for any risks and the generic or specific nature of the OS tweaks.
+
+In this article, we’ll discuss the theory around something called idempotency which, in hand with an automation tool such as Ansible, can provide the ongoing improvements to your server estate’s security posture. For good measure we’ll also look at a number of Ansible playbook examples and additionally refer to online resources so that you can introduce idempotency to a server estate near you.
+
+### Say What?
+
+In simple terms the word “idempotent” just means returning something back to how it was prior to a change. It can also mean that lots of things you wanted to be the same, for consistency, are exactly the same, too.
+
+Picture that in action for a moment on a server estate; we’ll use AWS (Amazon Web Services) as our example. You create a new server image (Amazon Machine Images == AMIs) precisely how you want it with compliance and hardening introduced, custom packages, the removal of unwanted packages, SSH keys, user accounts etc and then spin up twenty servers using that AMI.
+
+You know for certain that all the servers, at least at the time that they are launched, are absolutely identical. Trust me when I say that this is a “good thing” ™. The lack of what’s known as “config drift” means that if one package on a server needs updated for security reasons then all the servers need that package updated too. Or if there’s a typo in a config file that’s breaking an application then it affects all servers equally. There’s less administrative overhead, less security risk and greater levels of predictability in terms of achieving better uptime.
+
+What about config drift from a security perspective? As you’ve guessed it’s definitely not welcome. That’s because engineers making manual changes to a “base OS build” can only lead to heartache and stress. The predictability of how a system is working suffers greatly as a result and servers running unique config become less reliable. These server systems are known as “snowflakes” as they’re unique but far less beautiful than actual snow.
+
+Equally an attacker might have managed to breach one aspect, component or service on a server but not all of its facets. By rewriting our base config again and again we’re able to, with 100% certainty (if it’s set up correctly), predict exactly what a server will look like and therefore how it will perform. Using various tools you can also trigger alarms if changes are detected to request that a pair of human eyes have a look to see if it’s a serious issue and then adjust the base config if needed.
+
+To make our machines idempotent we might overwrite our config changes every 20 or 30 minutes, for example. When it comes to running servers, that in essence, is what is meant by idempotency.
+
+### Central Station
+
+My mechanism of choice for repeatedly writing config across a large number of servers is running Ansible playbooks. It’s relatively easy to implement and removes the all-too-painful additional logic required when using shell scripts. Of the popular configuration management tools I’ve seen in action is Puppet, used successfully on a large government estate in an idempotent manner, but I prefer Ansible due to its more logical syntax (to my mind at least) and its readily available documentation.
+
+Before we look at some simple Ansible examples of hardening an OS with idempotency in mind we should explore how to trigger our Ansible playbooks.
+
+This is a larger area for debate than you might first imagine. Say, for example, you have nicely segmented server estate with production servers being carefully locked away from development servers, sitting behind a production-grade firewall. Consider the other servers on the estate, belonging to staging (pre-production) or other development environments, intentionally having different access permissions for security reasons.
+
+If you’re going to run a centralized server that has superuser permissions (which are required to make privileged changes to your core system files) then that server will need to have high-level access permissions potentially across your entire server estate. It must therefore be guarded very closely.
+
+You will also want to test your playbooks against development environments (in plural) to test their efficacy which means you’ll probably need two all-powerful centralised Ansible servers, one for production and one for the multiple development environments.
+
+The actual approach of how to achieve other logistical issues is up for debate and I’ve heard it discussed a few times. Bear in mind that Ansible runs using plain, old SSH keys (a feature that something other configuration management tools have started to copy over time) but ideally you want a mechanism for keeping non-privileged keys on your centralised servers so you’re not logging in as the “root” user across the estate every twenty minutes or thirty minutes.
+
+From a network perspective I like the idea of having firewalling in place to enforce one-way traffic only into the environment that you’re affecting. This protects your centralised host so that a compromised server can’t attack that main Ansible host easily and then as a result gain access to precious SSH keys in order to damage the whole estate.
+
+Speaking of which, are servers actually needed for a task like this? What about using AWS Lambda () to execute your playbooks? A serverless approach stills needs to be secured carefully but unquestionably helps to limit the attack surface and also potentially reduces administrative responsibilities.
+
+I suspect how this all-powerful server is architected and deployed is always going to be contentious and there will never be a one-size-fits-all approach but instead a unique, bespoke solution will be required for every server estate.
+
+### How Now, Brown Cow
+
+It’s important to think about how often you run your Ansible and also how to prepare for your first execution of the playbook. Let’s get the frequency of execution out of the way first as it’s the easiest to change in the future.
+
+My preference would be three times an hour or instead every thirty minutes. If we include enough detail in our configuration then our playbooks might prevent an attacker gaining a foothold on a system as the original configuration overwrites any altered config. Twenty minutes seems more appropriate to my mind.
+
+Again, this is an aspect you need to have a think about. You might be dumping small config databases locally onto a filesystem every sixty minutes for example and that scheduled job might add an extra little bit of undesirable load to your server meaning you have to schedule around it.
+
+Next time, we’ll take a look at some specific changes that can be made to various systems.
+
+_Chris Binnie’s latest book, Linux Server Security: Hack and Defend, shows you how to make your servers invisible and perform a variety of attacks. You can find out more about DevSecOps, containers and Linux security on his website:[https://www.devsecops.cc][3]_
+
+--------------------------------------------------------------------------------
+
+via: https://www.linux.com/blog/linux-server-hardening-using-idempotency-ansible-part-1
+
+作者:[Chris Binnie][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.linux.com/users/chrisbinnie
+[b]: https://github.com/lujun9972
+[1]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/geometric-1732847_1280.jpg?itok=YRux0Tua
+[2]: /LICENSES/CATEGORY/CREATIVE-COMMONS-ZERO
+[3]: https://www.devsecops.cc/
diff --git a/sources/tech/20190408 Performance-Based Routing (PBR) - The gold rush for SD-WAN.md b/sources/tech/20190408 Performance-Based Routing (PBR) - The gold rush for SD-WAN.md
new file mode 100644
index 0000000000..9844c3d3bf
--- /dev/null
+++ b/sources/tech/20190408 Performance-Based Routing (PBR) - The gold rush for SD-WAN.md
@@ -0,0 +1,129 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Performance-Based Routing (PBR) – The gold rush for SD-WAN)
+[#]: via: (https://www.networkworld.com/article/3387152/performance-based-routing-pbr-the-gold-rush-for-sd-wan.html#tk.rss_all)
+[#]: author: (Matt Conran https://www.networkworld.com/author/Matt-Conran/)
+
+Performance-Based Routing (PBR) – The gold rush for SD-WAN
+======
+The inefficiency factor in the case of traditional routing is one of the main reasons why SD-WAN is really taking off.
+![Getty Images][1]
+
+BGP (Border Gateway Protocol) is considered the glue of the internet. If we view through the lens of farsightedness, however, there’s a question that still remains unanswered for the future. Will BGP have the ability to route on the best path versus the shortest path?
+
+There are vendors offering performance-based solutions for BGP-based networks. They have adopted various practices, such as, sending out pings to monitor the network and then modifying the BGP attributes, such as the AS prepending to make BGP do the performance-based routing (PBR). However, this falls short in a number of ways.
+
+The problem with BGP is that it's not capacity or performance aware and therefore its decisions can sink the application’s performance. The attributes that BGP relies upon for path selection are, for example, AS-Path length and multi-exit discriminators (MEDs), which do not always correlate with the network’s performance.
+
+[The time of 5G is almost here][2]
+
+Also, BGP changes paths only in reaction to changes in the policy or the set of available routes. It traditionally permits the use of only one path to reach a destination. Hence, traditional routing falls short as it doesn't always look for the best path which may not be the shortest path.
+
+### Blackout and brownouts
+
+As a matter of fact, we live in a world where we have more brownouts than blackouts. However, BGP was originally designed to detect only the blackouts i.e. the events wherein a link fails to reroute the traffic to another link. In a world where brownouts can last from 10 milliseconds to 10 seconds, you ought to be able to detect the failure in sub-seconds and re-route to a better path.
+
+This triggered my curiosity to dig out some of the real yet significant reasons why [SD-WAN][3] was introduced. We all know it saves cost and does many other things but were the inefficiencies in routing one of the main reasons? I decided to sit down with [Sorell][4] to discuss the need for policy-based routing (PBR).
+
+### SD-WAN is taking off
+
+The inefficiency factor in the case of traditional routing is one of the main reasons why SD-WAN is really taking off. SD-WAN vendors are adding proprietary mechanisms to their routing in order to select the best path, not the shortest path.
+
+Originally, we didn't have real-time traffic, such as, voice and video, which is latency and jitter sensitive. Besides, we also assumed that all links were equal. But in today's world, we witness more of a mix and match, for example, 100Gig and slower long-term evolution (LTE) links. The assumption that the shortest path is the best no longer holds true.
+
+### Introduction of new protocols
+
+To overcome the drawbacks of traditional routing, we have had the onset of new protocols, such as, [IPv6 segment routing][5] and named data networking along with specific SD-WAN vendor mechanisms that improve routing.
+
+For optimum routing, effective packet steering is a must. And SD-WAN overlays provide this by utilizing encapsulation which could be a combination of GRE, UDP, Ethernet, MPLS, [VxLAN][6] and IPsec. IPv6 segment routing implements a stack of segments (IPv6 address list) inserted in every packet and the named data networking can be distributed with routing protocols.
+
+Another critical requirement is the hop-by-hop payload encryption. You should be able to encrypt payloads for sessions that do not have transport layer encryption. Re-encrypting data can be expensive; it fragments the packets and further complicates the networks. Therefore, avoiding double encryption is also a must.
+
+The SD-WAN overlays furnish an all or nothing approach with [IPsec][7]. IPv6 segment routing requires application layer security that is provided by [IPsec][8] and named data network can offer since it’s object-based.
+
+### The various SD-WAN solutions
+
+The above are some of the new protocols available and some of the technologies that the SD-WAN vendors offer. Different vendors will have different mechanisms to implement PBR. Different vendors term PBR with different names, such as, “application-aware routing.”
+
+SD-WAN vendors are using many factors to influence the routing decision. They are not just making routing decisions on the number of hops or links the way traditional routing does by default. They monitor how the link is performing and do not just evaluate if the link is up or down.
+
+They are using a variety of mechanisms to perform PBR. For example, some are adding timestamps to every packet. Whereas, others are adding sequence numbers to the packets over and above what you would get in a transmission control protocol (TCP) sequence number.
+
+Another option is the use of the domain name system (DNS) and [transport layer security][9] (TLS) certificates to automatically identify the application and then based on the identity of the application; they have default classes for it. However, others use timestamps by adding a proprietary label. This is the same as adding a sequence number to the packets, but the sequence number is at Layer 3 instead of Layer 4.
+
+I can tie all my applications and sequence numbers and then use the network time protocol (NTP) to identify latency, jitter and dropped packets. Running NTP on both ends enables the identification of end-to-end vs hop-by-hop performance.
+
+Some vendors use an internet control message protocol (ICMP) or bidirectional forwarding detection (BFD). Hence, instead of adding a label to every packet which can introduce overhead, they are doing a sampling for every quarter or half a second.
+
+Realistically, it is yet to be determined which technology is the best to use, but what is consistent is that these mechanisms are examining elements, such as, the latency, dropped packets and jitter on the links. Essentially, different vendors are using different technologies to choose the best path, but the end result is still the same.
+
+With these approaches, one can, for example, identify a WebEx session and since a WebEx session has voice and video, can create that session as a high-priority session. All packets associated with the WebEx sessions get placed in a high-value queue.
+
+The rules are set to say, “I want my WebEx session to go over the multiprotocol label switching (MPLS) link instead of a slow LTE link.” Hence, if your MPLS link faces latency or jitter problems, it automatically reroutes the flow to a better alternate path.
+
+### Problems with TCP
+
+One critical problem that surfaces today due to the transmission control protocol (TCP) and adaptive codex is called waves. Let’s say you have 30 file transfers across a link, now to carry out the file transfers, the TCP window size will grow to a point where the link gets maxed out. The router will start to drop packets, followed by the reduced TCP window size. As a result, the bandwidth shrinks and at times when not dropping packets the window size increases. This hits the threshold and eventually, the packets start getting dropped again.
+
+This can be a continuous process, happening again and again. With all these waves obstructing the efficiency, we need products, like wide area network (WAN) optimizations to manage multiple TCP flows. Why? Because only TCP is aware of the flow that it controls, the single flow. It is not the networking aware of other flows moving across the path. Primarily, the TCP window size is only aware of one single file transfer.
+
+### Problems with adaptive codex
+
+Adaptive codex will use upward of 6 megabytes of the video if the link is clean but as soon as it starts to drop packets, the adaptive codex will send more packets for forwarding error-control in the codex. Therefore, it makes the problem even worse before it backs off to change the frame rate and resolution.
+
+Adaptive codex is the opposite of fixed codex that will always send out a fixed packet size. Adaptive codex is the standard used in WebRTC and can vary the jitter, buffer size and the frequency of packets based on the network conditions.
+
+Adaptive codex works better off Internet connections that have higher loss and jitter rate than, for example, more stable links, such as MPLS. This is the reason why real-time voice and the video does not use TCP because if the packet gets dropped, there is no point in sending a new packet. Logically, having the additional headers of TCP does not buy you anything.
+
+QUIC, on the other hand, can take a single flow and run it across multiple network-flows. This helps the video applications in rebuffering and improves throughput. In addition, it helps in boosting the response for bandwidth-intensive applications.
+
+### The introduction of new technologies
+
+With the introduction of [edge computing][10], augmented reality (AR), virtual reality (VR), real-time driving applications, [IoT sensors][11] on critical systems and other hypersensitive latency applications, PBR becomes a necessity.
+
+With AR you want the computing to be accomplished between 5 to 10 milliseconds of the endpoint. In the world of brownouts and path congestion, you need to pick a better path much more quickly. Also, service providers (SP) are rolling out 5G networks and announcing the use of different routing protocols that are being used as PBR. So the future looks bright for PBR.
+
+As voice and video, edge and virtual reality gain more existence in the market, PBR will become more popular. Even Facebook and Google are putting PBR inside their internal networks. Over time it will have a role in all the networks, specifically, the Internet Exchange points, both private and public.
+
+### Internet exchange points
+
+Back in the early 90s, there were only 4 internet exchange points in the US and 9 across the world overall. Now we have more than 3,000 where different providers have come together, and they exchange Internet traffic.
+
+When BGP was first rolled out in the mid-‘90s, because the internet exchange points were located far apart, the concept of shortest path held true more than today, where you have an internet that is highly distributed.
+
+The internet architecture will get changed as different service providers move to software-defined networking and update the routing protocols that they use. As far as the foreseeable future is concerned, however, the core internet exchanges will still use BGP.
+
+**This article is published as part of the IDG Contributor Network.[Want to Join?][12]**
+
+Join the Network World communities on [Facebook][13] and [LinkedIn][14] to comment on topics that are top of mind.
+
+--------------------------------------------------------------------------------
+
+via: https://www.networkworld.com/article/3387152/performance-based-routing-pbr-the-gold-rush-for-sd-wan.html#tk.rss_all
+
+作者:[Matt Conran][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.networkworld.com/author/Matt-Conran/
+[b]: https://github.com/lujun9972
+[1]: https://images.idgesg.net/images/article/2018/10/smart-city_iot_digital-transformation_networking_wireless_city-scape_skyline-100777499-large.jpg
+[2]: https://www.networkworld.com/article/3354477/mobile-world-congress-the-time-of-5g-is-almost-here.html
+[3]: https://network-insight.net/2017/08/sd-wan-networks-scalpel/
+[4]: https://techvisionresearch.com/
+[5]: https://network-insight.net/2015/07/segment-routing-introduction/
+[6]: https://youtu.be/5XtkCSfRy3c
+[7]: https://network-insight.net/2015/01/design-guide-ipsec-fault-tolerance/
+[8]: https://network-insight.net/2015/01/ipsec-virtual-private-network-vpn-overview/
+[9]: https://network-insight.net/2015/10/back-to-basics-ssl-security/
+[10]: https://youtu.be/5mbPiKd_TFc
+[11]: https://network-insight.net/2016/11/internet-of-things-iot-networking/
+[12]: /contributor-network/signup.html
+[13]: https://www.facebook.com/NetworkWorld/
+[14]: https://www.linkedin.com/company/network-world
diff --git a/sources/tech/20190409 5 Linux rookie mistakes.md b/sources/tech/20190409 5 Linux rookie mistakes.md
new file mode 100644
index 0000000000..2e2c25a9cf
--- /dev/null
+++ b/sources/tech/20190409 5 Linux rookie mistakes.md
@@ -0,0 +1,54 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (5 Linux rookie mistakes)
+[#]: via: (https://opensource.com/article/19/4/linux-rookie-mistakes)
+[#]: author: (Jen Wike Huger https://opensource.com/users/jen-wike/users/bcotton/users/petercheer/users/greg-p/users/greg-p)
+
+5 Linux rookie mistakes
+======
+Linux enthusiasts share some of the biggest mistakes they made.
+![magnifying glass on computer screen, finding a bug in the code][1]
+
+It's smart to learn new skills throughout your life—it keeps your mind nimble and makes you more competitive in the job market. But some skills are harder to learn than others, especially those where small rookie mistakes can cost you a lot of time and trouble when you're trying to fix them.
+
+Take learning [Linux][2], for example. If you're used to working in a Windows or MacOS graphical interface, moving to Linux, with its unfamiliar commands typed into a terminal, can have a big learning curve. But the rewards are worth it, as the millions and millions of people who have gone before you have proven.
+
+That said, the journey won't be without pitfalls. We asked some of Linux enthusiasts to think back to when they first started using Linux and tell us about the biggest mistakes they made.
+
+"Don't go into [any sort of command line interface (CLI) work] with an expectation that commands work in rational or consistent ways, as that is likely to lead to frustration. This is not due to poor design choices—though it can feel like it when you're banging your head against the proverbial desk—but instead reflects the fact that these systems have evolved and been added onto through generations of software and OS evolution. Go with the flow, write down or memorize the commands you need, and (try not to) get frustrated when [things aren't what you'd expect][3]." _—[Gina Likins][4]_
+
+"As easy as it might be to just copy and paste commands to make the thing go, read the command first and at least have a general understanding of the actions that are about to be performed. Especially if there is a pipe command. Double especially if there is more than one. There are a lot of destructive commands that look innocuous until you realize what they can do (e.g., **rm** , **dd** ), and you don't want to accidentally destroy things. (Ask me how I know.)" _—[Katie McLaughlin][5]_
+
+"Early on in my Linux journey, I wasn't as aware of the importance of knowing where you are in the filesystem. I was deleting some file in what I thought was my home directory, and I entered **sudo rm -rf *** and deleted all of the boot files on my system. Now, I frequently use **pwd** to ensure that I am where I think I am before issuing such commands. Fortunately for me, I was able to boot my wounded laptop with a USB drive and recover my files." _—[Don Watkins][6]_
+
+"Do not reset permissions on the entire file system to [777][7] because you think 'permissions are hard to understand' and you want an application to have access to something." _—[Matthew Helmke][8]_
+
+"I was removing a package from my system, and I did not check what other packages it was dependent upon. I just let it remove whatever it wanted and ended up causing some of my important programs to crash and become unavailable." _—[Kedar Vijay Kulkarni][9]_
+
+What mistakes have you made while learning to use Linux? Share them in the comments.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/4/linux-rookie-mistakes
+
+作者:[Jen Wike Huger (Red Hat)][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/jen-wike/users/bcotton/users/petercheer/users/greg-p/users/greg-p
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/mistake_bug_fix_find_error.png?itok=PZaz3dga (magnifying glass on computer screen, finding a bug in the code)
+[2]: https://opensource.com/resources/linux
+[3]: https://lintqueen.com/2017/07/02/learning-while-frustrated/
+[4]: https://opensource.com/users/lintqueen
+[5]: https://opensource.com/users/glasnt
+[6]: https://opensource.com/users/don-watkins
+[7]: https://www.maketecheasier.com/file-permissions-what-does-chmod-777-means/
+[8]: https://twitter.com/matthewhelmke
+[9]: https://opensource.com/users/kkulkarn
diff --git a/sources/tech/20190409 5 open source mobile apps.md b/sources/tech/20190409 5 open source mobile apps.md
new file mode 100644
index 0000000000..679c1a92fc
--- /dev/null
+++ b/sources/tech/20190409 5 open source mobile apps.md
@@ -0,0 +1,131 @@
+[#]: collector: (lujun9972)
+[#]: translator: (fuzheng1998 )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (5 open source mobile apps)
+[#]: via: (https://opensource.com/article/19/4/mobile-apps)
+[#]: author: (Chris Hermansen https://opensource.com/users/clhermansen/users/bcotton/users/clhermansen/users/bcotton/users/clhermansen)
+
+5 open source mobile apps
+======
+You can count on these apps to meet your needs for productivity,
+communication, and entertainment.
+![][1]
+
+Like most people in the world, I'm rarely further than an arm's reach from my smartphone. My Android device provides a seemingly limitless number of communication, productivity, and entertainment services thanks to the open source mobile apps I've installed from Google Play and F-Droid.
+
+Of the many open source apps on my phone, the following five are the ones I consistently turn to whether I want to listen to music; connect with friends, family, and colleagues; or get work done on the go.
+
+### MPDroid
+
+_An Android controller for the Music Player Daemon (MPD)_
+
+![MPDroid][2]
+
+MPD is a great way to get music from little music server computers out to the big black stereo boxes. It talks straight to ALSA and therefore to the Digital-to-Analog Converter ([DAC][3]) via the ALSA hardware interface, and it can be controlled over my network—but by what? Well, it turns out that MPDroid is a great MPD controller. It manages my music database, displays album art, handles playlists, and supports internet radio. And it's open source, so if something doesn't work…
+
+MPDroid is available on [Google Play][4] and [F-Droid][5].
+
+### RadioDroid
+
+_An Android internet radio tuner that I use standalone and with Chromecast_
+
+**
+
+**
+
+**
+
+_![RadioDroid][6]_
+
+RadioDroid is to internet radio as MPDroid is to managing my music database; essentially, RadioDroid is a frontend to [Internet-Radio.com][7]. Moreover, RadioDroid can be enjoyed by plugging headphones into the Android device, by connecting the Android device directly to the stereo via the headphone jack or USB, or by using its Chromecast capability with a compatible device. It's a fine way to check the weather in Finland, listen to the Spanish top 40, or hear the latest news from down under.
+
+RadioDroid is available on [Google Play][8] and [F-Droid][9].
+
+### Signal
+
+_A secure messaging client for Android, iOS, and desktop_
+
+**
+
+**
+
+**
+
+_![Signal][10]_
+
+If you like WhatsApp but are bothered by its [getting-closer-every-day][11] relationship to Facebook, Signal should be your next thing. The only problem with Signal is convincing your contacts they're better off replacing WhatsApp with Signal. But other than that, it has a similar interface; great voice and video calling; great encryption; decent anonymity; and it's supported by a foundation that doesn't plan to monetize your use of the software. What's not to like?
+
+Signal is available for [Android][12], [iOS][13], and [desktop][14].
+
+### ConnectBot
+
+_Android SSH client_
+
+**
+
+**
+
+**
+
+_![ConnectBot][15]_
+
+Sometimes I'm far away from my computer, but I need to log into the server to do something. [ConnectBot][16] is a great solution for moving SSH sessions onto my phone.
+
+ConnectBot is available on [Google Play][17].
+
+### Termux
+
+_Android terminal emulator with many familiar utilities_
+
+**
+
+**
+
+**
+
+_![Termux][18]_
+
+Have you ever needed to run an **awk** script on your phone? [Termux][19] is your solution. If you need to do terminal-type stuff, and you don't want to maintain an SSH connection to a remote computer the whole time, bring the files over to your phone with ConnectBot, quit the session, do your stuff in Termux, and send the results back with ConnectBot.
+
+Termux is available on [Google Play][20] and [F-Droid][21].
+
+* * *
+
+What are your favorite open source mobile apps for work or fun? Please share them in the comments.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/4/mobile-apps
+
+作者:[Chris Hermansen (Community Moderator)][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/clhermansen/users/bcotton/users/clhermansen/users/bcotton/users/clhermansen
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/rh_003588_01_rd3os.combacktoschoolserieshe_rh_041x_0.png?itok=tfg6_I78
+[2]: https://opensource.com/sites/default/files/uploads/mpdroid.jpg (MPDroid)
+[3]: https://opensource.com/article/17/4/fun-new-gadget
+[4]: https://play.google.com/store/apps/details?id=com.namelessdev.mpdroid&hl=en_US
+[5]: https://f-droid.org/en/packages/com.namelessdev.mpdroid/
+[6]: https://opensource.com/sites/default/files/uploads/radiodroid.png (RadioDroid)
+[7]: https://www.internet-radio.com/
+[8]: https://play.google.com/store/apps/details?id=net.programmierecke.radiodroid2
+[9]: https://f-droid.org/en/packages/net.programmierecke.radiodroid2/
+[10]: https://opensource.com/sites/default/files/uploads/signal.png (Signal)
+[11]: https://opensource.com/article/19/3/open-messenger-client
+[12]: https://play.google.com/store/apps/details?id=org.thoughtcrime.securesms
+[13]: https://itunes.apple.com/us/app/signal-private-messenger/id874139669?mt=8
+[14]: https://signal.org/download/
+[15]: https://opensource.com/sites/default/files/uploads/connectbot.png (ConnectBot)
+[16]: https://connectbot.org/
+[17]: https://play.google.com/store/apps/details?id=org.connectbot
+[18]: https://opensource.com/sites/default/files/uploads/termux.jpg (Termux)
+[19]: https://termux.com/
+[20]: https://play.google.com/store/apps/details?id=com.termux
+[21]: https://f-droid.org/packages/com.termux/
diff --git a/sources/tech/20190409 AI Ops- Let the data talk.md b/sources/tech/20190409 AI Ops- Let the data talk.md
new file mode 100644
index 0000000000..2b3d57ef17
--- /dev/null
+++ b/sources/tech/20190409 AI Ops- Let the data talk.md
@@ -0,0 +1,66 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (AI Ops: Let the data talk)
+[#]: via: (https://www.networkworld.com/article/3388217/ai-ops-let-the-data-talk.html#tk.rss_all)
+[#]: author: (Marie Fiala, Director of Portfolio Marketing for Blue Planet at Ciena )
+
+AI Ops: Let the data talk
+======
+The catalysts and ROI of AI-powered network analytics for automated operations were the focus of discussion for service providers at the recent FutureNet conference in London. Blue Planet’s Marie Fiala details the conversation.
+![metamorworks][1]
+
+![Marie Fiala, Director of Portfolio Marketing for Blue Planet at Ciena][2]
+
+_The catalysts and ROI of AI-powered network analytics for automated operations were the focus of discussion for service providers at the recent FutureNet conference in London. Blue Planet’s Marie Fiala details the conversation._
+
+Do we need perfect data? Or is ‘good enough’ data good enough? Certainly, there is a need to find a pragmatic approach or else one could get stalled in analysis-paralysis. Is closed-loop automation the end goal? Or is human-guided open loop automation desired? If the quality of data defines the quality of the process, then for closed-loop automation of critical business processes, one needs near-perfect data. Is that achievable?
+
+These issues were discussed and debated at the recent FutureNet conference in London, where the show focused on solving network operators’ toughest challenges. Industry presenters and panelists stayed true to the themes of AI and automation, all touting the necessity of these interlinked software technologies, yet there were varied opinions on approaches. Network and service providers such as BT, Colt, Deutsche Telekom, KPN, Orange, Telecom Italia, Telefonica, Telenor, Telia, Telus, Turk Telkom, and Vodafone weighed in on the discussion.
+
+**Catalysts for AI-powered analytics**
+
+On one point, most service providers were in agreement: there is a need to identify a specific business use case with measurable ROI, as an initial validation point when introducing AI-powered analytics into operations.
+
+Host operator, Vodafone, positioned 5G as the catalyst. With the advent of 5G technology supporting 100x connections, 10Gbps super-bandwidth, and ultra-low <10ms latency, the volume, velocity and variety of data is exploding. It’s a virtuous cycle – 5G technologies generate a plethora of data, and conversely, a 5G network requires data-driven automation to function accurately and optimally (how else can virtualized network functions be managed in real-time?).
+
+![5G as catalyst for digitalisation][3]
+
+Another operator stated that the ‘AI gateway for telecom’ is the customer experience domain, citing how agents can use analytics to better serve the customer base. For another operator, capacity planning is the killer use case: first leverage AI to understand what’s going on in your network, then use predictive AI for planning so that you can make smarter investment decisions. Another point of view was that service assurance is the area where the most benefits from AI will be realized. There was even mention of ‘AI as a business’ by enabling the creation of new services, such as home assistants. At the broadest level, it was noted that AI allows network operators to remain relevant in the eyes of customers.
+
+**The human side of AI and automation**
+
+When it comes to implementation, the significant human impact of AI and automation was not overlooked. Across the board, service providers acknowledged that a new skillset is needed in network operations centers. Network engineers have to upskill to become data scientists and DevOps developers in order to best leverage the new AI-driven software tools.
+
+Furthermore, it is a challenge to recruit specialist AI experts, especially since web-scale providers are also vying for the same talent. On the flip side of the dire need for new skills, there is also a shortage of qualified experts in legacy technologies. Operators need automated, zero-touch management before the workforce retires!
+
+![FutureNet panelists discuss how automated AI can be leveraged as a competitive differentiator][4]
+
+**The ROI of AI**
+
+In many cases, the approach to AI has been a technology-driven ‘Field of Dreams’: build it and they will come. A strategic decision was made to hire experts, build data lakes, collect data, and then the business case that yielded positive returns was discovered. In other cases, the business use case came first. But no matter what the approach, the ROI was significant.
+
+These positive results are spurring determination for continued research to uncover ever more areas where AI can deliver tangible benefits. This is however no easy task – one operator highlighted that data collection takes 80% of the effort, with the remaining 20% spent on development of algorithms. For AI to really proliferate throughout all aspects of operations, that trend needs to be reversed. It needs to be relatively easy and quick to collect massive amounts of heterogeneous data, aggregate it, and correlate it. This would allow investment to be overwhelmingly applied to the development of predictive and prescriptive analytics tailored to specific use cases, and to enacting intelligent closed-loop automation. Only then will data be able to truly talk – and tell us what we haven’t even thought of yet.
+
+[Discover Intelligent Automation at Blue Planet][5]
+
+--------------------------------------------------------------------------------
+
+via: https://www.networkworld.com/article/3388217/ai-ops-let-the-data-talk.html#tk.rss_all
+
+作者:[Marie Fiala, Director of Portfolio Marketing for Blue Planet at Ciena][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:
+[b]: https://github.com/lujun9972
+[1]: https://images.idgesg.net/images/article/2019/04/istock-957627892-100793278-large.jpg
+[2]: https://images.idgesg.net/images/article/2019/04/marla-100793273-small.jpg
+[3]: https://images.idgesg.net/images/article/2019/04/ciena-post-5-image-1-100793275-large.jpg
+[4]: https://images.idgesg.net/images/article/2019/04/ciena-post-5-image-2-100793276-large.jpg
+[5]: https://www.blueplanet.com/resources/Intelligent-Automation-Driving-Digital-Automation-for-Service-Providers.html?utm_campaign=X1058319&utm_source=NWW&utm_term=BPVision&utm_medium=newsletter
diff --git a/sources/tech/20190409 Juniper opens SD-WAN service for the cloud.md b/sources/tech/20190409 Juniper opens SD-WAN service for the cloud.md
new file mode 100644
index 0000000000..7ed701ec14
--- /dev/null
+++ b/sources/tech/20190409 Juniper opens SD-WAN service for the cloud.md
@@ -0,0 +1,80 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Juniper opens SD-WAN service for the cloud)
+[#]: via: (https://www.networkworld.com/article/3388030/juniper-opens-sd-wan-service-for-the-cloud.html#tk.rss_all)
+[#]: author: (Michael Cooney https://www.networkworld.com/author/Michael-Cooney/)
+
+Juniper opens SD-WAN service for the cloud
+======
+Juniper rolls out its Contrail SD-WAN cloud offering.
+![Thinkstock][1]
+
+Juniper has taken the wraps off a cloud-based SD-WAN service it says will ease the management and bolster the security of wired and wireless-connected branch office networks.
+
+The Contrail SD-WAN cloud offering expands on the company’s existing on-premise ([SRX][2]-based) and virtual ([NFX][3]-based) SD-WAN offerings to include greater expansion possibilities – up to 10,000 spoke-attached sites and support for more variants of passive redundant hybrid WAN links – and topologies such as hub and spoke, partial, and dynamic full mesh, Juniper stated.
+
+**More about SD-WAN**
+
+ * [How to buy SD-WAN technology: Key questions to consider when selecting a supplier][4]
+ * [How to pick an off-site data-backup method][5]
+ * [SD-Branch: What it is and why you’ll need it][6]
+ * [What are the options for security SD-WAN?][7]
+
+
+
+The service brings with it Juniper’s Contrail Service Orchestration package, which secures, automates, and runs the service life cycle across [NFX Series][3] Network Services Platforms, [EX Series][8] Ethernet Switches, [SRX Series][2] next-generation firewalls, and [MX Series][9] 5G Universal Routing Platforms. Ultimately it lets customers manage and set up SD-WANs all from a single portal.
+
+The package is also a service orchestrator for the [vSRX][10] Virtual Firewall and [vMX][11] Virtual Router, available in public cloud marketplaces such as Amazon Web Services (AWS) and Microsoft Azure, Juniper said. The SD-WAN offering also includes integration with cloud security provider ZScaler.
+
+Contrail Service Orchestration offers organizations visibility across SD-WAN, as well as branch wired and now wireless infrastructure. Monitoring and intelligent analytics offer real-time insight into network operations, allowing administrators to preempt looming threats and degradations, as well as pinpoint issues for faster recovery.
+
+The new service also includes support for Juniper’s [recently acquired][12] Mist Systems wireless technology, which lets the service access and manage Mist’s wireless access points, allowing customers to meld wireless and wired networks.
+
+Juniper recently closed the agreement to buy innovative wireless-gear-maker Mist for $405 million. Mist touts itself as having developed an artificial-intelligence-based wireless platform that makes Wi-Fi more predictable, reliable, and measurable.
+
+With Contrail, administrators can control a growing mix of legacy and modern scale-out architectures while automating their operational workflows using software that provides smarter, easier-to-use automation, orchestration and infrastructure visibility, wrote Juniper CTO [Bikash Koley][13] in a [blog about the SD-WAN announcement][14].
+
+“Management complexity and policy enforcement are traditional network administrator fears, while both data and network security are growing in importance for organizations of all sizes,” Koley stated. ** **“Cloud-delivered SD-WAN removes the complexity of software operations, arguably the most difficult part of Software Defined Networking.”
+
+Analysts said the Juniper announcement could help the company compete in a super-competitive, rapidly evolving SD-WAN world.
+
+“The announcement is more a ‘me too’ than a particular technological breakthrough,” said Lee Doyle, principal analyst with Doyle Research. “The Mist integration is what’s interesting here, and that could help them, but there are 15 to 20 other vendors that have the same technology, bigger partners, and bigger sales channels than Juniper does.”
+
+Indeed the SD-WAN arena is a crowded one with Cisco, VMware, Silver Peak, Riverbed, Aryaka, Nokia, and Versa among the players.
+
+The cloud-based Contrail SD-WAN offering is available as an annual or multi-year subscription.
+
+Join the Network World communities on [Facebook][15] and [LinkedIn][16] to comment on topics that are top of mind.
+
+--------------------------------------------------------------------------------
+
+via: https://www.networkworld.com/article/3388030/juniper-opens-sd-wan-service-for-the-cloud.html#tk.rss_all
+
+作者:[Michael Cooney][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.networkworld.com/author/Michael-Cooney/
+[b]: https://github.com/lujun9972
+[1]: https://images.idgesg.net/images/article/2018/01/cloud_network_blockchain_bitcoin_storage-100745950-large.jpg
+[2]: https://www.juniper.net/us/en/products-services/security/srx-series/
+[3]: https://www.juniper.net/us/en/products-services/sdn/nfx-series/
+[4]: https://www.networkworld.com/article/3323407/sd-wan/how-to-buy-sd-wan-technology-key-questions-to-consider-when-selecting-a-supplier.html
+[5]: https://www.networkworld.com/article/3328488/backup-systems-and-services/how-to-pick-an-off-site-data-backup-method.html
+[6]: https://www.networkworld.com/article/3250664/lan-wan/sd-branch-what-it-is-and-why-youll-need-it.html
+[7]: https://www.networkworld.com/article/3285728/sd-wan/what-are-the-options-for-securing-sd-wan.html?nsdr=true
+[8]: https://www.juniper.net/us/en/products-services/switching/ex-series/
+[9]: https://www.juniper.net/us/en/products-services/routing/mx-series/
+[10]: https://www.juniper.net/us/en/products-services/security/srx-series/vsrx/
+[11]: https://www.juniper.net/us/en/products-services/routing/mx-series/vmx/
+[12]: https://www.networkworld.com/article/3353042/juniper-grabs-mist-for-wireless-ai-cloud-service-delivery-technology.html
+[13]: https://www.networkworld.com/article/3324374/juniper-cto-talks-cloud-intent-computing-revolution-high-speed-networking-and-open-source-growth.html?nsdr=true
+[14]: https://forums.juniper.net/t5/Engineering-Simplicity/Cloud-Delivered-Branch-Simplicity-Now-Surpasses-SD-WAN/ba-p/461188
+[15]: https://www.facebook.com/NetworkWorld/
+[16]: https://www.linkedin.com/company/network-world
diff --git a/sources/tech/20190409 The Microsoft-BMW IoT Open Manufacturing Platform might not be so open.md b/sources/tech/20190409 The Microsoft-BMW IoT Open Manufacturing Platform might not be so open.md
new file mode 100644
index 0000000000..c74f61efe4
--- /dev/null
+++ b/sources/tech/20190409 The Microsoft-BMW IoT Open Manufacturing Platform might not be so open.md
@@ -0,0 +1,69 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (The Microsoft/BMW IoT Open Manufacturing Platform might not be so open)
+[#]: via: (https://www.networkworld.com/article/3387642/the-microsoftbmw-iot-open-manufacturing-platform-might-not-be-so-open.html#tk.rss_all)
+[#]: author: (Fredric Paul https://www.networkworld.com/author/Fredric-Paul/)
+
+The Microsoft/BMW IoT Open Manufacturing Platform might not be so open
+======
+The new industrial IoT Open Manufacturing Platform from Microsoft and BMW runs only on Microsoft Azure. That could be an issue.
+![Martyn Williams][1]
+
+Last week at [Hannover Messe][2], Microsoft and German carmaker BMW announced a partnership to build a hardware and software technology framework and reference architecture for the industrial internet of things (IoT), and foster a community to spread these smart-factory solutions across the automotive and manufacturing industries.
+
+The stated goal of the [Open Manufacturing Platform (OMP)][3]? According to the press release, it's “to drive open industrial IoT development and help grow a community to build future [Industry 4.0][4] solutions.” To make that a reality, the companies said that by the end of 2019, they plan to attract four to six partners — including manufacturers and suppliers from both inside and outside the automotive industry — and to have rolled out at least 15 use cases operating in actual production environments.
+
+**[ Read also:[An inside look at an IIoT-powered smart factory][5] | Get regularly scheduled insights: [Sign up for Network World newsletters][6] ]**
+
+### Complex and proprietary is bad for IoT
+
+It sounds like a great idea, right? As the companies rightly point out, many of today’s industrial IoT solutions rely on “complex, proprietary systems that create data silos and slow productivity.” Who wouldn’t want to “standardize data models that enable analytics and machine learning scenarios” and “accelerate future industrial IoT developments, shorten time to value, and drive production efficiencies while addressing common industrial challenges”?
+
+But before you get too excited, let’s talk about a key word in the effort: open. As Scott Guthrie, executive vice president of Microsoft Cloud + AI Group, said in a statement, "Our commitment to building an open community will create new opportunities for collaboration across the entire manufacturing value chain."
+
+### The Open Manufacturing Platform is open only to Microsoft Azure
+
+However, that will happen as long as all that collaboration occurs in Microsoft Azure. I’m not saying Azure isn’t up to the task, but it’s hardly the only (or even the leading) cloud platform interested in the industrial IoT. Putting everything in Azure might be an issue to those potential OMP partners. It’s an “open” question as to how many companies already invested in Amazon Web Services (AWS) or the Google Cloud Platform (GCP) will be willing to make the switch or go multi-cloud just to take advantage of the OMP.
+
+My guess is that Microsoft and BMW won’t have too much trouble meeting their initial goals for the OMP. It shouldn’t be that hard to get a handful of existing Azure customers to come up with 15 use cases leveraging advances in analytics, artificial intelligence (AI), and digital feedback loops. (As an example, the companies cited the autonomous transport systems in BMW’s factory in Regensburg, Germany, part of the more than 3,000 machines, robots and transport systems connected with the BMW Group’s IoT platform, which — naturally — is built on Microsoft Azure's cloud.)
+
+### Will non-Azure users jump on board the OMP?
+
+The question is whether tying all this to a single cloud provider will affect the effort to attract enough new companies — including companies not currently using Azure — to establish a truly viable open platform?
+
+Perhaps [Stacey Higginbotham at Stacy on IoT put it best][7]:
+
+> “What they really launched is a reference design for manufacturers to work from.”
+
+That’s not nothing, of course, but it’s a lot less ambitious than building a new industrial IoT platform. And it may not easily fulfill the vision of a community working together to create shared solutions that benefit everyone.
+
+**[ Now read this:[Why are IoT platforms so darn confusing?][8] ]**
+
+Join the Network World communities on [Facebook][9] and [LinkedIn][10] to comment on topics that are top of mind.
+
+--------------------------------------------------------------------------------
+
+via: https://www.networkworld.com/article/3387642/the-microsoftbmw-iot-open-manufacturing-platform-might-not-be-so-open.html#tk.rss_all
+
+作者:[Fredric Paul][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.networkworld.com/author/Fredric-Paul/
+[b]: https://github.com/lujun9972
+[1]: https://images.techhive.com/images/article/2017/01/20170107_105344-100702818-large.jpg
+[2]: https://www.hannovermesse.de/home
+[3]: https://www.prnewswire.co.uk/news-releases/microsoft-and-the-bmw-group-launch-the-open-manufacturing-platform-859672858.html
+[4]: https://en.wikipedia.org/wiki/Industry_4.0
+[5]: https://www.networkworld.com/article/3384378/an-inside-look-at-tempo-automations-iiot-powered-smart-factory.html
+[6]: https://www.networkworld.com/newsletters/signup.html
+[7]: https://mailchi.mp/iotpodcast/stacey-on-iot-industrial-iot-reminds-me-of-apples-ecosystem?e=6bf9beb394
+[8]: https://www.networkworld.com/article/3336166/why-are-iot-platforms-so-darn-confusing.html
+[9]: https://www.facebook.com/NetworkWorld/
+[10]: https://www.linkedin.com/company/network-world
diff --git a/sources/tech/20190409 UP Shell Script - Quickly Navigate To A Specific Parent Directory In Linux.md b/sources/tech/20190409 UP Shell Script - Quickly Navigate To A Specific Parent Directory In Linux.md
new file mode 100644
index 0000000000..2bb20bc8a0
--- /dev/null
+++ b/sources/tech/20190409 UP Shell Script - Quickly Navigate To A Specific Parent Directory In Linux.md
@@ -0,0 +1,149 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (UP Shell Script – Quickly Navigate To A Specific Parent Directory In Linux)
+[#]: via: (https://www.2daygeek.com/up-shell-script-quickly-go-back-to-a-specific-parent-directory-in-linux/)
+[#]: author: (Magesh Maruthamuthu https://www.2daygeek.com/author/magesh/)
+
+UP Shell Script – Quickly Navigate To A Specific Parent Directory In Linux
+======
+
+Recently we had written an article about **[bd command][1]** , which help us to **[quickly go back to the specific parent directory][1]**.
+
+Even, the [up shell script][2] allow us to perform the same but has different approach so, we would like to explore it.
+
+This will allow us to quickly navigate to a specific parent directory with mentioning the directory name.
+
+Instead we can give the directory number. I mean to say that number of times you’d have to go back.
+
+Stop typing `cd ../../..` endlessly and navigate easily to a specific parent directory by using up shell script.
+
+It support tab completion so, it’s become more convenient.
+
+The `up.sh` registers the up function and some completion functions via your `.bashrc` or `.zshrc` file.
+
+It was completely written using shell script and it’s support zsh and fish shell as well.
+
+We had written an article about **[autocd][3]**. It’s a builtin shell variable that helps us to **[navigate to inside a directory without cd command][3]**.
+
+### How To Install up Linux?
+
+It’s not based on the distribution and you have to install it based on your shell.
+
+Simple run the following command to enable up script on `bash` shell.
+
+```
+$ curl --create-dirs -o ~/.config/up/up.sh https://raw.githubusercontent.com/shannonmoeller/up/master/up.sh
+
+$ echo 'source ~/.config/up/up.sh' >> ~/.bashrc
+```
+
+Run the following command to take the changes to effect.
+
+```
+$ source ~/.bashrc
+```
+
+Simple run the following command to enable up script on `zsh` shell.
+
+```
+$ curl --create-dirs -o ~/.config/up/up.sh https://raw.githubusercontent.com/shannonmoeller/up/master/up.sh
+
+$ echo 'source ~/.config/up/up.sh' >> ~/.zshrc
+```
+
+Run the following command to take the changes to effect.
+
+```
+$ source ~/.zshrc
+```
+
+Simple run the following command to enable up script on `fish` shell.
+
+```
+$ curl --create-dirs -o ~/.config/up/up.fish https://raw.githubusercontent.com/shannonmoeller/up/master/up.fish
+
+$ source ~/.config/up/up.fish
+```
+
+### How To Use This In Linux?
+
+We have successfully installed and configured the up script on system. It’s time to test it.
+
+I’m going to take the below directory path for this testing.
+
+Run the `pwd` command or `dirs` command to know your current location.
+
+```
+daygeek@Ubuntu18:/usr/share/icons/Adwaita/256x256/apps$ pwd
+or
+daygeek@Ubuntu18:/usr/share/icons/Adwaita/256x256/apps$ dirs
+
+/usr/share/icons/Adwaita/256x256/apps
+```
+
+How to up one level? Quickly go back to one directory. I’m currently in `/usr/share/icons/Adwaita/256x256/apps` and if i want to go one directory up `256x256` directory quickly then simple type the following command.
+
+```
+daygeek@Ubuntu18:/usr/share/icons/Adwaita/256x256/apps$ up
+
+daygeek@Ubuntu18:/usr/share/icons/Adwaita/256x256$ pwd
+/usr/share/icons/Adwaita/256x256
+```
+
+How to up multiple levels? Quickly go back to multiple directory. I’m currently in `/usr/share/icons/Adwaita/256x256/apps` and if i want to go to `share` directory quickly then simple type the following command.
+
+```
+daygeek@Ubuntu18:/usr/share/icons/Adwaita/256x256/apps$ up 4
+
+daygeek@Ubuntu18:/usr/share$ pwd
+/usr/share
+```
+
+How to up by full name? Quickly go back to the given directory instead of number.
+
+```
+daygeek@Ubuntu18:/usr/share/icons/Adwaita/256x256/apps$ up icons
+
+daygeek@Ubuntu18:/usr/share/icons$ pwd
+/usr/share/icons
+```
+
+How to up by partial name? Quickly go back to the given directory instead of number.
+
+```
+daygeek@Ubuntu18:/usr/share/icons/Adwaita/256x256/apps$ up Ad
+
+daygeek@Ubuntu18:/usr/share/icons/Adwaita$ pwd
+/usr/share/icons/Adwaita
+```
+
+As i told in the beginning of the article, it supports tab completion.
+
+```
+daygeek@Ubuntu18:/usr/share/icons/Adwaita/256x256/apps$ up
+256x256/ Adwaita/ icons/ share/ usr/
+```
+
+This tutorial allows you to quickly go back to a specific parent directory but there is no option to move forward quickly.
+
+We have another solution for this, will come up with new solution shortly. Please stay tune with us.
+
+--------------------------------------------------------------------------------
+
+via: https://www.2daygeek.com/up-shell-script-quickly-go-back-to-a-specific-parent-directory-in-linux/
+
+作者:[Magesh Maruthamuthu][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.2daygeek.com/author/magesh/
+[b]: https://github.com/lujun9972
+[1]: https://www.2daygeek.com/bd-quickly-go-back-to-a-specific-parent-directory-in-linux/
+[2]: https://github.com/shannonmoeller/up
+[3]: https://www.2daygeek.com/navigate-switch-directory-without-using-cd-command-in-linux/
diff --git a/sources/tech/20190409 What it takes to become a blockchain developer.md b/sources/tech/20190409 What it takes to become a blockchain developer.md
new file mode 100644
index 0000000000..668824b99a
--- /dev/null
+++ b/sources/tech/20190409 What it takes to become a blockchain developer.md
@@ -0,0 +1,204 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (What it takes to become a blockchain developer)
+[#]: via: (https://opensource.com/article/19/4/blockchain-career-developer)
+[#]: author: (Joseph Mugo https://opensource.com/users/mugo)
+
+What it takes to become a blockchain developer
+======
+If you’ve been considering a career in blockchain development, the time
+to get your foot in the door is now. Here's how to get started.
+![][1]
+
+The past decade has been an interesting time for the development of decentralized technologies. Before 2009, the progress was slow and without any clear direction until Satoshi Nakamoto created and deployed Bitcoin. That brought blockchain, the record-keeping technology behind Bitcoin, into the limelight.
+
+Since then, we've seen blockchain revolutionize various concepts that we used to take for granted, such as monitoring supply chains, [creating digital identities,][2] [tracking jewelry][3], and [managing shipping systems.][4] Companies such as IBM and Samsung are at the forefront of blockchain as the underlying infrastructure for the next wave of tech innovation. There is no doubt that blockchain's role will grow in the years to come.
+
+Thus, it's no surprise that there's a high demand for blockchain developers. LinkedIn put "blockchain developers" at the top of its 2018 [emerging jobs report][5] with an expected 33-fold growth. The freelancing site Upwork also released a report showing that blockchain was one of the [fastest growing skills][6] out of more than 5,000 in its index.
+
+Describing the internet in 2003, [Jeff Bezos said][7], "we are at the 1908 Hurley washing machine stage." The same can be said about blockchain today. The industry is busy building its foundation. If you've been considering a career as a blockchain developer, the time to get your foot in the door is now.
+
+However, you may not know where to start. It can be frustrating to go through countless blog posts and white papers or messy Slack channels when trying to find your footing. This article is a report on what I learned when contemplating whether I should become a blockchain developer. I'll approach it from the basics, with resources for each topic you need to master to be industry-ready.
+
+### Technical fundamentals
+
+Although you're won't be expected to build a blockchain from scratch, you need to be skilled enough to handle the duties of blockchain development. A bachelor's degree in computer science or information security is required. You also need to have some fundamentals in data structures, cryptography, and networking and distributed systems.
+
+#### Data structures
+
+The complexity of blockchain requires a solid understanding of data structures. At the core, a distributed ledger is like a network of replicated databases, only it stores information in blocks rather than tables. The blocks are also cryptographically secured to ensure their integrity every time a block is added.
+
+For this reason, you have to know how common data structures, such as binary search trees, hash maps, graphs, and linked lists, work. It's even better if you can build them from scratch.
+
+This [GitHub repository][8] contains all information newbies need to learn data structures and algorithms. Common languages such as Python, Java, Scala, C, C-Sharp, and C++ are featured.
+
+#### Cryptography
+
+Cryptography is the foundation of blockchain; it is what makes cryptocurrencies work. The Bitcoin blockchain employs public-key cryptography to create digital signatures and hash functions. You might be discouraged if you don't have a strong math background, but Stanford offers [a free course][9] that's perfect for newbies. You'll learn about authenticated encryption, message integrity, and block ciphers.
+
+You should also study [RSA][10], which doesn't require a strong background in mathematics, and look at [ECDSA][11] (elliptic curve cryptography).
+
+And don't forget [cryptographic hash functions][12]. They are the equations that enable most forms of encryptions on the internet. They keep payments secure on e-commerce sites and are the core mechanism behind the HTTPS protocol. There's extensive use of cryptographic hash functions in blockchain.
+
+#### Networking and distributed systems
+
+Build a good foundation in understanding how distributed ledgers work. Also understand how peer-to-peer networks work, which translates to a good foundation in computer networks, from networking topologies to routing.
+
+In blockchain, the processing power is harnessed from connected computers. For seamless recording and interchange of information between these devices, you need to understand about [Byzantine fault-tolerant consensus][13], which is a key security feature in blockchain. You don't need to know everything; an understanding of how distributed systems work is good enough.
+
+Stanford has a free, self-paced [course on computer networking][14] if you need to start from scratch. You can also consult this list of [awesome material on distributed systems][15].
+
+### Cryptonomics
+
+We've covered some of the most important technical bits. It's time to talk about the economics of this industry. Although cryptocurrencies don't have central banks to monitor the money supply or keep crypto companies in check, it's essential to understand the economic structures woven around them.
+
+You'll need to understand game theory, the ideal mathematical framework for modeling scenarios in which conflicts of interest exist among involved parties. Take a look at Michael Karnjanaprakorn's [Beginner's Guide to Game Theory][16]. It's lucid and well explained.
+
+You also need to understand what affects currency valuation and the various monetary policies that affect cryptocurrencies. Here are some books you can refer to:
+
+ * _[The Business Blockchain: Promise, Practice, and Application of the Next Internet Technology][17]_ by William Mougayar
+ * _[Blockchain: Blueprint for the New Economy][18]_ by Melanie Swan
+ * _[Blockchain: The Blockchain For Beginners Guide to Blockchain Technology and Leveraging Blockchain Programming][19]_ by Josh Thompsons
+
+
+
+Depending on how skilled you are, you won't need to go through all those materials. But once you're done, you'll understand the fundamentals of blockchain. Then you can dive into the good stuff.
+
+### Smart contracts
+
+A [smart contract][20] is a program that runs on the blockchain once a transaction is complete to enhance blockchain's capabilities.
+
+Unlike traditional judicial systems, smart contracts are enforced automatically and impartially. There are also no middlemen, so you don't need a lawyer to oversee a transaction.
+
+As smart contracts get more complex, they become harder to secure. You need to be aware of every possible way a smart contract can be executed and ensure that it does what is expected. At the moment, not many developers can properly optimize and audit smart contracts.
+
+### Decentralized applications
+
+Decentralized applications (DApps) are software built on blockchains. As a blockchain developer, there are several platforms where you can build a DApp. Here are some of them:
+
+#### Ethereum
+
+Ethereum is Vitalik Buterin's brainchild. It went live in 2015 and is one of the most popular development platforms. Ether is the cryptocurrency that fuels the Ethereum.
+
+It has its own language called Solidity, which is similar to C++ and JavaScript. If you've got any experience with either, you'll pick it up easily.
+
+One thing that makes Solidity unique is that it is smart-contract oriented.
+
+#### NEO
+
+Originally known as Antshares, NEO was founded by Erik Zhang and Da Hongfei in 2014. It became NEO in 2017. Unlike Ethereum, it's not limited to one language. You can use different programming languages to build your DApps on NEO, including C# and Java. Experienced users can easily start building DApps on NEO. It's focused on providing platforms for future digital businesses.
+
+Consider NEO if you have applications that will need to process lots of transactions per second. However, it works closely with the Chinese government and follows Chinese business regulations.
+
+#### EOS
+
+EOS blockchain aims to be a decentralized operating system that can support industrial-scale applications. It's basically like Ethereum, but with faster transaction speeds and more scalable.
+
+#### Hyperledger
+
+Hyperledger is an open source collaborative platform that was created to develop cross-industry blockchain technologies. The Linux Foundation hosts Hyperledger as a hub for open industrial blockchain development.
+
+### Learning resources
+
+Here are some courses and other resources that'll help make you an industry-ready blockchain developer.
+
+ * The University of Buffalo and The State University of New York have a [blockchain specialization course][21] that also teaches smart contracts. You can complete it in two months if you put in 10 hours per week. You'll learn about designing and implementing smart contracts and various methods for developing decentralized applications on blockchain.
+ * [DApps for Beginners][22] offers tutorials and other information to get you started on creating decentralized apps on the Ethereum blockchain. You'll need to know JavaScript, and knowledge of C++ is an added advantage.
+ * IBM also offers [Blockchain for Developers][23], where you'll work with IBM's private blockchain and build smart contracts using the [Hyperledger Fabric][24].
+ * For $3,500 you can enroll in MIT's online [Blockchain Technologies: Business Innovation and Application][25] program, which examines blockchain from an economic perspective. You need deep pockets for this one; it's meant for executives who want to know how blockchain can be used in their organizations.
+ * If you're willing to commit 10 hours per week, Udacity's [Blockchain Developer Nanodegree][26] can prepare you to become an industry-ready blockchain developer in six months. Before enrolling, you should have some experience in object-oriented programming. You should also have developed the frontend and backend of a web application with JavaScript. And you're required to have used a remote API to create and consume data. You'll work with Bitcoin and Ethereum protocols to build projects for real-world applications.
+ * If you need to shore up your foundations, you may be interested in the Open Source Society University's wildly popular and [free computer science curriculum][27].
+ * You can read a variety of articles about [blockchain in open source][28] on [Opensource.com][29].
+
+
+
+### Types of blockchain development
+
+What does a blockchain developer really do? It doesn't involve building a blockchain from scratch. Depending on the organization you work for, here are some of the categories that blockchain developers fall under.
+
+#### Backend developers
+
+In this case, the developer is responsible for:
+
+ * Designing and developing APIs for blockchain integration
+ * Doing performance testing and deployment
+ * Gathering requirements and working side-by-side with other developers and designers to design software
+ * Providing technical support
+
+
+
+#### Blockchain-specific
+
+Blockchain developers and project managers fall under this category. Their main roles include:
+
+ * Developing and maintaining decentralized applications
+ * Supervising and planning blockchain projects
+ * Advising companies on how to structure initial coin offerings (ICOs)
+ * Understanding what a company needs and creating apps that address those needs
+ * For project managers, organizing training for employees
+
+
+
+#### Smart-contract engineers
+
+This type of developer is required to know a smart-contract language like Solidity, Python, or Go. Their main roles include:
+
+ * Auditing and developing smart contracts
+ * Meeting with users and buyers
+ * Understanding business flow and security to ensure there are no loopholes in smart contracts
+ * Doing end-to-end business process testing
+
+
+
+### The state of the industry
+
+There's a wide base of knowledge to help you become a blockchain developer. If you're interested in joining the field, it's an opportunity for you to make a difference by pioneering the next wave of tech innovations. It pays very well and is in high demand. There's also a wide community you can join to help you gain entry as an actual developer, including [Ethereum Stack Exchange][30] and meetup events around the world.
+
+The banking sector, the insurance industry, governments, and retail industries are some of the sectors where blockchain developers can work. If you're willing to work for it, being a blockchain developer is an excellent career choice. Currently, the need outpaces available talent by far.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/4/blockchain-career-developer
+
+作者:[Joseph Mugo][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/mugo
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/EDU_UnspokenBlockers_1110_A.png?itok=x8A9mqVA
+[2]: https://www.fool.com/investing/2018/02/16/this-is-really-happening-microsoft-is-developing-b.aspx
+[3]: https://www.engadget.com/2018/04/26/ibm-blockchain-jewelry-provenance/
+[4]: https://www.engadget.com/2018/04/16/samsung-blockchain-based-global-shipping-system/
+[5]: https://economicgraph.linkedin.com/research/linkedin-2018-emerging-jobs-report
+[6]: https://www.upwork.com/blog/2018/05/fastest-growing-skills-upwork-q1-2018/
+[7]: https://www.wsj.com/articles/SB104690855395981400
+[8]: https://github.com/TheAlgorithms
+[9]: https://www.coursera.org/learn/crypto
+[10]: https://en.wikipedia.org/wiki/RSA_(cryptosystem)
+[11]: https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm
+[12]: https://komodoplatform.com/cryptographic-hash-function/
+[13]: https://en.wikipedia.org/wiki/Byzantine_fault
+[14]: https://lagunita.stanford.edu/courses/Engineering/Networking-SP/SelfPaced/about
+[15]: https://github.com/theanalyst/awesome-distributed-systems
+[16]: https://hackernoon.com/beginners-guide-to-game-theory-31e3e6adcec9
+[17]: https://www.amazon.com/dp/B01EIGP8HG/
+[18]: https://www.amazon.com/Blockchain-Blueprint-Economy-Melanie-Swan/dp/1491920491
+[19]: https://www.amazon.com/Blockchain-Beginners-Technology-Leveraging-Programming-ebook/dp/B0711RN8KJ
+[20]: https://lifeinpaces.com/2019/03/04/ethereum-smart-contracts-how-do-they-work/
+[21]: https://www.coursera.org/specializations/blockchain?aid=true
+[22]: https://dappsforbeginners.wordpress.com/
+[23]: https://developer.ibm.com/tutorials/cl-ibm-blockchain-101-quick-start-guide-for-developers-bluemix-trs/#start
+[24]: https://www.hyperledger.org/projects/fabric
+[25]: https://executive.mit.edu/openenrollment/program/blockchain-technologies-business-innovation-and-application-self-paced-online/#.XJSk-CgzbRY
+[26]: https://www.udacity.com/course/blockchain-developer-nanodegree--nd1309
+[27]: https://github.com/ossu/computer-science
+[28]: https://opensource.com/tags/blockchain
+[29]: http://Opensource.com
+[30]: https://ethereum.stackexchange.com/
diff --git a/sources/tech/20190409 Working with variables on Linux.md b/sources/tech/20190409 Working with variables on Linux.md
new file mode 100644
index 0000000000..da4fec5ea9
--- /dev/null
+++ b/sources/tech/20190409 Working with variables on Linux.md
@@ -0,0 +1,267 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Working with variables on Linux)
+[#]: via: (https://www.networkworld.com/article/3387154/working-with-variables-on-linux.html#tk.rss_all)
+[#]: author: (Sandra Henry-Stocker https://www.networkworld.com/author/Sandra-Henry_Stocker/)
+
+Working with variables on Linux
+======
+Variables often look like $var, but they also look like $1, $*, $? and $$. Let's take a look at what all these $ values can tell you.
+![Mike Lawrence \(CC BY 2.0\)][1]
+
+A lot of important values are stored on Linux systems in what we call “variables,” but there are actually several types of variables and some interesting commands that can help you work with them. In a previous post, we looked at [environment variables][2] and where they are defined. In this post, we're going to look at variables that are used on the command line and within scripts.
+
+### User variables
+
+While it's quite easy to set up a variable on the command line, there are a few interesting tricks. To set up a variable, all you need to do is something like this:
+
+```
+$ myvar=11
+$ myvar2="eleven"
+```
+
+To display the values, you simply do this:
+
+```
+$ echo $myvar
+11
+$ echo $myvar2
+eleven
+```
+
+You can also work with your variables. For example, to increment a numeric variable, you could use any of these commands:
+
+```
+$ myvar=$((myvar+1))
+$ echo $myvar
+12
+$ ((myvar=myvar+1))
+$ echo $myvar
+13
+$ ((myvar+=1))
+$ echo $myvar
+14
+$ ((myvar++))
+$ echo $myvar
+15
+$ let "myvar=myvar+1"
+$ echo $myvar
+16
+$ let "myvar+=1"
+$ echo $myvar
+17
+$ let "myvar++"
+$ echo $myvar
+18
+```
+
+With some of these, you can add more than 1 to a variable's value. For example:
+
+```
+$ myvar0=0
+$ ((myvar0++))
+$ echo $myvar0
+1
+$ ((myvar0+=10))
+$ echo $myvar0
+11
+```
+
+With all these choices, you'll probably find at least one that is easy to remember and convenient to use.
+
+You can also _unset_ a variable — basically undefining it.
+
+```
+$ unset myvar
+$ echo $myvar
+```
+
+Another interesting option is that you can set up a variable and make it **read-only**. In other words, once set to read-only, its value cannot be changed (at least not without some very tricky command line wizardry). That means you can't unset it either.
+
+```
+$ readonly myvar3=1
+$ echo $myvar3
+1
+$ ((myvar3++))
+-bash: myvar3: readonly variable
+$ unset myvar3
+-bash: unset: myvar3: cannot unset: readonly variable
+```
+
+You can use any of those setting and incrementing options for assigning and manipulating variables within scripts, but there are also some very useful _internal variables_ for working within scripts. Note that you can't reassign their values or increment them.
+
+### Internal variables
+
+There are quite a few variables that can be used within scripts to evaluate arguments and display information about the script itself.
+
+ * $1, $2, $3 etc. represent the first, second, third, etc. arguments to the script.
+ * $# represents the number of arguments.
+ * $* represents the string of arguments.
+ * $0 represents the name of the script itself.
+ * $? represents the return code of the previously run command (0=success).
+ * $$ shows the process ID for the script.
+ * $PPID shows the process ID for your shell (the parent process for the script).
+
+
+
+Some of these variables also work on the command line but show related information:
+
+ * $0 shows the name of the shell you're using (e.g., -bash).
+ * $$ shows the process ID for your shell.
+ * $PPID shows the process ID for your shell's parent process (for me, this is sshd).
+
+
+
+If we throw all of these variables into a script just to see the results, we might do this:
+
+```
+#!/bin/bash
+
+echo $0
+echo $1
+echo $2
+echo $#
+echo $*
+echo $?
+echo $$
+echo $PPID
+```
+
+When we call this script, we'll see something like this:
+
+```
+$ tryme one two three
+/home/shs/bin/tryme <== script name
+one <== first argument
+two <== second argument
+3 <== number of arguments
+one two three <== all arguments
+0 <== return code from previous echo command
+10410 <== script's process ID
+10109 <== parent process's ID
+```
+
+If we check the process ID of the shell once the script is done running, we can see that it matches the PPID displayed within the script:
+
+```
+$ echo $$
+10109 <== shell's process ID
+```
+
+Of course, we're more likely to use these variables in considerably more useful ways than simply displaying their values. Let's check out some ways we might do this.
+
+Checking to see if arguments have been provided:
+
+```
+if [ $# == 0 ]; then
+ echo "$0 filename"
+ exit 1
+fi
+```
+
+Checking to see if a particular process is running:
+
+```
+ps -ef | grep apache2 > /dev/null
+if [ $? != 0 ]; then
+ echo Apache is not running
+ exit
+fi
+```
+
+Verifying that a file exists before trying to access it:
+
+```
+if [ $# -lt 2 ]; then
+ echo "Usage: $0 lines filename"
+ exit 1
+fi
+
+if [ ! -f $2 ]; then
+ echo "Error: File $2 not found"
+ exit 2
+else
+ head -$1 $2
+fi
+```
+
+And in this little script, we check if the correct number of arguments have been provided, if the first argument is numeric, and if the second argument is an existing file.
+
+```
+#!/bin/bash
+
+if [ $# -lt 2 ]; then
+ echo "Usage: $0 lines filename"
+ exit 1
+fi
+
+if [[ $1 != [0-9]* ]]; then
+ echo "Error: $1 is not numeric"
+ exit 2
+fi
+
+if [ ! -f $2 ]; then
+ echo "Error: File $2 not found"
+ exit 3
+else
+ echo top of file
+ head -$1 $2
+fi
+```
+
+### Renaming variables
+
+When writing a complicated script, it's often useful to assign names to the script's arguments rather than continuing to refer to them as $1, $2, and so on. By the 35th line, someone reading your script might have forgotten what $2 represents. It will be a lot easier on that person if you assign an important parameter's value to $filename or $numlines.
+
+```
+#!/bin/bash
+
+if [ $# -lt 2 ]; then
+ echo "Usage: $0 lines filename"
+ exit 1
+else
+ numlines=$1
+ filename=$2
+fi
+
+if [[ $numlines != [0-9]* ]]; then
+ echo "Error: $numlines is not numeric"
+ exit 2
+fi
+
+if [ ! -f $ filename]; then
+ echo "Error: File $filename not found"
+ exit 3
+else
+ echo top of file
+ head -$numlines $filename
+fi
+```
+
+Of course, this example script does nothing more than run the head command to show the top X lines in a file, but it is meant to show how internal parameters can be used within scripts to help ensure the script runs well or fails with at least some clarity.
+
+**[ Watch Sandra Henry-Stocker's Two-Minute Linux Tips[to learn how to master a host of Linux commands][3] ]**
+
+Join the Network World communities on [Facebook][4] and [LinkedIn][5] to comment on topics that are top of mind.
+
+--------------------------------------------------------------------------------
+
+via: https://www.networkworld.com/article/3387154/working-with-variables-on-linux.html#tk.rss_all
+
+作者:[Sandra Henry-Stocker][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.networkworld.com/author/Sandra-Henry_Stocker/
+[b]: https://github.com/lujun9972
+[1]: https://images.idgesg.net/images/article/2019/04/variable-key-keyboard-100793080-large.jpg
+[2]: https://www.networkworld.com/article/3385516/how-to-manage-your-linux-environment.html
+[3]: https://www.youtube.com/playlist?list=PL7D2RMSmRO9J8OTpjFECi8DJiTQdd4hua
+[4]: https://www.facebook.com/NetworkWorld/
+[5]: https://www.linkedin.com/company/network-world
diff --git a/sources/tech/20190409 topgrade - Upgrade-Update Everything In Single Command On Linux.md b/sources/tech/20190409 topgrade - Upgrade-Update Everything In Single Command On Linux.md
new file mode 100644
index 0000000000..48edeaec20
--- /dev/null
+++ b/sources/tech/20190409 topgrade - Upgrade-Update Everything In Single Command On Linux.md
@@ -0,0 +1,207 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (topgrade – Upgrade/Update Everything In Single Command On Linux?)
+[#]: via: (https://www.2daygeek.com/topgrade-upgrade-update-everything-in-single-command-on-linux/)
+[#]: author: (Magesh Maruthamuthu https://www.2daygeek.com/author/magesh/)
+
+topgrade – Upgrade/Update Everything In Single Command On Linux?
+======
+
+As a Linux administrator, you have to keep your system up-to-date to get ride out from some unexpected issues.
+
+We have to keep the system with latest patches as part of best practices.
+
+To do so, you need to perform the patching activity at least once in a month.
+
+Most of the time you have to reboot the server after patching to activate the latest kernel.
+
+It’s good to reboot the server at least 90-120 days once that will fix some outstanding issue which we already having.
+
+If you have a single system then we can directly login to the system and do perform the patching that is not a big deal.
+
+Even, if you have few of servers with the same flavor then you can perform the patching with help of shell script.
+
+If you have high number of servers then i would advise you to go with any of the parallel utility, which will help us to perform the patching in parallel.
+
+It will save a lot’s of time compared with shell script as this go with sequential order.
+
+how to patch all togeter if you have servers with multiple flavors? What will be the solution ?
+
+I recently came to know the utility called `topgrade` that can fulfill your requirement.
+
+Also, your distribution package manager doesn’t upgrade the packages which was installed with other package managers such as pip, npm, snap, etc,. but topgrade can fix this issue as well.
+
+### What Is topgrade?
+
+[topgrade][1] is a new tool that will upgrade all the installed packages on your system to latest available version by detecting and running the appropriate package managers.
+
+### How To Install topgrade In Linux?
+
+There is no separate package manager for distributions wise. Hence, you need to install topgrade with help of cargo package manager.
+
+The topgrade is available in AUR. So, use one of the **[AUR helper][2]** to install it on Arch-based systems. I prefer to go with **[Yay helper][3]** program.
+
+```
+$ yay -S topgrade
+```
+
+Once you have installed the **[cargo package manager][4]** , use the following command to install it.
+
+```
+$ cargo install topgrade
+```
+
+Once topgrade is initiated, it will perform the following tasks one by one.
+
+ * Try to self-upgrade if any updated is available for topgrade.
+ * Arch: Run yay or fall back to pacman
+ * CentOS/RHEL: Run yum upgrade
+ * Fedora: Run dnf upgrade
+ * Debian/Ubuntu: Run apt update && apt dist-upgrade
+ * openSUSE: Run zypper refresh && zypper dist-upgrade
+ * Upgrade Vim/Neovim packages.
+ * Run npm update -g if NPM is installed
+ * Upgrade Atom packages
+ * Linux: Update Flatpak packages
+ * Linux: Update snap packages
+ * Linux: Run fwupdmgr to show firmware upgrade.
+ * Finally it will run needrestart to bounce all the services.
+
+
+
+Now, we have successfully installed `topgrade` so, run the topgrade alone to upgrade everything on your system. I have tested the utility on Ubuntu 18.04 LTS and the results are below.
+
+```
+$ topgrade
+
+―― System update ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
+[sudo] password for daygeek:
+Hit:1 http://in.archive.ubuntu.com/ubuntu bionic InRelease
+Get:2 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
+Get:3 http://in.archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
+Get:4 http://in.archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]
+.
+Get:16 http://security.ubuntu.com/ubuntu bionic-security/universe DEP-11 64x64 Icons [45.2 kB]
+Get:17 http://security.ubuntu.com/ubuntu bionic-security/multiverse amd64 DEP-11 Metadata [2,460 B]
+Fetched 1,565 kB in 13s (117 kB/s)
+Reading package lists... Done
+Building dependency tree
+Reading state information... Done
+119 packages can be upgraded. Run 'apt list --upgradable' to see them.
+Reading package lists... Done
+Building dependency tree
+Reading state information... Done
+Calculating upgrade... Done
+The following packages were automatically installed and are no longer required:
+ libopts25 linux-headers-4.15.0-45 linux-headers-4.15.0-45-generic linux-image-4.15.0-45-generic
+ linux-modules-4.15.0-29-generic linux-modules-4.15.0-45-generic linux-modules-extra-4.15.0-45-generic sntp
+Use 'sudo apt autoremove' to remove them.
+The following packages will be upgraded:
+ apport apport-gtk apt apt-utils cups cups-bsd cups-client cups-common cups-core-drivers cups-daemon cups-ipp-utils
+ cups-ppdc cups-server-common distro-info-data fwupdate fwupdate-signed gir1.2-dbusmenu-glib-0.4 gir1.2-gtk-3.0
+ gir1.2-packagekitglib-1.0 gir1.2-snapd-1 gnome-settings-daemon gnome-settings-daemon-schemas grub-common grub-pc
+ python3-httplib2 python3-problem-report samba-libs systemd systemd-sysv ubuntu-drivers-common udev ufw
+ unattended-upgrades xdg-desktop-portal xdg-desktop-portal-gtk
+119 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+Need to get 38.5 MB of archives.
+After this operation, 475 kB of additional disk space will be used.
+Do you want to continue? [Y/n]
+.
+.
+Setting up grub-pc (2.02-2ubuntu8.13) ...
+Installing for i386-pc platform.
+Installation finished. No error reported.
+Sourcing file `/etc/default/grub'
+Generating grub configuration file ...
+Found memtest86+ image: /boot/memtest86+.elf
+Found memtest86+ image: /boot/memtest86+.bin
+done
+Setting up mesa-vdpau-drivers:amd64 (18.2.8-0ubuntu0~18.04.2) ...
+Updating PPD files for cups ...
+Setting up apport-gtk (2.20.9-0ubuntu7.6) ...
+Setting up pulseaudio-module-bluetooth (1:11.1-1ubuntu7.2) ...
+Processing triggers for libc-bin (2.27-3ubuntu1) ...
+Processing triggers for initramfs-tools (0.130ubuntu3.7) ...
+update-initramfs: Generating /boot/initrd.img-4.15.0-47-generic
+```
+
+It will run the self-updates once the distribution official packages update done.
+
+```
+―― rustup ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
+info: checking for self-updates
+info: syncing channel updates for 'stable-x86_64-unknown-linux-gnu'
+info: checking for self-updates
+
+ stable-x86_64-unknown-linux-gnu unchanged - rustc 1.33.0 (2aa4c46cf 2019-02-28)
+```
+
+Then it will try to update the packages that has installed with other package managers.
+
+```
+―― Flatpak User Packages ――――――――――――――――――――――――――――――――――――――――――――――――――――――――
+Looking for updates...
+Looking for updates...
+Updating in system:
+org.gnome.Platform/x86_64/3.30 flathub 862e6b8ec2b5
+org.gnome.Platform.Locale/x86_64/3.30 flathub 5e66e981ae00
+org.freedesktop.Platform.html5-codecs/x86_64/18.08 flathub 282fd2c4ef33
+com.github.muriloventuroso.easyssh/x86_64/stable flathub c6bc3a3e72fb
+ new permissions: ssh-auth
+com.github.muriloventuroso.easyssh.Locale/x86_64/stable flathub b705864b8d78
+Updating: org.gnome.Platform/x86_64/3.30 from flathub
+[####################] 16 delta parts, 10 loose fetched; 65539 KiB transferred in 63 seconds
+Error: Failed to update org.gnome.Platform/x86_64/3.30: Flatpak system operation Deploy not allowed for user
+
+Skipping org.gnome.Platform.Locale/x86_64/3.30 due to previous error
+
+Skipping org.freedesktop.Platform.html5-codecs/x86_64/18.08 due to previous error
+Updating: com.github.muriloventuroso.easyssh/x86_64/stable from flathub
+[####################] 2 delta parts, 3 loose fetched; 1532 KiB transferred in 5 seconds
+Error: Failed to update com.github.muriloventuroso.easyssh/x86_64/stable: Flatpak system operation Deploy not allowed for user
+
+Skipping com.github.muriloventuroso.easyssh.Locale/x86_64/stable due to previous error
+error: There were one or more errors
+
+Retry? [y/N]
+```
+
+Then it will run the firmwre upgrade.
+
+```
+―― Firmware upgrades ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
+Fetching metadata https://cdn.fwupd.org/downloads/firmware.xml.gz
+Downloading… [***************************************]
+Fetching signature https://cdn.fwupd.org/downloads/firmware.xml.gz.asc
+```
+
+Finally, it shows the summary about the patching has done.
+
+```
+―― Summary ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
+System update: OK
+rustup: OK
+Flatpak User Packages: FAILED
+Firmware upgrade: OK
+```
+
+--------------------------------------------------------------------------------
+
+via: https://www.2daygeek.com/topgrade-upgrade-update-everything-in-single-command-on-linux/
+
+作者:[Magesh Maruthamuthu][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.2daygeek.com/author/magesh/
+[b]: https://github.com/lujun9972
+[1]: https://github.com/r-darwish/topgrade
+[2]: https://www.2daygeek.com/category/aur-helper/
+[3]: https://www.2daygeek.com/install-yay-yet-another-yogurt-aur-helper-on-arch-linux/
+[4]: https://www.2daygeek.com/how-to-install-rust-programming-language-in-linux/
diff --git a/sources/tech/20190410 How to enable serverless computing in Kubernetes.md b/sources/tech/20190410 How to enable serverless computing in Kubernetes.md
new file mode 100644
index 0000000000..75e5a5868d
--- /dev/null
+++ b/sources/tech/20190410 How to enable serverless computing in Kubernetes.md
@@ -0,0 +1,136 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (How to enable serverless computing in Kubernetes)
+[#]: via: (https://opensource.com/article/19/4/enabling-serverless-kubernetes)
+[#]: author: (Daniel Oh https://opensource.com/users/daniel-oh/users/daniel-oh)
+
+How to enable serverless computing in Kubernetes
+======
+Knative is a faster, easier way to develop serverless applications on
+Kubernetes platforms.
+![Kubernetes][1]
+
+In the first two articles in this series about using serverless on an open source platform, I described [how to get started with serverless platforms][2] and [how to write functions][3] in popular languages and build components using containers on Apache OpenWhisk.
+
+Here in the third article, I'll walk you through enabling serverless in your [Kubernetes][4] environment. Kubernetes is the most popular platform to manage serverless workloads and microservice application containers and uses a finely grained deployment model to process workloads more quickly and easily.
+
+Keep in mind that serverless not only helps you reduce infrastructure management while utilizing a consumption model for actual service use but also provides many capabilities of what the cloud platform serves. There are many serverless or FaaS (Function as a Service) platforms, but Kuberenetes is the first-class citizen for building a serverless platform because there are more than [13 serverless or FaaS open source projects][5] based on Kubernetes.
+
+However, Kubernetes won't allow you to build, serve, and manage app containers for your serverless workloads in a native way. For example, if you want to build a [CI/CD pipeline][6] on Kubernetes to build, test, and deploy cloud-native apps from source code, you need to use your own release management tool and integrate it with Kubernetes.
+
+Likewise, it's difficult to use Kubernetes in combination with serverless computing unless you use an independent serverless or FaaS platform built on Kubernetes, such as [Apache OpenWhisk][7], [Riff][8], or [Kubeless][9]. More importantly, the Kubernetes environment is still difficult for developers to learn the features of how it deals with serverless workloads from cloud-native apps.
+
+### Knative
+
+[Knative][10] was born for developers to create serverless experiences natively without depending on extra serverless or FaaS frameworks and many custom tools. Knative has three primary components—[Build][11], [Serving][12], and [Eventing][13]—for addressing common patterns and best practices for developing serverless applications on Kubernetes platforms.
+
+To learn more, let's go through the usual development process for using Knative to increase productivity and solve Kubernetes' difficulties from the developer's point of view.
+
+**Step 1:** Generate your cloud-native application from scratch using [Spring Initializr][14] or [Thorntail Project Generator][15]. Begin implementing your business logic using the [12-factor app methodology][16], and you might also do assembly testing to see if the function works correctly in many local testing tools.
+
+![Spring Initializr screenshot][17] | ![Thorntail Project Generator screenshot][18]
+---|---
+
+**Step 2:** Build container images from your source code repositories via the Knative Build component. You can define multiple steps, such as installing dependencies, running integration testing, and pushing container images to your secured image registry for using existing Kubernetes primitives. More importantly, Knative Build makes developers' daily work easier and simpler—"boring but difficult." Here's an example of the Build YAML:
+
+
+```
+apiVersion: build.knative.dev/v1alpha1
+kind: Build
+metadata:
+name: docker-build
+spec:
+serviceAccountName: build-bot
+source:
+git:
+revision: master
+url:
+steps:
+\- args:
+\- --context=/workspace/java/springboot
+\- --dockerfile=/workspace/java/springboot/Dockerfile
+\- --destination=docker.io/demo/event-greeter:0.0.1
+env:
+\- name: DOCKER_CONFIG
+value: /builder/home/.docker
+image: gcr.io/kaniko-project/executor
+name: docker-push
+```
+
+**Step 3:** Deploy and serve your container applications as serverless workloads via the Knative Serving component. This step shows the beauty of Knative in terms of automatically scaling up your serverless containers on Kubernetes then scaling them down to zero if there is no request to the containers for a specific period (e.g., two minutes). More importantly, [Istio][19] will automatically address ingress and egress networking traffic of serverless workloads in multiple, secure ways. Here's an example of the Serving YAML:
+
+
+```
+apiVersion: serving.knative.dev/v1alpha1
+kind: Service
+metadata:
+name: greeter
+spec:
+runLatest:
+configuration:
+revisionTemplate:
+spec:
+container:
+image: dev.local/rhdevelopers/greeter:0.0.1
+```
+
+**Step 4:** Bind running serverless containers to a variety of eventing platforms, such as SaaS, FaaS, and Kubernetes, via Knative's Eventing component. In this step, you can define event channels and subscriptions, which are delivered to your services via a messaging platform such as [Apache Kafka][20] or [NATS streaming][21]. Here's an example of the Event sourcing YAML:
+
+
+```
+apiVersion: sources.eventing.knative.dev/v1alpha1
+kind: CronJobSource
+metadata:
+name: test-cronjob-source
+spec:
+schedule: "* * * * *"
+data: '{"message": "Event sourcing!!!!"}'
+sink:
+apiVersion: eventing.knative.dev/v1alpha1
+kind: Channel
+name: ch-event-greeter
+```
+
+### Conclusion
+
+Developing with Knative will save a lot of time in building serverless applications in the Kubernetes environment. It can also make developers' jobs easier by focusing on developing serverless applications, functions, or cloud-native containers.
+
+* * *
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/4/enabling-serverless-kubernetes
+
+作者:[Daniel Oh (Red Hat, Community Moderator)][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/daniel-oh/users/daniel-oh
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/kubernetes.png?itok=PqDGb6W7 (Kubernetes)
+[2]: https://opensource.com/article/18/11/open-source-serverless-platforms
+[3]: https://opensource.com/article/18/11/developing-functions-service-apache-openwhisk
+[4]: https://kubernetes.io/
+[5]: https://landscape.cncf.io/format=serverless
+[6]: https://opensource.com/article/18/8/what-cicd
+[7]: https://openwhisk.apache.org/
+[8]: https://projectriff.io/
+[9]: https://kubeless.io/
+[10]: https://cloud.google.com/knative/
+[11]: https://github.com/knative/build
+[12]: https://github.com/knative/serving
+[13]: https://github.com/knative/eventing
+[14]: https://start.spring.io/
+[15]: https://thorntail.io/generator/
+[16]: https://12factor.net/
+[17]: https://opensource.com/sites/default/files/uploads/spring_300.png (Spring Initializr screenshot)
+[18]: https://opensource.com/sites/default/files/uploads/springboot_300.png (Thorntail Project Generator screenshot)
+[19]: https://istio.io/
+[20]: https://kafka.apache.org/
+[21]: https://nats.io/
diff --git a/sources/tech/20190410 How we built a Linux desktop app with Electron.md b/sources/tech/20190410 How we built a Linux desktop app with Electron.md
new file mode 100644
index 0000000000..eb11c65614
--- /dev/null
+++ b/sources/tech/20190410 How we built a Linux desktop app with Electron.md
@@ -0,0 +1,101 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (How we built a Linux desktop app with Electron)
+[#]: via: (https://opensource.com/article/19/4/linux-desktop-electron)
+[#]: author: (Nils Ganther https://opensource.com/users/nils-ganther)
+
+How we built a Linux desktop app with Electron
+======
+A story of building an open source email service that runs natively on
+Linux desktops, thanks to the Electron framework.
+![document sending][1]
+
+[Tutanota][2] is a secure, open source email service that's been available as an app for the browser, iOS, and Android. The client code is published under GPLv3 and the Android app is available on [F-Droid][3] to enable everyone to use a completely Google-free version.
+
+Because Tutanota focuses on open source and develops on Linux clients, we wanted to release a desktop app for Linux and other platforms. Being a small team, we quickly ruled out building native apps for Linux, Windows, and MacOS and decided to adapt our app using [Electron][4].
+
+Electron is the go-to choice for anyone who wants to ship visually consistent, cross-platform applications, fast—especially if there's already a web app that needs to be freed from the shackles of the browser API. Tutanota is exactly such a case.
+
+Tutanota is based on [SystemJS][5] and [Mithril][6] and aims to offer simple, secure email communications for everybody. As such, it has to provide a lot of the standard features users expect from any email client.
+
+Some of these features, like basic push notifications, search for text and contacts, and support for two-factor authentication are easy to offer in the browser thanks to modern APIs and standards. Other features (such as automatic backups or IMAP support without involving our servers) need less-restricted access to system resources, which is exactly what the Electron framework provides.
+
+While some criticize Electron as "just a basic wrapper," it has obvious benefits:
+
+ * Electron enables you to adapt a web app quickly for Linux, Windows, and MacOS desktops. In fact, most Linux desktop apps are built with Electron.
+ * Electron enables you to easily bring the desktop client to feature parity with the web app.
+ * Once you've published the desktop app, you can use free development capacity to add desktop-specific features that enhance usability and security.
+ * And last but certainly not least, it's a great way to make the app feel native and integrated into the user's system while maintaining its identity.
+
+
+
+### Meeting users' needs
+
+At Tutanota, we do not rely on big investor money, rather we are a community-driven project. We grow our team organically based on the increasing number of users upgrading to our freemium service's paid plans. Listening to what users want is not only important to us, it is essential to our success.
+
+Offering a desktop client was users' [most-wanted feature][7] in Tutanota, and we are proud that we can now offer free beta desktop clients to all of our users. (We also implemented another highly requested feature—[search on encrypted data][8]—but that's a topic for another time.)
+
+We liked the idea of providing users with signed versions of Tutanota and enabling functions that are impossible in the browser, such as push notifications via a background process. Now we plan to add more desktop-specific features, such as IMAP support without depending on our servers to act as a proxy, automatic backups, and offline availability.
+
+We chose Electron because its combination of Chromium and Node.js promised to be the best fit for our small development team, as it required only minimal changes to our web app. It was particularly helpful to use the browser APIs for everything as we got started, slowly replacing those components with more native versions as we progressed. This approach was especially handy with attachment downloads and notifications.
+
+### Tuning security
+
+We were aware that some people cite security problems with Electron, but we found Electron's options for fine-tuning access in the web app quite satisfactory. You can use resources like the Electron's [security documentation][9] and Luca Carettoni's [Electron Security Checklist][10] to help prevent catastrophic mishaps with untrusted content in your web app.
+
+### Achieving feature parity
+
+The Tutanota web client was built from the start with a solid protocol for interprocess communication. We utilize web workers to keep user interface (UI) rendering responsive while encrypting and requesting data. This came in handy when we started implementing our mobile apps, which use the same protocol to communicate between the native part and the web view.
+
+That's why when we started building the desktop clients, a lot of bindings for things like native push notifications, opening mailboxes, and working with the filesystem were already there, so only the native (node) side had to be implemented.
+
+Another convenience was our build process using the [Babel transpiler][11], which allows us to write the entire codebase in modern ES6 JavaScript and mix-and-match utility modules between the different environments. This enabled us to speedily adapt the code for the Electron-based desktop apps. However, we encountered some challenges.
+
+### Overcoming challenges
+
+While Electron allows us to integrate with the different platforms' desktop environments pretty easily, you can't underestimate the time investment to get things just right! In the end, it was these little things that took up much more time than we expected but were also crucial to finish the desktop client project.
+
+The places where platform-specific code was necessary caused most of the friction:
+
+ * Window management and the tray, for example, are still handled in subtly different ways on the three platforms.
+ * Registering Tutanota as the default mail program and setting up autostart required diving into the Windows Registry while making sure to prompt the user for admin access in a [UAC][12]-compatible way.
+ * We needed to use Electron's API for shortcuts and menus to offer even standard features like copy, paste, undo, and redo.
+
+
+
+This process was complicated a bit by users' expectations of certain, sometimes not directly compatible behavior of the apps on different platforms. Making the three versions feel native required some iteration and even some modest additions to the web app to offer a text search similar to the one in the browser.
+
+### Wrapping up
+
+Our experience with Electron was largely positive, and we completed the project in less than four months. Despite some rather time-consuming features, we were surprised about the ease with which we could ship a beta version of the [Tutanota desktop client for Linux][13]. If you're interested, you can dive into the source code on [GitHub][14].
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/4/linux-desktop-electron
+
+作者:[Nils Ganther][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/nils-ganther
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/email_paper_envelope_document.png?itok=uPj_kouJ (document sending)
+[2]: https://tutanota.com/
+[3]: https://f-droid.org/en/packages/de.tutao.tutanota/
+[4]: https://electronjs.org/
+[5]: https://github.com/systemjs/systemjs
+[6]: https://mithril.js.org/
+[7]: https://tutanota.uservoice.com/forums/237921-general/filters/top?status_id=1177482
+[8]: https://tutanota.com/blog/posts/first-search-encrypted-data/
+[9]: https://electronjs.org/docs/tutorial/security
+[10]: https://www.blackhat.com/docs/us-17/thursday/us-17-Carettoni-Electronegativity-A-Study-Of-Electron-Security-wp.pdf
+[11]: https://babeljs.io/
+[12]: https://en.wikipedia.org/wiki/User_Account_Control
+[13]: https://tutanota.com/blog/posts/desktop-clients/
+[14]: https://www.github.com/tutao/tutanota
diff --git a/sources/tech/20190411 Be your own certificate authority.md b/sources/tech/20190411 Be your own certificate authority.md
new file mode 100644
index 0000000000..f6ea26aba4
--- /dev/null
+++ b/sources/tech/20190411 Be your own certificate authority.md
@@ -0,0 +1,135 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Be your own certificate authority)
+[#]: via: (https://opensource.com/article/19/4/certificate-authority)
+[#]: author: (Moshe Zadka https://opensource.com/users/moshez/users/elenajon123)
+
+Be your own certificate authority
+======
+Create a simple, internal CA for your microservice architecture or
+integration testing.
+![][1]
+
+The Transport Layer Security ([TLS][2]) model, which is sometimes referred to by the older name SSL, is based on the concept of [certificate authorities][3] (CAs). These authorities are trusted by browsers and operating systems and, in turn, _sign_ servers' certificates to validate their ownership.
+
+However, for an intranet, a microservice architecture, or integration testing, it is sometimes useful to have a _local CA_ : one that is trusted only internally and, in turn, signs local servers' certificates.
+
+This especially makes sense for integration tests. Getting certificates can be a burden because the servers will be up for minutes. But having an "ignore certificate" option in the code could allow it to be activated in production, leading to a security catastrophe.
+
+A CA certificate is not much different from a regular server certificate; what matters is that it is trusted by local code. For example, in the **requests** library, this can be done by setting the **REQUESTS_CA_BUNDLE** variable to a directory containing this certificate.
+
+In the example of creating a certificate for integration tests, there is no need for a _long-lived_ certificate: if your integration tests take more than a day, you have already failed.
+
+So, calculate **yesterday** and **tomorrow** as the validity interval:
+
+
+```
+>>> import datetime
+>>> one_day = datetime.timedelta(days=1)
+>>> today = datetime.date.today()
+>>> yesterday = today - one_day
+>>> tomorrow = today - one_day
+```
+
+Now you are ready to create a simple CA certificate. You need to generate a private key, create a public key, set up the "parameters" of the CA, and then self-sign the certificate: a CA certificate is _always_ self-signed. Finally, write out both the certificate file as well as the private key file.
+
+
+```
+from cryptography.hazmat.primitives.asymmetric import rsa
+from cryptography.hazmat.primitives import hashes, serialization
+from cryptography import x509
+from cryptography.x509.oid import NameOID
+
+private_key = rsa.generate_private_key(
+public_exponent=65537,
+key_size=2048,
+backend=default_backend()
+)
+public_key = private_key.public_key()
+builder = x509.CertificateBuilder()
+builder = builder.subject_name(x509.Name([
+x509.NameAttribute(NameOID.COMMON_NAME, 'Simple Test CA'),
+]))
+builder = builder.issuer_name(x509.Name([
+x509.NameAttribute(NameOID.COMMON_NAME, 'Simple Test CA'),
+]))
+builder = builder.not_valid_before(yesterday)
+builder = builder.not_valid_after(tomorrow)
+builder = builder.serial_number(x509.random_serial_number())
+builder = builder.public_key(public_key)
+builder = builder.add_extension(
+x509.BasicConstraints(ca=True, path_length=None),
+critical=True)
+certificate = builder.sign(
+private_key=private_key, algorithm=hashes.SHA256(),
+backend=default_backend()
+)
+private_bytes = private_key.private_bytes(
+encoding=serialization.Encoding.PEM,
+format=serialization.PrivateFormat.TraditionalOpenSSL,
+encryption_algorithm=serialization.NoEncrption())
+public_bytes = certificate.public_bytes(
+encoding=serialization.Encoding.PEM)
+with open("ca.pem", "wb") as fout:
+fout.write(private_bytes + public_bytes)
+with open("ca.crt", "wb") as fout:
+fout.write(public_bytes)
+```
+
+In general, a real CA will expect a [certificate signing request][4] (CSR) to sign a certificate. However, when you are your own CA, you can make your own rules! Just go ahead and sign what you want.
+
+Continuing with the integration test example, you can create the private keys and sign the corresponding public keys right then. Notice **COMMON_NAME** needs to be the "server name" in the **https** URL. If you've configured name lookup, the needed server will respond on **service.test.local**.
+
+
+```
+service_private_key = rsa.generate_private_key(
+public_exponent=65537,
+key_size=2048,
+backend=default_backend()
+)
+service_public_key = service_private_key.public_key()
+builder = x509.CertificateBuilder()
+builder = builder.subject_name(x509.Name([
+x509.NameAttribute(NameOID.COMMON_NAME, 'service.test.local')
+]))
+builder = builder.not_valid_before(yesterday)
+builder = builder.not_valid_after(tomorrow)
+builder = builder.public_key(public_key)
+certificate = builder.sign(
+private_key=private_key, algorithm=hashes.SHA256(),
+backend=default_backend()
+)
+private_bytes = service_private_key.private_bytes(
+encoding=serialization.Encoding.PEM,
+format=serialization.PrivateFormat.TraditionalOpenSSL,
+encryption_algorithm=serialization.NoEncrption())
+public_bytes = certificate.public_bytes(
+encoding=serialization.Encoding.PEM)
+with open("service.pem", "wb") as fout:
+fout.write(private_bytes + public_bytes)
+```
+
+Now the **service.pem** file has a private key and a certificate that is "valid": it has been signed by your local CA. The file is in a format that can be given to, say, Nginx, HAProxy, or most other HTTPS servers.
+
+By applying this logic to testing scripts, it's easy to create servers that look like authentic HTTPS servers, as long as the client is configured to trust the right CA.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/4/certificate-authority
+
+作者:[Moshe Zadka (Community Moderator)][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/moshez/users/elenajon123
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/rh_commun_4604_02_mech_connections_rhcz0.5x.png?itok=YPPU4dMj
+[2]: https://en.wikipedia.org/wiki/Transport_Layer_Security
+[3]: https://en.wikipedia.org/wiki/Certificate_authority
+[4]: https://en.wikipedia.org/wiki/Certificate_signing_request
diff --git a/sources/tech/20190411 How do you contribute to open source without code.md b/sources/tech/20190411 How do you contribute to open source without code.md
new file mode 100644
index 0000000000..40c2a89842
--- /dev/null
+++ b/sources/tech/20190411 How do you contribute to open source without code.md
@@ -0,0 +1,73 @@
+[#]: collector: (lujun9972)
+[#]: translator: (warmfrog)
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (How do you contribute to open source without code?)
+[#]: via: (https://opensource.com/article/19/4/contribute-without-code)
+[#]: author: (Chris Hermansen https://opensource.com/users/clhermansen/users/don-watkins/users/greg-p/users/petercheer)
+
+How do you contribute to open source without code?
+======
+
+![Dandelion held out over water][1]
+
+My earliest open source contributions date back to the mid-1980s when our organization first connected to [UseNet][2] where we discovered the contributed code and the opportunities to share in its development and support.
+
+Today there are endless contribution opportunities, from contributing code to making how-to videos.
+
+I'm going to step right over the whole issue of contributing code, other than pointing out that many of us who write code but don't consider ourselves developers can still [contribute code][3]. Instead, I'd like to remind everyone that there are lots of [non-code ways to contribute to open source][4] and talk about three alternatives.
+
+### Filing bug reports
+
+One important and concrete kind of contribution could best be described as "not being afraid to file a decent bug report" and [all the consequences related to that][5]. Sometimes it's quite challenging to [file a decent bug report][6]. For example:
+
+ * A bug may be difficult to record or describe. A long and complicated message with all sorts of unrecognizable codes may flash by as the computer is booting, or there may just be some "odd behavior" on the screen with no error messages produced.
+ * A bug may be difficult to reproduce. It may occur only on certain hardware/software configurations, or it may be rarely triggered, or the precise problem area may not be apparent.
+ * A bug may be linked to a very specific development environment configuration that is too big, messy, and complicated to share, requiring laborious creation of a stripped-down example.
+ * When reporting a bug to a distro, the maintainers may suggest filing the bug upstream instead, which can sometimes lead to a lot of work when the version supported by the distro is not the primary version of interest to the upstream community. (This can happen when the version provided in the distro lags the officially supported release and development version.)
+
+
+
+Nevertheless, I exhort would-be bug reporters (including me) to press on and try to get bugs fully recorded and acknowledged.
+
+One way to get started is to use your favorite search tool to look for similar bug reports, see how they are described, where they are filed, and so on. Another important thing to know is the formal mechanism defined for bug reporting by your distro (for example, [Fedora's is here][7]; [openSUSE's is here][8]; [Ubuntu's is here][9]) or software package ([LibreOffice's is here][10]; [Mozilla's seems to be here][11]).
+
+### Answering user's questions
+
+I lurk and occasionally participate in various mailing lists and forums, such as the [Ubuntu quality control team][12] and [forums][13], [LinuxQuestions.org][14], and the [ALSA users' mailing list][15]. Here, the contributions may relate less to bugs and more to documenting complex use cases. It's a great feeling for everyone to see someone jumping in to help a person sort out their trouble with a particular issue.
+
+### Writing about open source
+
+Finally, another area where I really enjoy contributing is [_writing_][16] about using open source software; whether it's a how-to guide, a comparative evaluation of different solutions to a particular problem, or just generally exploring an area of interest (in my case, using open source music-playing software to enjoy music). A similar option is making an instructional video; it's easy to [record the desktop][17] while demonstrating some fiendishly difficult desktop maneuver, such as creating a splashy logo with GIMP. And those of you who are bi- or multi-lingual can also consider translating existing how-to articles or videos to another language.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/4/contribute-without-code
+
+作者:[Chris Hermansen (Community Moderator)][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/clhermansen/users/don-watkins/users/greg-p/users/petercheer
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/dandelion_blue_water_hand.jpg?itok=QggW8Wnw (Dandelion held out over water)
+[2]: https://en.wikipedia.org/wiki/Usenet
+[3]: https://opensource.com/article/19/2/open-science-git
+[4]: https://opensource.com/life/16/1/8-ways-contribute-open-source-without-writing-code
+[5]: https://producingoss.com/en/bug-tracker.html
+[6]: https://opensource.com/article/19/3/bug-reporting
+[7]: https://docs.fedoraproject.org/en-US/quick-docs/howto-file-a-bug/
+[8]: https://en.opensuse.org/openSUSE:Submitting_bug_reports
+[9]: https://help.ubuntu.com/stable/ubuntu-help/report-ubuntu-bug.html.en
+[10]: https://wiki.documentfoundation.org/QA/BugReport
+[11]: https://developer.mozilla.org/en-US/docs/Mozilla/QA/Bug_writing_guidelines
+[12]: https://wiki.ubuntu.com/QATeam
+[13]: https://ubuntuforums.org/
+[14]: https://www.linuxquestions.org/
+[15]: https://www.alsa-project.org/wiki/Mailing-lists
+[16]: https://opensource.com/users/clhermansen
+[17]: https://opensource.com/education/16/10/simplescreenrecorder-and-kazam
diff --git a/sources/tech/20190411 Managed, enabled, empowered- 3 dimensions of leadership in an open organization.md b/sources/tech/20190411 Managed, enabled, empowered- 3 dimensions of leadership in an open organization.md
new file mode 100644
index 0000000000..890b934ef1
--- /dev/null
+++ b/sources/tech/20190411 Managed, enabled, empowered- 3 dimensions of leadership in an open organization.md
@@ -0,0 +1,103 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Managed, enabled, empowered: 3 dimensions of leadership in an open organization)
+[#]: via: (https://opensource.com/open-organization/19/4/managed-enabled-empowered)
+[#]: author: (Heidi Hess von Ludewig https://opensource.com/users/heidi-hess-von-ludewig/users/amatlack)
+
+Managed, enabled, empowered: 3 dimensions of leadership in an open organization
+======
+Different types of work call for different types of engagement. Should
+open leaders always aim for empowerment?
+![][1]
+
+"Empowerment" seems to be the latest people management [buzzword][2]. And it's an important consideration for open organizations, too. After all, we like to think these open organizations thrive when the people inside them are equipped to take initiative to do their best work as they see fit. Shouldn't an open leader's goal be complete and total empowerment of everyone, in all parts of the organization, doing all types of work?
+
+Not necessarily.
+
+Before we jump on the employee [empowerment bandwagon][3], we should explore the important connections between empowerment and innovation. That requires placing empowerment in context.
+
+As Allison Matlack has already demonstrated, employee investment in an organization's mission and activities—and employee _autonomy_ relative to those things—[can take several forms][4], from "managed" to "enabled" to "empowered." Sometimes, complete and total empowerment _isn't_ the most desirable type of investment an open leader would like to activate in a contributor. Projects are always changing. New challenges are always arising. As a result, the _type_ or _degree_ of involvement leaders can expect in different situations is always shifting. "Managed," "enabled," and "empowered," contributors exist simultaneously and dynamically, depending on the work they're performing (and that work's desired outcomes).
+
+So before we head down to the community center to win a game of buzzword bingo, let's examine the different types of work, how they function, and how they contribute to the overall innovation of a company. Let's refine what we mean by "managed," "enabled," and "empowered" work, and discuss why we need all three.
+
+### Managed, enabled, empowered
+
+First, let's consider and define each type of work activity.
+
+"Managed" work involves tasks that are coordinated using guidance, supervision, and direction in order to achieve specific outcomes. When someone works to coordinate _every_ part of _every_ task, we colloquially call that behavior "micro-managing." "Enabled" associates have the ability to direct themselves while working within boundaries (guidance), and they have access to the materials and resources (information, people, technologies, etc.) they require to problem-solve as they see fit. Lastly, "empowered" individuals _direct themselves_ within organizational limits, have access materials and resources, and also have the authority to represent their team or organization and make decisions about work on behalf using their best judgement, based on the former elements.
+
+Most important here is the idea that these concepts are _nested_ (see Figure 1). Because each level builds on the one before it, one cannot have the full benefit of "empowered" associates without also having clear guidance and direction ("managed"), and transparency of information and resources ("enabled"). What changes from level to level is the amount of managed or enabled activity that comes before it.
+
+Let's dive more deeply into the nature of those activities and discuss the roles leaders should play in each.
+
+#### Managed work
+
+"Managed" work is just that: work activity supervised and directed to some degree. The amount of management occurring in a situation is dynamic and depends on the activity itself. For instance, in the manufacturing economy, managed work is prominent. I'll call this "widget" work, the point of which is producing a widget the same way, every time. People need to perform this work according to consistent processes with consistent, standardized outcomes.
+
+Before we jump on the employee empowerment bandwagon, we should explore the important connections between empowerment and innovation. That requires placing empowerment in context.
+
+Because this work requires consistency, it typically proceeds via explicit guidelines and policies (rules about cost, schedule, quality, quantity, process, and so on—characteristics applicable to all work to a greater or lesser degree). We can find examples of it in a variety of roles across many industries. Quite often, _any_ role in _any_ industry requires _some_ amount of this type of work. Examples include manufacturing precision machine parts, answering a customer support case within a specified timeframe for contractual reasons and with a friendly greeting, etc. In the software industry, a role that's _entirely_ like this would be a rarity, yet even these roles require some work of the "managed" type. For instance, consider the way a support engineer must respond to a case using a set of quality standards (friendliness, perhaps with a professional written tone, a branded signature line, adherence to a participat contractual agreement, usually responding within a particular time frame, etc.).
+
+"Management" is the best strategy when _work requirements include adhering to a consistent schedule, process, and quality._
+
+#### Enabled work
+
+As the amount of creativity a role requires _increases_ , the amount of directed and "managed" work we find in that role _decreases_. Guidelines get broader, processes looser, schedules lengthened (I wish!). This is because what's required to "be creative" involves other types of work (and new degrees of transparency and authority along with them). Ron McFarland explains this in [his article on adaptive leadership][5]: Many challenges challenges are ambiguous, as opposed to technical, and therefore require specific kinds of leadership.
+
+To take this idea one step further, we might say open leaders need to be _adaptive_ to how they view and implement the different kinds of work on their teams or in their organizations. "Enabling" associates means growing their skills and knowledge so they can manage themselves. The foundation for this type of activity is information—access to it, sharing it, and opportunities to independently use it to complete work activity. This is the kind of work Peter Drucker was referring to when he coined the term "knowledge work."
+
+Enabled work liberates associates from the constraints of managed work, though it still involves leaders providing considerable direction and guidance. Outcomes of this work might be familiar and normalized, but the _paths to achieving them_ are more open-ended than in managed work. Methods are more flexible and inclusive of individual preference and capability.
+
+"Enablement" is the best strategy when _objectives are well-defined and the outcomes are aligned with past outcomes and results_.
+
+#### Empowered work
+
+In "[Beyond Engagement][4]," Allison describes empowerment as a state in which employees have "access to all the information, training, tools, and connections to people and others teams that they need to do their best work, as well as a safe environment in which to do that work so they feel comfortable making their own decisions." In other words, empowerment is enablement with the opportunity for associates to _act using their own best judgment as it relates to shared understanding of team and organizational guidelines and objectives._
+
+"Empowerment" is the best strategy when _objectives and methods for achieving them are unclear and creative flexibility is necessary for defining them._ Often this work is focused on activities where problem definition and possible solutions (i.e. investigation, planning, and execution) are not well-defined.
+
+Any role in any organization involves these three types of work occurring at various moments and in various situations. No job requires just one.
+
+### Supporting innovation through managed, enabled, and empowered work
+
+The labels "managed," enabled," and "empowered" apply to different work at different times, and _all three_ are embedded in work activity at different times and in different tasks. That means leaders should be paying more attention to the work contributors are doing: the kind of work, its purpose, and its desired outcomes. We're now in a position to consider how _innovation_ factors into this equation.
+
+Frequently, people discuss the different modes of work by way of _contrast_. Most language about them connotes negativity: managed work is "the worst," while empowered work is "the best." The goal of any leadership practice should be to "move people along the scale"—to create empowered contributors.
+
+However, just as types of work are located on a continuum that doesn't include this element of negation, so too should our understanding of the types of work. Rather than seeing work as, for example " _always empowered"_ or _"always managed_ ," we should recognize that any role is a function of _of all three types of work at the same time_ , each to a varying degree. Think of the equation this way:
+
+> _Work = managed (x) + enabled (x) + empowered (x)_
+
+Note here that the more enabled and empowered the work is, the more potential there is for creativity when doing that work. This is because creativity (and the creative individual) requires information—consistently updated and "fresh" sources of information—used in conjunction with individual judgment and capacity for interpreting how to _use_ and _combine_ that information to define problems, ideate, and solve problems. Enabled and empowered work can increase inclusivity—that is, draw more closely on an individual's unique skills, perspectives, and talents because, by definition, those kinds of work are less managed and more guided. Open leadership clearly supports hiring for diversity exactly for the reason that it makes inclusivity so much richer. The ambiguity that's characteristic of the challenges we face in modern workplaces means that the work we do is ripe with potential for innovation—if we embrace risk and adapt our leadership styles to liberate it.
+
+In other words:
+
+> _Innovation = enabled (x) + empowered (x) / managed (x)_
+>
+> _The more enabled and empowered the work is, the more potential for innovation._
+
+Focusing on the importance of enabled work and empowered work is not to devalue managed work in any way. I would say that managed work creates a stable foundation on which creative (enabled and empowered) work can blossom. Imagine if all the work we did was empowered; our organizations would be completely chaotic, undefined, and ambiguous. Organizations need a degree of managed work in order to ensure some direction, some understanding of priorities, and some definition of "quality."
+
+Any role in any organization involves these three types of work occurring at various moments and in various situations. No job requires just one. As open leaders, we must recognize that work isn't an all-or-nothing, one-type-of-work-alone equation. We have to get better at understanding work in _these three different ways_ and using each one to the organization's advantage, depending on the situation.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/open-organization/19/4/managed-enabled-empowered
+
+作者:[Heidi Hess von Ludewig (Red Hat)][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/heidi-hess-von-ludewig/users/amatlack
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/BIZ_ControlNotDesirable.png?itok=nrXwSkv7
+[2]: https://www.entrepreneur.com/article/288340
+[3]: https://www.forbes.com/sites/lisaquast/2011/02/28/6-ways-to-empower-others-to-succeed/#5c860b365c62
+[4]: https://opensource.com/open-organization/18/10/understanding-engagement-and-empowerment
+[5]: https://opensource.com/open-organization/19/3/adaptive-leadership-review
diff --git a/sources/tech/20190411 Testing Small Scale Scrum in the real world.md b/sources/tech/20190411 Testing Small Scale Scrum in the real world.md
new file mode 100644
index 0000000000..0e4016435e
--- /dev/null
+++ b/sources/tech/20190411 Testing Small Scale Scrum in the real world.md
@@ -0,0 +1,57 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Testing Small Scale Scrum in the real world)
+[#]: via: (https://opensource.com/article/19/4/next-steps-small-scale-scrum)
+[#]: author: (Agnieszka Gancarczyk Leigh Griffin https://opensource.com/users/agagancarczyk/users/lgriffin/users/agagancarczyk/users/lgriffin)
+
+Testing Small Scale Scrum in the real world
+======
+We plan to test the Small Scale Scrum framework in real-world projects
+involving small teams.
+![Green graph of measurements][1]
+
+Scrum is built on the three pillars of inspection, adaptation, and transparency. Our empirical research is really the starting point in bringing scrum, one of the most popular agile implementations, to smaller teams. As presented in the diagram below, we are now taking time to inspect this framework and principles by testing them in real-world projects.
+
+![small-scale-scrum-inspection.png][2]
+
+Progress in empirical process control
+
+We plan to implement Small Scale Scrum in several upcoming projects. Our test candidates are customers with real projects where teams of one to three people will undertake short-lived projects (ranging from a few weeks to three months) with an emphasis on quality and outputs. Individual projects, such as final-year projects (over 24 weeks) that are a capstone project after four years in a degree program, are almost exclusively completed by a single person. In projects of this nature, there is an emphasis on the project plan and structure and on maximizing the outputs that a single person can achieve.
+
+We plan to metricize and publish the results of these projects and hold several retrospectives with the teams involved. We are particularly interested in metrics centered around quality, with a particular emphasis on quality in a software engineering context and management, both project management through the lifecycle with a customer and management of the day-to-day team activities and the delivery, release, handover, and signoff process.
+
+Ultimately, we will retrospectively analyze the overall framework and principles and see if the Manifesto we envisioned holds up to the reality of executing a project with small numbers. From this data, we will produce the second version of Small Scale Scrum and begin a cyclic pattern of inspecting the model in new projects and adapting it again.
+
+We want to do all of this transparently. This series of articles is one window into the data, the insights, the experiences, and the reality of running scrum for small teams whose everyday challenges include context switching, communication, and the need for a quality delivery. A follow-up series of articles is planned to examine the outputs and help develop the second edition of Small Scale Scrum entirely in the community.
+
+We also plan to attend conferences and share our knowledge with the Agile community. Our first conference will be Agile 2019 where the evolution of Small Scale Scrum will be further explored as an Experience Report. We are advising colleges and sharing our structure and approach to managing and executing final-year projects. All our outputs will be freely available in the open source way.
+
+Given the changes to recommended team sizes in the Scrum Guide, our long-term goal and vision is to have the Scrum Guide reflect that teams of one or more people occupying one or more roles within a project are capable of following scrum.
+
+* * *
+
+_Leigh Griffin will present Small Scale Scrum at Agile 2019 in Washington, August 5-9, 2019 as an Experience Report. An expanded paper will be published on[Agile Alliance][3] to accompany this._
+
+* * *
+
+* * *
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/4/next-steps-small-scale-scrum
+
+作者:[Agnieszka Gancarczyk (Red Hat)Leigh Griffin (Red Hat)][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/agagancarczyk/users/lgriffin/users/agagancarczyk/users/lgriffin
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/metrics_lead-steps-measure.png?itok=DG7rFZPk (Green graph of measurements)
+[2]: https://opensource.com/sites/default/files/small-scale-scrum-inspection.png (small-scale-scrum-inspection.png)
+[3]: https://www.agilealliance.org/
diff --git a/sources/tech/20190412 Designing posters with Krita, Scribus, and Inkscape.md b/sources/tech/20190412 Designing posters with Krita, Scribus, and Inkscape.md
new file mode 100644
index 0000000000..3136ed60a0
--- /dev/null
+++ b/sources/tech/20190412 Designing posters with Krita, Scribus, and Inkscape.md
@@ -0,0 +1,131 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Designing posters with Krita, Scribus, and Inkscape)
+[#]: via: (https://opensource.com/article/19/4/design-posters)
+[#]: author: (Raghavendra Kamath https://opensource.com/users/raghukamath/users/seilarashel/users/raghukamath/users/raghukamath/users/greg-p/users/raghukamath)
+
+Designing posters with Krita, Scribus, and Inkscape
+======
+Graphic designers can do professional work with free and open source
+tools.
+![Hand drawing out the word "code"][1]
+
+A few months ago, I was asked to design some posters for a local [Free Software Foundation][2] (FSF) event. Richard M. Stallman was [visiting][3] our country, and my friend [Abhas Abhinav][4] wanted to put up some posters and banners to promote his visit. I designed two posters for RMS's talk in Bangalore.
+
+I create my artwork with F/LOSS (free/libre open source software) tools. Although many artists successfully use free software to create artwork, I repeatedly encounter comments in discussion forums claiming that free software is not made for creative work. This article is my effort to detail the process I typically use to create my artwork and to spread awareness that one can do professional work with the help of F/LOSS tools.
+
+### Sketching some concepts
+
+After understanding Abhas' initial requirements, I sat down to visualize some concepts. I am not that great of a copywriter, so I started reading the FSF website to get some copy material. I needed to finish the project in two days time, while simultaneously working on other projects. I started sketching some rough layouts. From five layouts, I liked three. I scanned them using [Skanlite][5]; although these sketches were very rough and would need proper layout and design, they were a good base for me to work from.
+
+![Skanlite][6]
+
+![Poster sketches][7]
+
+![Poster sketch][8]
+
+I had three concepts:
+
+ * On the [FSF's website][2], I read about taking free software to new frontiers, which made me think about the idea of "conquering a summit." Free software work is also filled with adventures, in my opinion, and sometimes a task may seem like scaling a summit. So, I thought showing some mountaineers would resonate well.
+ * I also wanted to ask people to donate to FSF, so I sketched a hand giving a heart. I didn't feel any excitement in executing this idea, nevertheless, I kept it for backup in case I fell short of time.
+ * The FSF website has a hashtag for a donation program called #thankGNU, so I thought about using this as the basis of my design. Repurposing my hand visual, I replaced the heart with a bouquet of flowers that has a heart-shaped card saying #thankGNU!
+
+
+
+I know these are somewhat quick and safe concepts, but given the little time I had for the project, I went ahead with them.
+
+My design process mostly depends on the kind of look I need in the final image. I choose my software and process according to my needs. I may use one software from start to finish or combine various software packages to accomplish what I need. For this project, I used [Krita][9] and [Scribus][10], with some minimal use of [Inkscape][11].
+
+### Krita: Making the illustrations
+
+I imported my sketches into [Krita][12] and started adding more defined lines and shapes.
+
+For the first image, which has some mountaineers climbing, I used [vector layers][13] in Krita to add basic shapes and then used [Alpha Inheritance][14], which is similar to what is called Clipping Masks in Photoshop, to add texture and gradients inside the shapes. This helped me change the underlying base shape (in this case, the shape of the mountain in the first poster) anytime during the process. Krita also has a nice feature called the Reference Image tool, which lets you pin some references around your canvas (this helps a lot and saves many Alt+Tabs). Once I got the mountain how I wanted, according to the layout, I started painting the mountaineers and added more details for the ice and other features. I like grungy brushes and brushes that have a texture akin to chalks and sponges. Krita has a wide range of brushes as well as a brush engine, which makes replicating a traditional medium easier. After about 3.5 hours of painting, this image was ready for further processing.
+
+I wanted the second poster to have the feel of an old-style book illustration. So, I created the illustration with inked lines, somewhat similar to what we see in textbooks or novels. Inking in Krita is really a time saver; since it has stabilizer options, your wavy, hand-drawn lines will be smooth and crisp. I added a textured background and some minimal colors beneath the lines. It took me about three hours to do this illustration as well.
+
+![Poster][15]
+
+![Poster][16]
+
+### Scribus: Adding layout and typography
+
+Once my illustrations were ready, it was time to move on to the next part: adding text and other things to the layout. For this, I used Scribus. Both Scribus and Krita have CMYK support. In both applications, you can soft-proof your artwork and make changes according to the color profile you get from the printer. I mostly do my work in RGB and then, if required, I convert it to CMYK. Since most printers nowadays will do the color conversion, I don't think CMYK is support required, however, it's good to be able to work in CMYK with free software tools.
+
+I use open source fonts for my design work unless a client has licensed a closed font for use. A good way to browse for suitable fonts is [Google Fonts repository][17]. (I have the entire repository cloned.) Occasionally, I also browse fonts on [Font Library][18], as it also has a nice collection. I decided to use Montserrat by Julieta Ulanovsky for the posters. Placing text was very quick in Scribus; once you create a style, you can apply it to any number of paragraphs or titles. This helped me place text in both designs quickly since I didn't have to re-create the text properties.
+
+![Poster in Scribus][19]
+
+I keep two layers in Scribus. One is for the illustrations, which are linked to the original files so if I change an illustration, it will update in Scribus. The other is for text and it's layered on top of the illustration layer.
+
+### Inkscape: QR codes
+
+I used Inkscape to generate a QR code that points to the Membership page on FSF's website. To generate a QR code in Scribus, go to **Extensions > Render > Barcode > QR Code** in Inkscape's menu. The logos are also vector; because Scribus supports vector images, you can directly paste things from Inkscape into Scribus. In a way, this helps in designing CMYK-based vector graphics.
+
+![Final poster design][20]
+
+![Final poster design][21]
+
+With the designs ready, I exported them to layered PDF and sent to them to Abhas for feedback. He asked me to add FSF India's logo, which I did and sent a new PDF to him.
+
+### Printing the posters
+
+From here, Abhas took over the printing part of the process. His local printer in Bangalore printed the posters in A2 size. He was kind enough to send me some pictures of them. The prints came out well, considering I didn't even convert them to CMYK nor do any color corrections or soft proofing, as I usually do when I get the color profile from my printer. My opinion is that 100% accurate CMYK printing is just a myth; there are too many factors to consider. If I really want perfect color reproduction, I leave this job to the printer, as they know their printer well and can do the conversion.
+
+![Final poster design][22]
+
+![Final poster design][23]
+
+### Accessing the source files
+
+When we discussed the requirements for these posters, Abhas told me to release the artwork under a Creative Commons license so others can re-use, modify, and share it. I am really glad he mentioned it. Anyone who wants to poke at the files can [download them from my Nextcloud drive][24]. If you have any improvements to make, please go ahead—and do remember to share your work with everybody.
+
+Let me know what you think about this article by [emailing me][25].
+
+* * *
+
+_[This article][26] originally appeared on [Raghukamath.com][27] and is republished with the author's permission._
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/4/design-posters
+
+作者:[Raghavendra Kamath][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/raghukamath/users/seilarashel/users/raghukamath/users/raghukamath/users/greg-p/users/raghukamath
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/code_hand_draw.png?itok=dpAf--Db (Hand drawing out the word "code")
+[2]: https://www.fsf.org/
+[3]: https://rms-tour.gnu.org.in/
+[4]: https://abhas.io/
+[5]: https://kde.org/applications/graphics/skanlite/
+[6]: https://opensource.com/sites/default/files/uploads/skanlite.png (Skanlite)
+[7]: https://opensource.com/sites/default/files/uploads/sketch-01.png (Poster sketches)
+[8]: https://opensource.com/sites/default/files/uploads/sketch-02.png (Poster sketch)
+[9]: https://krita.org/
+[10]: https://www.scribus.net/
+[11]: https://inkscape.org/
+[12]: /life/16/4/nick-hamilton-linuxfest-northwest-2016-krita
+[13]: https://docs.krita.org/en/user_manual/vector_graphics.html#vector-graphics
+[14]: https://docs.krita.org/en/tutorials/clipping_masks_and_alpha_inheritance.html
+[15]: https://opensource.com/sites/default/files/uploads/poster-illo-01.jpg (Poster)
+[16]: https://opensource.com/sites/default/files/uploads/poster-illo-02.jpg (Poster)
+[17]: https://fonts.google.com/
+[18]: https://fontlibrary.org/
+[19]: https://opensource.com/sites/default/files/uploads/poster-in-scribus.png (Poster in Scribus)
+[20]: https://opensource.com/sites/default/files/uploads/final-01.png (Final poster design)
+[21]: https://opensource.com/sites/default/files/uploads/final-02.png (Final poster design)
+[22]: https://opensource.com/sites/default/files/uploads/posters-in-action-01.jpg (Final poster design)
+[23]: https://opensource.com/sites/default/files/uploads/posters-in-action-02.jpg (Final poster design)
+[24]: https://box.raghukamath.com/cloud/index.php/s/97KPnTBP4QL4iCx
+[25]: mailto:raghu@raghukamath.com?Subject=designing-posters-with-free-software
+[26]: https://raghukamath.com/journal/designing-posters-with-free-software/
+[27]: https://raghukamath.com/
diff --git a/sources/tech/20190412 How libraries are adopting open source.md b/sources/tech/20190412 How libraries are adopting open source.md
new file mode 100644
index 0000000000..2a8c8806e5
--- /dev/null
+++ b/sources/tech/20190412 How libraries are adopting open source.md
@@ -0,0 +1,71 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (How libraries are adopting open source)
+[#]: via: (https://opensource.com/article/19/4/software-libraries)
+[#]: author: (Don Watkins https://opensource.com/users/don-watkins)
+
+How libraries are adopting open source
+======
+Over the past decade, ByWater Solutions has expanded its business by
+advocating for open source software.
+![][1]
+
+Four years ago, I [interviewed Nathan Currulla][2], co-founder of ByWater Solutions, a major services and solutions provider for [Koha][3], a popular open source integrated library system (ILS). Since then, I've benefitted directly from his company's work, as my local [Chautauqua–Cattaraugus Library System][4] in western New York migrated from a proprietary software system to a [ByWater Systems][5]' Koha implementation.
+
+When I learned that ByWater is celebrating its 10th anniversary in 2019, I decided to reach out to Nathan to learn how the company has grown over the last decade. (Our remarks have been edited slightly for grammar and clarity.)
+
+**Don Watkins** : How has ByWater grown in the last 10 years?
+
+**Nathan Currulla** : Over the last 10 years, ByWater has grown by leaps and bounds. By the end of 2009, we supported five libraries with five contracts. That number shot up to 117 libraries made up of 46 contracts by the end of 2010. We now support over 1,500 libraries and 450+ contracts. We also went from having two team members to 25 in the past 10 years. The service-focused processes we have developed for migrating new libraries have been adopted by other library companies, and we have become a real market disruptor, putting pressure on other companies to provide better support and lower software subscription fees for libraries using their products. This was our goal from the outset, to change the way libraries work with the technology companies who support them, whomever they may be.
+
+Since the beginning, we have been rooted in the future, while legacy systems are still rooted in the past. Ten years ago, it was a real struggle for us to overcome the barriers presented by the fear of change in libraries and the outdated perceptions of open source in general. Now, although we still have to deal with change aversion, there are enough users to disprove any misinformation that exists regarding Koha and open source. The conversation is easier now than it ever was. That said, despite the fact that the ideals and morals held by open source are directly aligned with those of libraries, we still have a long way to go until open source technologies are the norm in this marketplace.
+
+**DW** : What kinds of libraries do you support?
+
+**NC** : Our partners are made up of a diverse set of library types. About 35% of our partners are public libraries, 35% are academic, and the remaining 30% are made up of museum, corporate, law, school, and other special library types. Because of Koha's flexibility and diverse feature set, we can successfully provide services to a variety of library types despite the current trend of consolidation in the library technology marketplace.
+
+**DW** : How does ByWater work with and help the Koha community?
+
+**NC** : We are working with the rest of the Koha community to streamline workflows and further improve the process of submitting and accepting new features into Koha. The vast majority of the community is made up of volunteers; by providing paid positions within the community, we can dedicate more time to the quality assurance and sign-off processes needed to stay competitive with other systems, both open source and proprietary. The number of new features submitted to the Koha community for each release is staggering. The more resources we have to get those features out to our users, the faster Koha can evolve and further shape the library-technology marketplace.
+
+**DW** : When we talked in 2015, ByWater had recently partnered with library solutions provider [EBSCO][6]. What initiatives are you working on now with EBSCO?
+
+**NC** : Originally, Catalyst IT of New Zealand worked with EBSCO to create the EBSCO Discovery Service (EDS) plugin that is used by many of our customers. Unlike most discovery systems that sit on top of a library's online public access catalog (OPAC), Koha's integration with EDS uses the Koha OPAC as the frontend, with EDS feeding data into the Koha interface. This allows libraries to choose which interface they prefer (EDS or Koha as the frontend) and provides a unified library service platform (LSP). EBSCO has always been a great partner and has always shown a strong willingness to contribute to the open source initiative. They understand the importance of having fewer barriers between the ILS and the libraries' other content to provide a seamless interface to the end user.
+
+Outside of Koha, ByWater is working closely with EBSCO to provide implementation, training, and support services for its [Folio LSP][7]. Folio is an open source LSP for academic libraries with the intent to provide even more seamless integration with other content providers using an extensible, open app marketplace. ByWater is developing a separate department for the implementation and ongoing support of Folio, with EBSCO providing hosting services to our mutual customers. The fact that EBSCO is investing millions in the creation of an open source platform lends further credence to the importance and validity of open source technologies in the library market.
+
+**DW** : What other projects are you supporting? How do they complement Koha?
+
+**NC** : ByWater also supports Libki, an open source, web-based kiosk and print management solution; Coral, an open source electronic resource management (ERM) solution; and Folio. Libki and Coral seamlessly integrate with Koha to provide a unified LSP. Folio may work in cooperation with Koha on some functionality, but it is too early to tell what that will specifically look like.
+
+ByWater also offers Koha Klassmates, a program that provides free installations of Koha to over 40 library schools in the US to familiarize the next generation of librarians with open source and the tools they will use daily in the workforce. We are also rolling out a program called Koha University, which will mentor computer science students in writing and submitting code to Koha, one of the largest open source projects in the world. This will give them experience in working in such an environment and provide the opportunity for their names to be listed as official Koha contributors.
+
+**DW** : What is ByWater's strategic focus over the next five years?
+
+**NC** : ByWater will continue offering top-rated support to our ever-growing customer base while leveraging new open source opportunities to disprove misinformation surrounding the use of open source solutions in libraries. We will focus on making open source the norm and educating libraries that could be taking advantage of these technologies but do not because of outdated information and perceptions.
+
+Additionally, our research and development efforts will be focused on analyzing machine learning for advanced education and support services. We also want to work closely with our partners on advancing the marketing efforts (through software) for small and large libraries to help cement their roles as community centers by marketing inventory, programs, and library events. We want to be community builders on different levels, both for our partner libraries and with the open source communities that we are involved in.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/4/software-libraries
+
+作者:[Don Watkins (Community Moderator)][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/don-watkins
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/EDUCATION_opencardcatalog.png?itok=f9PyJEe-
+[2]: https://opensource.com/business/15/5/bywater-solutions-empowering-library-tech
+[3]: http://www.koha.org/
+[4]: https://catalog.cclsny.org/
+[5]: https://bywatersolutions.com/
+[6]: https://www.ebsco.com/
+[7]: https://www.ebsco.com/products/ebsco-folio-library-services
diff --git a/sources/tech/20190412 Joe Doss- How Do You Fedora.md b/sources/tech/20190412 Joe Doss- How Do You Fedora.md
new file mode 100644
index 0000000000..bc642fb1d6
--- /dev/null
+++ b/sources/tech/20190412 Joe Doss- How Do You Fedora.md
@@ -0,0 +1,122 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Joe Doss: How Do You Fedora?)
+[#]: via: (https://fedoramagazine.org/joe-doss-how-do-you-fedora/)
+[#]: author: (Charles Profitt https://fedoramagazine.org/author/cprofitt/)
+
+Joe Doss: How Do You Fedora?
+======
+
+![Joe Doss][1]
+
+We recently interviewed Joe Doss on how he uses Fedora. This is part of a [series][2] on the Fedora Magazine. The series profiles Fedora users and how they use Fedora to get things done. Contact us on the [feedback form][3] to express your interest in becoming a interviewee.
+
+### Who is Joe Doss?
+
+Joe Doss lives in Chicago, Illinois USA and his favorite food is pizza. He is the Director of Engineering Operations and Kenna Security, Inc. Doss describes his employer this way: “Kenna uses data science to help enterprises combine their infrastructure and application vulnerability data with exploit intelligence to measure risk, predict attacks and prioritize remediation.”
+
+His first Linux distribution was Red Hat Linux 5. A friend of his showed him a computer that wasn’t running Windows. Doss thought it was just a program to install on Windows when his friend gave him a Red Hat Linux 5 install disk. “I proceeded to install this Linux ‘program’ on my Father’s PC,” he says. Luckily for Doss, his father supported his interest in computers. “I ended up totally wiping out the Windows 95 install as a result and this was how I got my first computer.”
+
+At Kenna, Doss’ group makes use of Fedora and [Ansible][4]: “We run Fedora Cloud in multiple VPC deployments in AWS and Google Compute with over 200 virtual machines. We use Ansible to automate everything we do with Fedora.”
+
+Doss brews beer at home and contributes to open source in his free time. He also has a cat named Tibby. “I rescued Tibby off the street the Hyde Park neighborhood of Chicago when she was 7 months old. She is not very smart, but she makes up for that with cuteness.” His favorite place to visit is his childhood home of Michigan, but Doss says, “anywhere with a warm beach, a cool drink, and the ocean is pretty nice too.”
+
+![Tibby the cute cat!][5]
+
+### The Fedora community
+
+Doss became involved with Fedora and the Fedora community through his job at Kenna Security. When he first joined the company they were using Ubuntu and Chef in production. There was a desire to make the infrastructure more reproducible and reliable, and he says, “I was able to greenfield our deployments with Fedora Cloud and Ansible.” This project got him involved in the Fedora Cloud release.
+
+When asked about his first impression of the Fedora community, Doss said, “Overwhelming to be honest. There is so much going on and it is hard to figure out who are the stakeholders of each part of Fedora.” Once he figured out who he needed to talk to he found the community very welcoming and super supportive.
+
+One of the ideas he had to improve the community was to unite the various projects and team under on bug tracking tool and community resource. “Pagure, Bugzilla, Github, Fedora Forums, Discourse Forums, Mailing lists… it is all over the place and hard to navigate at first.” Despite the initial complexity of becoming familiar with the Fedora Project, Doss feels it is amazingly rewarding to be involved. “It feels awesome it to be apart of a Linux distro that impacts so many people in very positive ways. You can make a difference.”
+
+Doss called out Dusty Mabe at Red Hat for helping him become involved, saying Dusty “has been an amazing mentor and resource for enabling me to contribute back to Fedora.”
+
+Doss has an interesting way of explaining to non-technical friends what he does. “Imagine changing the tires on a very large bus while it is going down the highway at 70 MPH and sometimes you need to get involved with the tire manufacturer to help make this process work well.” This metaphor helps people understand what replacing 200-plus VMs across more than five production VPCs in AWS and Google Compute with every Fedora release.
+
+Doss drew my attention to one specific incident with Fedora 29 and Vagrant. “Recently we encountered an issue where Vagrant wouldn’t set the hostname on a Fresh Fedora 29 Beta VM. This was due to Fedora 29 Cloud no longer shipping the network service stub in favor of NetworkManager. This led to me working with a colleague at Kenna Security to send a patch upstream to the Vagrant project to help their developers produce a fix for Fedora 29. Vagrant usage with Fedora is a very large part of our development cycle at Kenna, and having this broken before the Fedora 29 release would have impacted us a lot.” As Doss said, “Sometimes you need to help make the tires before they go on the bus.”
+
+Doss is the [COPR][6] Fedora, RHEL, and CentOS package maintainer for [WireGuard VPN][7]. “The CentOS repo just went over 60 thousand downloads last month which is pretty awesome.”
+
+### What Hardware?
+
+Doss uses Fedora 29 cloud in the over five VPC deployments in AWS and Google computer. At home he has a SuperMicro SYS-5019A-FTN4 1U Server that runs Fedora 29 Server with Openshift OKD installed on it. His laptops are all Lenovo. “For Laptops I use a ThinkPad T460s for work and a ThinkPad 25 at home. Both have Fedora 29 installed. ThinkPads are the best with Fedora.”
+
+### What Software?
+
+Doss used GNOME 3 as his preferred desktop on Fedora Workstation. “I use Sublime Text 3 for my text editor on the desktop or vim on servers.” For development and testing he uses Vagrant. “Ansible is what I use for any kind of automation with Fedora. I maintain an [Ansible playbook][8] for setting up my workstation.”
+
+### Ansible
+
+I asked Doss if he had advice for people trying to learn Ansible.
+
+“Start small. Automate the stuff that makes your life easier, but don’t over complicate it. [Ansible Galaxy][9] is a great resource to get things done quickly, but if you truly want to learn how to use Ansible, writing your own roles and playbooks the path I would take.
+
+“I have helped a lot of my coworkers that have joined my Operations team at Kenna get up to speed on using Ansible by buying them a copy of [Ansible for Devops][10] by Jeff Geerling. This book will give anyone new to Ansible the foundation they need to start using it everyday. #ansible on Freenode is a great resource as well along with the [official Ansible docs][11].”
+
+Doss also said, “Knowing what to automate is most likely the most difficult thing to master without over complicating things. Debugging complex playbooks and roles is a close second.”
+
+### Home lab
+
+He recommended setting up a home lab. “At Kenna and at home I use [Vagrant][12] with the [Vagrant-libvirt plugin][13] for developing Ansible roles and playbooks. You can iterate quickly to build your roles and playbooks on your laptop with your favorite editor and run _vagrant provision_ to run your playbook. Quick feedback loop and the ability to burn down your Vagrant VM and start over quickly is an amazing workflow. Below is a sample Vagrant file that I keep handy to spin up a Fedora VM to test my playbooks.”
+
+```
+-- mode: ruby --
+ vi: set ft=ruby :
+ Vagrant.configure(2) do |config|
+ config.vm.provision "shell", inline: "dnf install nfs-utils rpcbind @development-tools @ansible-node redhat-rpm-config gcc-c++ -y"
+ config.ssh.forward_agent = true
+ config.vm.define "f29", autostart: false do |f29|
+ f29.vm.box = "fedora/29-cloud-base"
+ f29.vm.hostname = "f29.example.com"
+ f29.vm.provider "libvirt" do |vm|
+ vm.memory = 2048
+ vm.cpus = 2
+ vm.driver = "kvm"
+ vm.nic_model_type = "e1000"
+ end
+config.vm.synced_folder '.', '/vagrant', disabled: true
+
+config.vm.provision "ansible" do |ansible|
+ ansible.groups = {
+ }
+ ansible.playbook = "playbooks/main.yml"
+ ansible.inventory_path = "inventory/development"
+ ansible.extra_vars = {
+ ansible_python_interpreter: "/usr/bin/python3"
+ }
+# ansible.verbose = 'vvv' end
+end
+end
+```
+
+--------------------------------------------------------------------------------
+
+via: https://fedoramagazine.org/joe-doss-how-do-you-fedora/
+
+作者:[Charles Profitt][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://fedoramagazine.org/author/cprofitt/
+[b]: https://github.com/lujun9972
+[1]: https://fedoramagazine.org/wp-content/uploads/2019/03/IMG_20181029_121944-816x345.jpg
+[2]: https://fedoramagazine.org/tag/how-do-you-fedora/
+[3]: https://fedoramagazine.org/submit-an-idea-or-tip/
+[4]: https://ansible.com
+[5]: https://fedoramagazine.org/wp-content/uploads/2019/04/IMG_20181231_110920_fixed.jpg
+[6]: https://copr.fedorainfracloud.org/coprs/jdoss/wireguard/
+[7]: https://www.wireguard.com/install/
+[8]: https://github.com/jdoss/fedora-workstation
+[9]: https://galaxy.ansible.com/
+[10]: https://www.ansiblefordevops.com/
+[11]: https://docs.ansible.com/ansible/latest/index.html
+[12]: http://www.vagrantup.com/
+[13]: https://github.com/vagrant-libvirt/vagrant-libvirt%20plugin
diff --git a/sources/tech/20190412 Linux Server Hardening Using Idempotency with Ansible- Part 2.md b/sources/tech/20190412 Linux Server Hardening Using Idempotency with Ansible- Part 2.md
new file mode 100644
index 0000000000..1e1b451500
--- /dev/null
+++ b/sources/tech/20190412 Linux Server Hardening Using Idempotency with Ansible- Part 2.md
@@ -0,0 +1,116 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Linux Server Hardening Using Idempotency with Ansible: Part 2)
+[#]: via: (https://www.linux.com/blog/linux-server-hardening-using-idempotency-ansible-part-2)
+[#]: author: (Chris Binnie https://www.linux.com/users/chrisbinnie)
+
+Linux Server Hardening Using Idempotency with Ansible: Part 2
+======
+
+![][1]
+
+[Creative Commons Zero][2]
+
+In the first part of this series, we introduced something called idempotency, which can provide the ongoing improvements to your server estate’s security posture. In this article, we’ll get a little more hands-on with a look at some specific Ansible examples.
+
+### Shopping List
+
+You will need some Ansible experience before being able to make use of the information that follows. Rather than run through the installation and operation of Ansible let’s instead look at some of the idempotency playbook’s content.
+
+As mentioned earlier there might be hundreds of individual system tweaks to make on just one type of host so we’ll only explore a few suggested Ansible tasks and how I like to structure the Ansible role responsible for the compliance and hardening. You have hopefully picked up on the fact that the devil is in the detail and you should absolutely, unequivocally, understand to as high a level of detail as possible, about the permutations of making changes to your server OS.
+
+Be aware that I will mix and match between OSs in the Ansible examples that follow. Many examples are OS agnostic but as ever you should pay close attention to the detail. Obvious changes like “apt” to “yum” for the package manager is a given.
+
+Inside a “tasks” file under our Ansible “hardening” role, or whatever you decide to name it, these named tasks represent the areas of a system with some example code to offer food for thought. In other words, each section that follows will probably be a single YAML file, such as “accounts.yml”, and each will have with varying lengths and complexity.
+
+Let’s look at some examples with ideas about what should go into each file to get you started. The contents of each file that follow are just the very beginning of a checklist and the following suggestions are far from exhaustive.
+
+#### SSH Server
+
+This is the application that almost all engineers immediately look to harden when asked to secure a server. It makes sense as SSH (the OpenSSH package in many cases) is usually only one of a few ports intentionally prised open and of course allows direct access to the command line. The level of hardening that you should adopt is debatable. I believe in tightening the daemon as much as possible without disruption and would usually make around fifteen changes to the standard OpenSSH server config file, “sshd_config”. These changes would include pulling in a MOTD banner (Message Of The Day) for legal compliance (warning of unauthorised access and prosecution), enforcing the permissions on the main SSHD files (so they can’t be tampered with by lesser-privileged users), ensuring the “root” user can’t log in directly, setting an idle session timeout and so on.
+
+Here’s a very simple Ansible example that you can repeat within other YAML files later on, focusing on enforcing file permissions on our main, critical OpenSSH server config file. Note that you should carefully check every single file that you hard-reset permissions on before doing so. This is because there are horrifyingly subtle differences between Linux distributions. Believe me when I say that it’s worth checking first.
+
+name: Hard reset permissions on sshd server file
+
+file: owner=root group=root mode=0600 path=/etc/ssh/sshd_config
+
+To check existing file permissions I prefer this natty little command for the job:
+
+```
+$ stat -c "%a %n" /etc/ssh/sshd_config
+
+644 /etc/ssh/sshd_config
+```
+
+As our “stat” command shows our Ansible snippet would be an improvement to the current permissions because 0600 means only the “root” user can read and write to that file. Other users or groups can’t even read that file which is of benefit because if we’ve made any mistakes in securing SSH’s config they can’t be discovered as easily by less-privileged users.
+
+#### System Accounts
+
+At a simple level this file might define how many users should be on a standard server. Usually a number of users who are admins have home directories with public keys copied into them. However this file might also include performing simple checks that the root user is the only system user with the all-powerful superuser UID 0; in case an attacker has altered user accounts on the system for example.
+
+#### Kernel
+
+Here’s a file that can grow arms and legs. Typically I might affect between fifteen and twenty sysctl changes on an OS which I’m satisfied won’t be disruptive to current and, all going well, any future uses of a system. These changes are again at your discretion and, at my last count (as there’s between five hundred and a thousand configurable kernel options using sysctl on a Debian/Ubuntu box) you might opt to split off these many changes up into different categories.
+
+Such categories might include network stack tuning, stopping core dumps from filling up disk space, disabling IPv6 entirely and so on. Here’s an Ansible example of logging network packets that shouldn’t been routed out onto the Internet, namely those packets using spoofed private IP Addresses, called “martians”.
+
+name: Keep track of traffic that shouldn’t be routed onto the Internet
+
+lineinfile: dest="/etc/sysctl.conf" line="{{item.network}}" state=present
+
+with_items:
+
+\- { network: 'net.ipv4.conf.all.log_martians = 1' }
+
+\- { network: 'net.ipv4.conf.default.log_martians = 1' }
+
+Pay close attention that you probably don’t want to use the file “/etc/sysctl.conf” but create a custom file under the directory “/etc/sysctl.d/” or similar. Again, check your OS’s preference, usually in the comments of the pertinent files. If you’ve not seen martian packets being enabled before then type “dmesg” (sometimes only as the “root” user) to view kernel messages and after a week or two of logging being in place you’ll probably see some traffic polluting your logs. It’s much better to know how attackers are probing your servers than not. A few log entries for reference can only be of value. When it comes to looking after servers, ignorance is certainly not bliss.
+
+#### Network
+
+As mentioned you might want to include hardening the network stack within your kernel.yml file, depending on whether there’s many entries or not, or simply for greater clarity. For your network.yml file have a think about stopping old-school broadcast attacks flooding your LAN and ICMP oddities from changing your routing in addition.
+
+#### Services
+
+Usually I would stop or start miscellaneous system services (and potentially applications) within this Ansible file. If there weren’t many services then rather than also using a “cron.yml” file specifically for “cron” hardening I’d include those here too.
+
+There’s a bundle of changes you can make around cron’s file permissions etc. If you haven’t come across it, on some OSs, there’s a “cron.deny” file for example which blacklists certain users from accessing the “crontab” command. Additionally you also have a multitude of cron directories under the “/etc” directory which need permissions enforced and improved, indeed along with the file “/etc/crontab” itself. Once again check with your OS’s current settings before altering these or “bad things” ™ might happen to your uptime.
+
+In terms of miscellaneous services being purposefully stopped and certain services, such as system logging which is imperative to a healthy and secure system, have a quick look at the Ansible below which I might put in place for syslog as an example.
+
+name: Insist syslog is definitely installed (so we can receive upstream logs)
+
+apt: name=rsyslog state=present
+
+name: Make sure that syslog starts after a reboot
+
+service: name=rsyslog state=started enabled=yes
+
+#### IPtables
+
+The venerable Netfilter which, from within the Linux kernel offers the IPtables software firewall the ability to filter network packets in an exceptionally sophisticated manner, is a must if you can enable it sensibly. If you’re confident that each of your varying flavours of servers (whether it’s a webserver, database server and so on) can use the same IPtables config then copy a file onto the filesystem via Ansible and make sure it’s always loaded up using this YAML file.
+
+Next time, we’ll wrap up our look at specific system suggestions and talk a little more about how the playbook might be used.
+
+Chris Binnie’s latest book, Linux Server Security: Hack and Defend, shows you how to make your servers invisible and perform a variety of attacks. You can find out more about DevSecOps, containers and Linux security on his website: [https://www.devsecops.cc][3]
+
+--------------------------------------------------------------------------------
+
+via: https://www.linux.com/blog/linux-server-hardening-using-idempotency-ansible-part-2
+
+作者:[Chris Binnie][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.linux.com/users/chrisbinnie
+[b]: https://github.com/lujun9972
+[1]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/artificial-intelligence-3382507_1280.jpg?itok=PHazitpd
+[2]: /LICENSES/CATEGORY/CREATIVE-COMMONS-ZERO
+[3]: https://www.devsecops.cc/
diff --git a/sources/tech/20190414 Working with Microsoft Exchange from your Linux Desktop.md b/sources/tech/20190414 Working with Microsoft Exchange from your Linux Desktop.md
new file mode 100644
index 0000000000..657464affb
--- /dev/null
+++ b/sources/tech/20190414 Working with Microsoft Exchange from your Linux Desktop.md
@@ -0,0 +1,100 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Working with Microsoft Exchange from your Linux Desktop)
+[#]: via: (https://itsfoss.com/microsoft-exchange-linux-desktop/)
+[#]: author: (It's FOSS Community https://itsfoss.com/author/itsfoss/)
+
+Working with Microsoft Exchange from your Linux Desktop
+======
+
+Recently I had to do some research (and even magic) to be able to work on my Ubuntu Desktop with Exchange Mail Server from my current employer. I am going to share my experience with you.
+
+### Microsoft Exchange on Linux desktop
+
+I guess many readers might feel confused, I mean, it shouldn’t be that hard if you simply use [Thunderbird][1] or any other [Linux email client][2] with your Office365 Exchange Account, right? Well, for better or for worse it was not this case for me.
+
+Here’s my ordeal and what I did to make Microsoft Exchange work on my Linux desktop.
+
+![][3]
+
+#### The initial problem, no Office365
+
+The first problem encountered in my situation was that we don’t currently use Office365 like probably majority of current people does for hosting their Exchange accounts, we currently use an on premises Exchange server and a very old version of it.
+
+So, this means I didn’t have the luxury of using automatic configuration that comes in majority of email clients to simply connect to Office365.
+
+#### Webmail is always an option… right?
+
+Short answer is yes, however, as I mentioned we are using Exchange 2010, so the webmail interface is not only outdated, it even won’t allow you to have a decent email signature as it has a limit of characters in webmail configuration, so I needed to use an email client if I really wanted to be able to use the email the way I needed.
+
+#### Another problem, I am picky for my email client
+
+I am a regular Google user, I have been using GMail for the past 14 years as my personal email, so I really like how it looks and works. I actually use the webmail as I don’t like to be tied to my email client or even my computer device, if something happens and I need to switch to a newer device I don’t want to have to copy things over, I just want things to be there waiting for me to use them.
+
+This leads me not liking Thunderbird, K-9 or Evolution Mail clients. All of these are capable of being connected to Exchange servers (one way or the other) but again, they don’t meet the standard of a clean, easy and modern GUI I wanted plus they couldn’t even manage my Exchange calendar well (which was a real deal breaker for me).
+
+#### Found some options as email clients!
+
+After some other research I found there were a couple of options for email clients that I could use and that actually would work the way I expected.
+
+These were: [Hiri][4], which had a very modern and innovative user interface and had Exchange Server capabilities and there also was [Mailspring][5] which is a fork of an old foe ([Nylas Mail][6]) and which was my real favorite.
+
+However, Mailspring couldn’t connect directly to an Exchange server (using Exchange’s protocol) unless you use Office365, it required [IMAP][7] (another luxury!) and the IT department at my office was reluctant to activate IMAP for “security reasons”.
+
+Hiri is a good option but it’s not free.
+
+#### No IMAP, no Office365, game over? Not yet!
+
+I have to confess, I was really ready to give up and simply use the old webmail and learn to live with it, however, I gave a last shot on my research capabilities and I found a possible solution: what if I had a way to put a “man in the middle”? What if I was able to make the IMAP to run locally on my computer while my computer simply pull the emails via Exchange protocol? It was a long shot but, could work…
+
+So I started looking here and there and found this [DavMail][8], which works as a Gateway to “talk” with an Exchange server and then locally provide you whatever you need in order to use it. Basically it was like a “translator” between by computer and the Exchange and then provided me with whatever service I needed.
+
+![DavMail Settings][9]
+
+So basically I only had to give DavMail my Exchange Server’s URL (even OWA URL) and set whatever ports I wanted on my local computer to be the new ports where my email client could connect.
+
+This way I was free to basically use ANY client I wanted, at least any client which was capable of using IMAP protocol would work, as long as I configure the same ports I set up as my local ports.
+
+![Mailspring working my office’s on premises Exchange. Information has been blurred due to non-disclosure agreement at my office.][10]
+
+And that was it! I was able to use MailSpring (which is my preferred choice for email client) under my non favorable conditions.
+
+#### Bonus point: this is a multi-platform solution!
+
+What’s best is that this solution will work for any platform! So if you have the same problem while using Windows or macOS, DavMail has a version for all tastes!
+
+![avatar][11]
+
+![avatar][11]
+
+### Helder Martins
+
+Systems Engineer, technology evangelist, Ubuntu user, Linux enthusiast, father and husband.
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/microsoft-exchange-linux-desktop/
+
+作者:[It's FOSS Community][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/itsfoss/
+[b]: https://github.com/lujun9972
+[1]: https://www.thunderbird.net/en-US/
+[2]: https://itsfoss.com/best-email-clients-linux/
+[3]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/04/microsoft-exchange-linux-desktop.png?resize=800%2C450&ssl=1
+[4]: https://www.hiri.com/
+[5]: https://getmailspring.com/
+[6]: https://itsfoss.com/n1-open-source-email-client/
+[7]: https://en.wikipedia.org/wiki/Internet_Message_Access_Protocol
+[8]: http://davmail.sourceforge.net/
+[9]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/04/davmail-exchange-settings.png?resize=800%2C597&ssl=1
+[10]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/04/davmail-exchange-settings-1.jpg?ssl=1
+[11]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/04/helder-martins-1.jpeg?ssl=1
diff --git a/sources/tech/20190415 Blender short film, new license for Chef, ethics in open source, and more news.md b/sources/tech/20190415 Blender short film, new license for Chef, ethics in open source, and more news.md
new file mode 100644
index 0000000000..f33d614f86
--- /dev/null
+++ b/sources/tech/20190415 Blender short film, new license for Chef, ethics in open source, and more news.md
@@ -0,0 +1,75 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Blender short film, new license for Chef, ethics in open source, and more news)
+[#]: via: (https://opensource.com/article/15/4/news-april-15)
+[#]: author: (Joshua Allen Holm https://opensource.com/users/holmja)
+
+Blender short film, new license for Chef, ethics in open source, and more news
+======
+Here are some of the biggest headlines in open source in the last two
+weeks
+![][1]
+
+In this edition of our open source news roundup, we take a look at the 12th Blender short film, Chef shifts away from open core toward a 100% open source license, SuperTuxKart's latest release candidate with online multiplayer support, and more.
+
+### Blender Animation Studio releases Spring
+
+[Spring][2], the latest short film from [Blender Animation Studio][3], premiered on April 4th. The [press release on Blender.org][4] describes _Spring_ as "the story of a shepherd girl and her dog, who face ancient spirits in order to continue the cycle of life." The development version of Blender 2.80, as well as other open source tools, were used to create this animated short film. The character and asset files for the film are available from [Blender Cloud][5], and tutorials, walkthroughs, and other instructional material are coming soon.
+
+### The importance of ethics in open source
+
+Reuven M. Lerner, writing for [Linux Journal][6], shares his thoughts about need for teaching programmers about ethics in an article titled [Open Source Is Winning, and Now It's Time for People to Win Too][7]. Part retrospective looking back at the history of open source and part call to action for moving forward, Lerner's article discusses many issues relevant to open source beyond just coding. He argues that when we teach kids about open source "[w]e also need to inform them of the societal parts of their work, and the huge influence and power that today's programmers have." He continues by stating "It's sometimes okay—and even preferable—for a company to make less money deliberately, when the alternative would be to do things that are inappropriate or illegal." Overall a very thought-provoking piece, Lerner makes a solid case for making sure to remember that the open source movement is about more than free code.
+
+### Chef transitions from open core to open source
+
+Chef, the company behind the well-known DevOps automation tool, [announced][8] that they will be release 100% of their software as open source under an Apache 2.0 license. This move marks a departure from their current [open core model][9]. Given a tendency for companies to try to move in the opposite direction, Chef's move is a big one. By operating under a fully open source model Chef builds a better, stronger relationship with the community, and the community benefits from full access to all the source code. Even developers of competing projects (and the commercial projects based on those products) benefit from being able to learn from Chef's code, as Chef can do from its open source competitors, which is one of the greatest advantages of open source; the best ideas get to win and business relationships are built around trust and quality of service, not proprietary secrets. For a more detailed look at this development, read Steven J. Vaughan-Nichols's [article for ZDNet][10].
+
+### SuperTuxKart releases version 0.10 RC1 for testing
+
+SuperTuxKart, the open source Mario Kart clone featuring open source mascots, is getting very close to releasing a version that supports online multi-player. On April 5th, the SuperTuxKart blog announced the release of [SuperTuxKart 0.10 Release Candidate 1][11], which needs testing before the final release. Users who want to help test the online and LAN multiplayer options can [download the game from SourceForge][12]. In addition to the new online and LAN features, SuperTuxKart 0.10 features a couple new tracks to race on; Ravenbridge Mansion replaces the old Mansion track, and Black Forest, which was an add-on track in earlier versions, is now part of the official track set.
+
+#### In other news
+
+ * [My code is your code: Embracing the power of open sourcing][13]
+ * [FOSS means kids can have a big impact][14]
+ * [Open-source textbooks lighten students’ financial load][15]
+ * [Developing the ultimate open source radio control transmitter][16]
+ * [How does open source tech transform Government?][17]
+
+
+
+_Thanks, as always, to Opensource.com staff members and moderators for their help this week._
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/15/4/news-april-15
+
+作者:[Joshua Allen Holm (Community Moderator)][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/holmja
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/weekly_news_roundup_tv.png?itok=B6PM4S1i
+[2]: https://www.youtube.com/watch?v=WhWc3b3KhnY (Spring)
+[3]: https://blender.studio/ (Blender Animation Studio)
+[4]: https://www.blender.org/press/spring-open-movie/ (Spring Open Movie)
+[5]: https://cloud.blender.org/p/spring/ (Spring on Blender Cloud)
+[6]: https://www.linuxjournal.com/ (Linux Journal)
+[7]: https://www.linuxjournal.com/content/open-source-winning-and-now-its-time-people-win-too (Open Source Is Winning, and Now It's Time for People to Win Too)
+[8]: https://blog.chef.io/2019/04/02/chef-software-announces-the-enterprise-automation-stack/ (Introducing the New Chef: 100% Open, Always)
+[9]: https://en.wikipedia.org/wiki/Open-core_model (Wikipedia: Open-core model)
+[10]: https://www.zdnet.com/article/leading-devops-program-chef-goes-all-in-with-open-source/ (Leading DevOps program Chef goes all in with open source)
+[11]: http://blog.supertuxkart.net/2019/04/supertuxkart-010-release-candidate-1.html (SuperTuxKart 0.10 Release Candidate 1 Released)
+[12]: https://sourceforge.net/projects/supertuxkart/files/SuperTuxKart/0.10-rc1/ (SourceForge: SuperTuxKart)
+[13]: https://www.forbes.com/sites/forbestechcouncil/2019/04/10/my-code-is-your-code-embracing-the-power-of-open-sourcing/ (My code is your code: Embracing the power of open sourcing)
+[14]: https://www.linuxjournal.com/content/foss-means-kids-can-have-big-impact (FOSS means kids can have a big impact)
+[15]: https://www.schoolnewsnetwork.org/2019/04/09/open-source-textbooks-lighten-students-financial-load/ (Open-source textbooks lighten students’ financial load)
+[16]: https://hackaday.com/2019/04/03/developing-the-ultimate-open-source-radio-control-transmitter/ (Developing the ultimate open source radio control transmitter)
+[17]: https://www.openaccessgovernment.org/open-source-tech-transform/62059/ (How does open source tech transform Government?)
diff --git a/sources/tech/20190416 Can schools be agile.md b/sources/tech/20190416 Can schools be agile.md
new file mode 100644
index 0000000000..065b313c05
--- /dev/null
+++ b/sources/tech/20190416 Can schools be agile.md
@@ -0,0 +1,79 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Can schools be agile?)
+[#]: via: (https://opensource.com/open-organization/19/4/education-culture-agile)
+[#]: author: (Ben Owens https://opensource.com/users/engineerteacher/users/ke4qqq/users/n8chz/users/don-watkins)
+
+Can schools be agile?
+======
+We certainly don't need to run our schools like businesses—but we could
+benefit from educational organizations more focused on continuous
+improvement.
+![][1]
+
+We've all had those _deja vu_ moments that make us think "I've seen this before!" I experienced them often in the late 1980s, when I first began my career in industry. I was caught up in a wave of organizational change, where the U.S. manufacturing sector was experimenting with various models that asked leaders, managers, and engineers like me to rethink how we approached things like quality, cost, innovation, and shareholder value. It seems as if every year (sometimes, more frequently) we'd study yet another book to identify the "best practices" necessary for making us leaner, flatter, more nimble, and more responsive to the needs of the customer.
+
+Many of the approaches were so transformational that their core principles still resonate with me today. Specific ideas and methods from thought leaders such as John Kotter, Peter Drucker, Edwards Demming, and Peter Senge were truly pivotal for our ability to rethink our work, as were the adoption of process improvement methods such as Six Sigma and those embodied in the "Toyota Way."
+
+But others seemed to simply repackage these same ideas with a sexy new twist—hence my _deja vu_.
+
+And yet when I began my career as a teacher, I encountered a context that _didn't_ give me that feeling: education. In fact, I was surprised to find that "getting better all the time" was _not_ the same high priority in my new profession that it was in my old one (particularly at the level of my role as a classroom teacher).
+
+Why aren't more educational organizations working to create cultures of continuous improvement? I can think of several reasons, but let me address two.
+
+### Widgets no more
+
+The first barrier to a culture of continuous improvement is education's general reticence to look at other professions for ideas it can adapt and adopt—especially ideas from the business community. The second is education's predominant leadership model, which remains predominantly top-down and rooted in hierarchy. Conversations about systemic, continuous improvement tend to be the purview of a relatively small group of school or district leaders: principals, assistant principals, superintendents, and the like. But widespread organizational culture change can't occur if only one small group is involved in it.
+
+Before unpacking these points a bit further, I'd like to emphasize that there are certainly exceptions to the above generalization (many I have seen first hand) and that there are two basic assumptions that I think any education stakeholder should be able to agree with:
+
+ 1. Continuous improvement must be an essential mindset for _anyone_ involved in the work of providing high-quality and equitable teaching and learning systems for students, and
+ 2. Decisions by leaders of our schools will more greatly benefit students and the communities in which they live when those decisions are informed and influenced by those who work closest with students.
+
+
+
+So why a tendency to ignore (or be outright hostile toward) ideas that come from outside the education space?
+
+I, for example, have certainly faced criticism in the past for suggesting that we look to other professions for ideas and inspiration that can help us better meet the needs of students. A common refrain is something like: "You're trying to treat our students like widgets!" But how could our students be treated any more like widgets than they already are? They matriculate through school in age-based cohorts, going from siloed class to class each day by the sound of a shrill bell, and receive grades based on arbitrary tests that emphasize sameness over individuality.
+
+What I'm advocating is a clear-eyed and objective look at any idea from any sector with potential to help us better meet the needs of individual students, not that we somehow run our schools like businesses.
+
+It may be news to many inside of education, but widgets—abstract units of production that evoke the idea of assembly line standardization—are not a significant part of the modern manufacturing sector. Thanks to the culture of continuous improvement described above, modern, advanced manufacturing delivers just what the individual customer wants, at a competitive price, exactly when she wants it. If we adapted this model to our schools, teachers would be more likely to collaborate and constantly refine their unique paths of growth for all students based on just-in-time needs and desires—regardless of the time, subject, or any other traditional norm.
+
+What I'm advocating is a clear-eyed and objective look at any idea from any sector with potential to help us better meet the needs of individual students, not that we somehow run our schools like businesses. In order for this to happen effectively, however, we need to scrutinize a leadership structure that has frankly remained stagnant for over 100 years.
+
+### Toward continuous improvement
+
+While I certainly appreciate the argument that education is an animal significantly different from other professions, I also believe that rethinking an organizational and leadership structure is an applicable exercise for any entity wanting to remain responsible (and responsive) to the needs of its stakeholders. Most other professions have taken a hard look at their traditional, closed, hierarchical structures and moved to ones that encourage collective autonomy per shared goals of excellence—organizational elements essential for continuous improvement. It's time our schools and districts do the same by expanding their horizon beyond sources that, while well intended, are developed from a lens of the current paradigm.
+
+Not surprisingly, a go-to resource I recommend to any school wanting to begin or accelerate this process is _The Open Organization_ by Jim Whitehurst. Not only does the book provide a window into how educators can create more open, inclusive leadership structures—where mutual respect enables nimble decisions to be made per real-time data—but it does so in language easily adaptable to the rather strange lexicon that's second nature to educators. Open organization thinking provides pragmatic ways any organization can empower members to be more open: sharing ideas and resources, embracing a culture of collaborative participation as a top priority, developing an innovation mindset through rapid prototyping, valuing ideas based on merit rather than the rank of the person proposing them, and building a strong sense of community that's baked into the organization's DNA. Such an open organization crowd-sources ideas from both inside and outside its formal structure and creates the type of environment that enables localized, student-centered innovations to thrive.
+
+We simply can't rely on solutions and practices we developed in a factory-model paradigm.
+
+Here's the bottom line: Essential to a culture of continuous improvement is recognizing that what we've done in the past may not be suitable in a rapidly changing future. For educators, that means we simply can't rely on solutions and practices we developed in a factory-model paradigm. We must acknowledge countless examples of best practices from other sectors—such as non-profits, the military, the medical profession, and yes, even business—that can at least _inform_ how we rethink what we do in the best interest of students. By moving beyond the traditionally sanctioned "eduspeak" world, we create opportunities for considering perspectives. We can better see the forest for the trees, taking a more objective look at the problems we face, as well as acknowledging what we do very well.
+
+Intentionally considering ideas from all sources—from first year classroom teachers to the latest NYT Business & Management Leadership bestseller—offers us a powerful way to engage existing talent within our schools to help overcome the institutionalized inertia that has prevented more positive change from taking hold in our schools and districts.
+
+Relentlessly pursuing methods of continuous improvement should not be a behavior confined to organizations fighting to remain competitive in a global, innovation economy, nor should it be left to a select few charged with the operation of our schools. When everyone in an organization is always thinking about what they can do differently _today_ to improve what they did _yesterday_ , then you have an organization living a culture of excellence. That's the kind of radically collaborative and innovative culture we should especially expect for organizations focused on changing the lives of young people.
+
+I'm eagerly awaiting the day when I enter a school, recognize that spirit, and smile to myself as I say, "I've seen this before."
+
+Experiential learning using open source is fraught with opportunities for disaster.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/open-organization/19/4/education-culture-agile
+
+作者:[Ben Owens][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/engineerteacher/users/ke4qqq/users/n8chz/users/don-watkins
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/EDUCATION_network.png?itok=ySEHuAQ8
diff --git a/sources/tech/20190416 Linux Server Hardening Using Idempotency with Ansible- Part 3.md b/sources/tech/20190416 Linux Server Hardening Using Idempotency with Ansible- Part 3.md
new file mode 100644
index 0000000000..50f4981c08
--- /dev/null
+++ b/sources/tech/20190416 Linux Server Hardening Using Idempotency with Ansible- Part 3.md
@@ -0,0 +1,118 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Linux Server Hardening Using Idempotency with Ansible: Part 3)
+[#]: via: (https://www.linux.com/blog/linux-server-hardening-using-idempotency-ansible-part-3)
+[#]: author: (Chris Binnie https://www.linux.com/users/chrisbinnie)
+
+Linux Server Hardening Using Idempotency with Ansible: Part 3
+======
+
+![][1]
+
+[Creative Commons Zero][2]
+
+In the previous articles, we introduced idempotency as a way to approach your server’s security posture and looked at some specific Ansible examples, including the kernel, system accounts, and IPtables. In this final article of the series, we’ll look at a few more server-hardening examples and talk a little more about how the idempotency playbook might be used.
+
+#### **Time**
+
+Due to its reduced functionality, and therefore attack surface, the preference amongst a number of OSs has been to introduce “chronyd” over “ntpd”. If you’re new to “chrony” then fret not. It’s still using the NTP (Network Time Protocol) that we all know and love but in a more secure fashion.
+
+The first thing I do with Ansible within the “chrony.conf” file is alter the “bind address” and if my memory serves there’s also a “command port” option. These config options allow Chrony to only listen on the localhost. In other words you are still syncing as usual with other upstream time servers (just as NTP does) but no remote servers can query your time services; only your local machine has access.
+
+There’s more information on the “bindcmdaddress 127.0.0.1” and “cmdport 0” on this Chrony page () under “2.5. How can I make chronyd more secure?” which you should read for clarity. This premise behind the comment on that page is a good idea: “you can disable the internet command sockets completely by adding cmdport 0 to the configuration file”.
+
+Additionally I would also focus on securing the file permissions for Chrony and insist that the service starts as expected just like the syslog config above. Otherwise make sure that your time sources are sane, have a degree of redundancy with multiple sources set up and then copy the whole config file over using Ansible.
+
+#### **Logging**
+
+You can clearly affect the level of detail included in the logs from a number pieces of software on a server. Thinking back to what we’ve looked at in relation to syslog already you can also tweak that application’s config using Ansible to your needs and then use the example Ansible above in addition.
+
+#### **PAM**
+
+Apparently PAM (Pluggable Authentication Modules) has been a part of Linux since 1997. It is undeniably useful (a common use is that you can force SSH to use it for password logins, as per the SSH YAML file above). It is extensible, sophisticated and can perform useful functions such as preventing brute force attacks on password logins using a clever rate limiting system. The syntax varies a little between OSes but if you have the time then getting PAM working well (even if you’re only using SSH keys and not passwords for your logins) is a worthwhile effort. Attackers like their own users on a system with lots of usernames, something innocuous such as “webadmin” or similar might be easy to miss on a server, and PAM can help you out in this respect.
+
+#### **Auditd**
+
+We’ve looked at logging a little already but what about capturing every “system call” that a kernel makes. The Linux kernel is a super-busy component of any system and logging almost every single thing that a system does is an excellent way of providing post-event forensics. This article will hopefully shed some light on where to begin: . Note the comments in that article about performance, there’s little point in paying extra for compute and disk IO resource because you’ve misconfigured your logging so spend some time getting it correct would be my advice.
+
+For concerns over disk space I will usually change a few lines in the file “/etc/audit/auditd.conf” in order to prevent there firstly being too many log files created and secondly logs that grow very large without being rotated. This is also on the proviso that logs are being ingested upstream via another mechanism too. Clearly the files permissions and the service starting are also the basics you need to cover here too. Generally file permissions for auditd are tight as it’s a “root” oriented service so there’s less changes needed here generally.
+
+#### **Filesystems**
+
+With a little reading you can discover which filesystems that are made available to your OS by default. You should disable these (at the “modprode.d” file level) with Ansible to prevent weird and wonderful things being attached unwittingly to your servers. You are reducing the attack surface with this approach. The Ansible might look something like this below for example.
+
+```
+name: Make sure filesystems which are not needed are forced as off
+
+lineinfile: dest="/etcmodprobe.d/harden.conf" line='install squashfs /bin/true' state=present
+```
+
+#### **SELinux**
+
+The old, but sometimes avoided due to complexity, security favourite, SELinux, should be set to “enforcing” mode. Or, at the every least, set to log sensibly using “permissive” mode. Permissive mode will at least fill your auditd logs up with any correct rule matches nicely. In terms of what Ansible looks like it’s simple and is along these lines:
+
+```
+name: Configure SElinux to be running in permissive mode
+
+replace: path=”/etc/selinux/config” regexp='SELINUX=disabled' replace='SELINUX=permissive'
+```
+
+#### **Packages**
+
+Needless to say the compliance hardening playbook is also a good place to upgrade all the packages (with some selective exclusions) on the system. Pay attention to the section relating to reboots and idempotency in a moment however. With other mechanisms in place you might not want to update packages here but instead as per the Automation Documents article mentioned in a moment.
+
+### **Idempotency**
+
+Now we’ve run through some of the aspects you would want to look at when hardening on a server, let’s think a little more about how the playbook might be used.
+
+When it comes to cloud platforms most of my professional work has been on AWS and therefore, more often than not, a fresh AMI is launched and then a playbook is run over the top of it. There’s a mountain of detail in one way of doing that in this article () which you may be pleased to discover accommodates a mechanism to spawn a script or playbook.
+
+It is important to note, when it comes to idempotency, that it may take a little more effort initially to get your head around the logic involved in being able to re-run Ansible repeatedly without disturbing the required status quo of your server estate.
+
+One thing to be absolutely certain of however (barring rare edge cases) is that after you apply your hardening for the very first time, on a new AMI or server build, you will require a reboot. This is an important element due to a number of system facets not being altered correctly without a reboot. These include applying kernel changes so alterations become live, writing auditd rules as immutable config and also starting or stopping services to improve the security posture.
+
+Note though that you’re probably not going to want to execute all plays in a playbook every twenty or thirty minutes, such as updating all packages and stopping and restarting key customer-facing services. As a result you should factor the logic into your Ansible so that some tasks only run once initially and then maybe write a “completed” placeholder file to the filesystem afterwards for referencing. There’s a million different ways of achieving a status checker.
+
+The nice thing about Ansible is that the logic for rerunning playbooks is implicit and unlike shell scripts which for this type of task can be arduous to code the logic into. Sometimes, such as updating the GRUB bootloader for example, trying to guess the many permutations of a system change can be painful.
+
+### **Bedtime Reading**
+
+I still think that you can’t beat trial and error when it comes to computing. Experience is valued for good reason.
+
+Be warned that you’ll find contradictory advice sometimes from the vast array of online resources in this area. Advice differs probably because of the different use cases. The only way to harden the varying flavours of OS to my mind is via a bespoke approach. This is thanks to the environments that servers are used within and the requirements of the security framework or standard that an organisation needs to meet.
+
+For OS hardening details you can check with resources such as the NSA ([https://www.nsa.gov][3]), the Cloud Security Alliance (), proprietary training organisations such as GIAC ([https://www.giac.org][4]) who offer resources (), the diverse CIS Benchmarks ([https://www.cisecurity.org][5]) for industry consensus-based benchmarking, the SANS Institute (), NIST’s Computer Security Research ([https://csrc.nist.gov][6]) and of course print media too.
+
+### **Conclusion**
+
+Hopefully, you can see how powerful an idempotent server infrastructure is and are tempted to try it for yourself.
+
+The ever-present threat of APT (Advanced Persistent Threat) attacks on infrastructure, where a successful attacker will sit silently monitoring events and then when it’s opportune infiltrate deeper into an estate, makes this type of configuration highly valuable.
+
+The amount of detail that goes into the tests and configuration changes is key to the value that such an approach will bring to an organisation. Like the tests in a CI/CD pipeline they’re only as ever as good as their coverage.
+
+Chris Binnie’s latest book, Linux Server Security: Hack and Defend, shows you how to make your servers invisible and perform a variety of attacks. You can find out more about DevSecOps, containers and Linux security on his website: [https://www.devsecops.cc][7]
+
+--------------------------------------------------------------------------------
+
+via: https://www.linux.com/blog/linux-server-hardening-using-idempotency-ansible-part-3
+
+作者:[Chris Binnie][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.linux.com/users/chrisbinnie
+[b]: https://github.com/lujun9972
+[1]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/tech-1495181_1280.jpg?itok=5WcwApNN
+[2]: /LICENSES/CATEGORY/CREATIVE-COMMONS-ZERO
+[3]: https://www.nsa.gov/
+[4]: https://www.giac.org/
+[5]: https://www.cisecurity.org/
+[6]: https://csrc.nist.gov/
+[7]: https://www.devsecops.cc/
diff --git a/sources/tech/20190417 How to use Ansible to document procedures.md b/sources/tech/20190417 How to use Ansible to document procedures.md
new file mode 100644
index 0000000000..51eddfe92c
--- /dev/null
+++ b/sources/tech/20190417 How to use Ansible to document procedures.md
@@ -0,0 +1,132 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (How to use Ansible to document procedures)
+[#]: via: (https://opensource.com/article/19/4/ansible-procedures)
+[#]: author: (Marco Bravo https://opensource.com/users/marcobravo/users/shawnhcorey/users/marcobravo)
+
+How to use Ansible to document procedures
+======
+In Ansible, the documentation is the playbook, so the documentation
+naturally evolves alongside the code
+![][1]
+
+> "Documentation is a love letter that you write to your future self." —[Damian Conway][2]
+
+I use [Ansible][3] as my personal notebook for documenting coding procedures—both the ones I use often and the ones I rarely use. This process facilitates my work and reduces the time it takes to do repetitive tasks, the ones where specific commands in a certain sequence are executed to accomplish a specific result.
+
+By documenting with Ansible, I don't need to memorize all the parameters for each command or all the steps involved with a specific procedure, and it's easy to share the details with my teammates.
+
+Traditional approaches for documentation, like wikis or shared drives, are useful for general documents, but inevitably they become outdated and can't keep pace with the rapid changes in infrastructure and environments. For specific procedures, it's better to document directly into the code using a tool like Ansible.
+
+### Ansible's advantages
+
+Before we begin, let's recap some basic Ansible concepts: a _playbook_ is a high-level organization of procedures using plays; _plays_ are specific procedures for a group of hosts; _tasks_ are specific actions, _modules_ are units of code, and _inventory_ is a list of managed nodes.
+
+Ansible's great advantage is that the documentation is the playbook itself, so it evolves with and is contained inside the code. This is not only useful; it's also practical because, more than just documenting solutions with Ansible, you're also coding a playbook that permits you to write your procedures and commands, reproduce them, and automate them. This way, you can look back in six months and be able to quickly understand and execute them again.
+
+It's true that this way of resolving problems could take more time at first, but it will definitely save a lot of time in the long term. By being courageous and disciplined to adopt these new habits, you will improve your skills in each iteration.
+
+Following are some other important elements and support tools that will facilitate your process.
+
+### Use source code control
+
+> "First do it, then do it right, then do it better." —[Addy Osmani][4]
+
+When working with Ansible playbooks, it's very important to implement a playbook-as-code strategy. A good way to accomplish this is to use a source code control repository that will permit to you start with a simple solution and iterate to improve it.
+
+A source code control repository provides many advantages as you collaborate with other developers, restore previous versions, and back up your work. But in creating documentation, its main advantages are that you get traceability about what are you doing and can iterate around small changes to improve your work.
+
+The most popular source control system is [Git][5], but there are [others][6] like [Subversion][7], [Bazaar][8], [BitKeeper][9], and [Mercurial][10].
+
+### Keep idempotency in mind
+
+In infrastructure automation, idempotency means to reach a specific end state that remains the same, no matter how many times the process is executed. So when you are preparing to automate your procedures, keep the desired result in mind and write scripts and commands that will achieve them consistently.
+
+This concept exists in most Ansible modules because after you specify the desired final state, Ansible will accomplish it. For instance, there are modules for creating filesystems, modifying iptables, and managing cron entries. All of these modules are idempotent by default, so you should give them preference.
+
+If you are using some of the lower-level modules, like command or shell, or developing your own modules, be careful to write code that will be idempotent and safe to repeat many times to get the same result.
+
+The idempotency concept is important when you prepare procedures for automation because it permits you to evaluate several scenarios and incorporate the ones that will make your code safer and create an abstraction level that points to the desired result.
+
+### Test it!
+
+Testing your deployment workflow creates fewer surprises when your code arrives in production. Ansible's belief that you shouldn't need another framework to validate basic things in your infrastructure is true. But your focus should be on application testing, not infrastructure testing.
+
+Ansible's documentation offers several [testing strategies for your procedures][11]. For testing Ansible playbooks, you can use [Molecule][12], which is designed to aid in the development and testing of Ansible roles. Molecule supports testing with multiple instances, operating systems/distributions, virtualization providers, test frameworks, and testing scenarios. This means Molecule will run through all the testing steps: linting verifications, checking playbook syntax, building Docker environments, running playbooks against Docker environments, running the playbook again to verify idempotence, and cleaning everything up afterward. [Testing Ansible roles with Molecule][13] is a good introduction to Molecule.
+
+### Run it!
+
+Running Ansible playbooks can create logs that are formatted in an unfriendly and difficult-to-read way. In those cases, the Ansible Run Analysis (ARA) is a great complementary tool for running Ansible playbooks, as it provides an intuitive interface to browse them. Read [Analyzing Ansible runs using ARA][14] for more information.
+
+Remember to protect your passwords and other sensitive information with [Ansible Vault][15]. Vault can encrypt binary files, **group_vars** , **host_vars** , **include_vars** , and **var_files**. But this encrypted data is exposed when you run a playbook in **-v** (verbose) mode, so it's a good idea to combine it with the keyword **no_log** set to **true** to hide any task's information, as it indicates that the value of the argument should not be logged or displayed.
+
+### A basic example
+
+Do you need to connect to a server to produce a report file and copy the file to another server? Or do you need a lot of specific parameters to connect? Maybe you're not sure where to store the parameters. Or are your procedures are taking a long time because you need to collect all the parameters from several sources?
+
+Suppose you have a network topology with some restrictions and you need to copy a file from a server that you can access ( **server1** ) to another server that is managed by a third party ( **server2** ). The parameters to connect are:
+
+
+```
+Source server: server1
+Target server: server2
+Port: 2202
+User: transfers
+SSH Key: transfers_key
+File to copy: file.log
+Remote directory: /logs/server1/
+```
+
+In this scenario, you need to connect to **server1** and copy the file using these parameters. You can accomplish this using a one-line command:
+
+
+```
+`ssh server1 "scp -P 2202 -oUser=transfers -i ~/.ssh/transfers_key file.log server2:/logs/server1/"`
+```
+
+Now your playbook can do the procedure.
+
+### Useful combinations
+
+If you produce a lot of Ansible playbooks, you can organize all your procedures with other tools like [AWX][16] (Ansible Works Project), which provides a web-based user interface, a REST API, and a task engine built on top of Ansible so that users can better control their Ansible project use in IT environments.
+
+Other interesting combinations are Ansible with [Rundeck][17], which provides procedures as self-service jobs, and [Jenkins][18] for continuous integration and continuous delivery processes.
+
+### Conclusion
+
+I hope that these tips for using Ansible will help you improve your automation processes, coding, and documentation. If you have more interest, dive in and learn more. And I would like to hear your ideas or questions, so please share them in the comments below.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/4/ansible-procedures
+
+作者:[Marco Bravo][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/marcobravo/users/shawnhcorey/users/marcobravo
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/document_free_access_cut_security.png?itok=ocvCv8G2
+[2]: https://en.wikipedia.org/wiki/Damian_Conway
+[3]: https://www.ansible.com/
+[4]: https://addyosmani.com/
+[5]: https://git-scm.com/
+[6]: https://en.wikipedia.org/wiki/Comparison_of_version_control_software
+[7]: https://subversion.apache.org/
+[8]: https://bazaar.canonical.com/en/
+[9]: https://www.bitkeeper.org/
+[10]: https://www.mercurial-scm.org/
+[11]: https://docs.ansible.com/ansible/latest/reference_appendices/test_strategies.html
+[12]: https://molecule.readthedocs.io/en/latest/
+[13]: https://opensource.com/article/18/12/testing-ansible-roles-molecule
+[14]: https://opensource.com/article/18/5/analyzing-ansible-runs-using-ara
+[15]: https://docs.ansible.com/ansible/latest/user_guide/vault.html
+[16]: https://github.com/ansible/awx
+[17]: https://www.rundeck.com/ansible
+[18]: https://www.redhat.com/en/blog/integrating-ansible-jenkins-cicd-process
diff --git a/sources/tech/20190418 Electronics designed in 5 different countries with open hardware.md b/sources/tech/20190418 Electronics designed in 5 different countries with open hardware.md
new file mode 100644
index 0000000000..5c81f2d8bc
--- /dev/null
+++ b/sources/tech/20190418 Electronics designed in 5 different countries with open hardware.md
@@ -0,0 +1,119 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Electronics designed in 5 different countries with open hardware)
+[#]: via: (https://opensource.com/article/19/4/hardware-international)
+[#]: author: (Michael Weinberg https://opensource.com/users/mweinberg)
+
+Electronics designed in 5 different countries with open hardware
+======
+This month's open source hardware column looks at certified open
+hardware from five countries that may surprise you.
+![Gadgets and open hardware][1]
+
+The Open Source Hardware Association's [Hardware Registry][2] lists hardware from 29 different countries on five continents, demonstrating the broad, international footprint of certified open source hardware.
+
+![Open source hardware map][3]
+
+In some ways, this international reach shouldn't be a surprise. Like many other open source communities, the open source hardware community is built on top of the internet, not grounded in any specific geographical location. The focus on documentation, sharing, and openness makes it easy for people in different places with different backgrounds to connect and work together to develop new hardware. Even the community-developed open source hardware [definition][4] has been translated into 11 languages from the original English.
+
+Even if you're familiar with the international nature of open source hardware, it can still be refreshing to step back and remember what it means in practice. While it may not surprise you that there are many certifications from the United States, Germany, and India, some of the other countries boasting certifications might be a bit less expected. Let's look at six such projects from five of those countries.
+
+### Bulgaria
+
+Bulgaria may have the highest per-capita open source hardware certification rate of any country on earth. That distinction is mostly due to the work of two companies: [ANAVI Technology][5] and [Olimex][6].
+
+ANAVI focuses mostly on IoT projects built on top of the Raspberry Pi and ESP8266. The concept of "creator contribution" means that these projects can be certified open source even though they are built upon non-open bases. That is because all of ANAVI's work to develop the hardware on top of these platforms (ANAVI's "creator contribution") has been open sourced in compliance with the certification requirements.
+
+The [ANAVI Light pHAT][7] was the first piece of Bulgarian hardware to be certified by OSHWA. The Light pHAT makes it easy to add a 12V RGB LED strip to a Raspberry Pi.
+
+![ANAVI-Light-pHAT][8]
+
+[ANAVI-Light-pHAT][9]
+
+Olimex's first OSHWA certification was for the [ESP32-PRO][10], a highly connectable IoT board built around an ESP32 microcontroller.
+
+![Olimex ESP32-PRO][11]
+
+[Olimex ESP32-PRO][12]
+
+### China
+
+While most people know China is a hotbed for hardware development, fewer realize that it is also the home to a thriving _open source_ hardware culture. One of the reasons is the tireless advocacy of Naomi Wu (also known as [SexyCyborg][13]). It is fitting that the first piece of certified hardware from China is one she helped develop: the [sino:bit][14]. The sino:bit is designed to help introduce students to programming and includes China-specific features like a LED matrix big enough to represent Chinese characters.
+
+![sino:bit][15]
+
+[ sino:bit][16]
+
+### Mexico
+
+Mexico has also produced a range of certified open source hardware. A recent certification is the [Meow Meow][17], a capacitive touch interface from [Electronic Cats][18]. Meow Meow makes it easy to use a wide range of objects—bananas are always a favorite—as controllers for your computer.
+
+![Meow Meow][19]
+
+[Meow Meow][20]
+
+### Saudi Arabia
+
+Saudi Arabia jumped into open source hardware earlier this year with the [M1 Rover][21]. The robot is an unmanned vehicle that you can build (and build upon). It is compatible with a number of different packages designed for specific purposes, so you can customize it for a wide range of applications.
+
+![M1-Rover ][22]
+
+[M1-Rover][23]
+
+### Sri Lanka
+
+This project from Sri Lanka is part of a larger effort to improve traffic flow in urban areas. The team behind the [Traffic Wave Disruptor][24] read research about how many traffic jams are caused by drivers slamming on their brakes when they drive too close to the car in front of them, producing a ripple of rapid breaking on the road behind them. This stop/start effect can be avoided if cars maintain a consistent, optimal distance from one another. If you reduce the stop/start pattern, you also reduce the number of traffic jams.
+
+![Traffic Wave Disruptor][25]
+
+[Traffic Wave Disruptor][26]
+
+But how can drivers know if they are keeping an optimal distance? The prototype Traffic Wave Disruptor aims to give drivers feedback when they fail to keep optimal spacing. Wider adoption could help increase traffic flow without building new highways nor reducing the number of cars using them.
+
+* * *
+
+You may have noticed that all the hardware featured here is based on electronics. In next month's open source hardware column, we will take a look at open source hardware for the outdoors, away from batteries and plugs. Until then, [certify][27] your open source hardware project (especially if your country is not yet on the registry). It might be featured in a future column.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/4/hardware-international
+
+作者:[Michael Weinberg][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/mweinberg
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/openhardwaretools_0.png?itok=NUIvc-R1 (Gadgets and open hardware)
+[2]: https://certification.oshwa.org/list.html
+[3]: https://opensource.com/sites/default/files/uploads/opensourcehardwaremap.jpg (Open source hardware map)
+[4]: https://www.oshwa.org/definition/
+[5]: http://anavi.technology/
+[6]: https://www.olimex.com/
+[7]: https://certification.oshwa.org/bg000001.html
+[8]: https://opensource.com/sites/default/files/uploads/anavi-light-phat.png (ANAVI-Light-pHAT)
+[9]: http://anavi.technology/#products
+[10]: https://certification.oshwa.org/bg000010.html
+[11]: https://opensource.com/sites/default/files/uploads/olimex-esp32-pro.png (Olimex ESP32-PRO)
+[12]: https://www.olimex.com/Products/IoT/ESP32/ESP32-PRO/open-source-hardware
+[13]: https://www.youtube.com/channel/UCh_ugKacslKhsGGdXP0cRRA
+[14]: https://certification.oshwa.org/cn000001.html
+[15]: https://opensource.com/sites/default/files/uploads/sinobit.png (sino:bit)
+[16]: https://github.com/sinobitorg/hardware
+[17]: https://certification.oshwa.org/mx000003.html
+[18]: https://electroniccats.com/
+[19]: https://opensource.com/sites/default/files/uploads/meowmeow.png (Meow Meow)
+[20]: https://electroniccats.com/producto/meowmeow/
+[21]: https://certification.oshwa.org/sa000001.html
+[22]: https://opensource.com/sites/default/files/uploads/m1-rover.png (M1-Rover )
+[23]: https://www.hackster.io/AhmedAzouz/m1-rover-362c05
+[24]: https://certification.oshwa.org/lk000001.html
+[25]: https://opensource.com/sites/default/files/uploads/traffic-wave-disruptor.png (Traffic Wave Disruptor)
+[26]: https://github.com/Aightm8/Traffic-wave-disruptor
+[27]: https://certification.oshwa.org/
diff --git a/sources/tech/20190418 How to organize with Calculist- Ideas, events, and more.md b/sources/tech/20190418 How to organize with Calculist- Ideas, events, and more.md
new file mode 100644
index 0000000000..7c9d844315
--- /dev/null
+++ b/sources/tech/20190418 How to organize with Calculist- Ideas, events, and more.md
@@ -0,0 +1,120 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (How to organize with Calculist: Ideas, events, and more)
+[#]: via: (https://opensource.com/article/19/4/organize-calculist)
+[#]: author: (Scott Nesbitt https://opensource.com/users/scottnesbitt)
+
+How to organize with Calculist: Ideas, events, and more
+======
+Give structure to your ideas and plans with Calculist, an open source
+web app for creating outlines.
+![Team checklist][1]
+
+Thoughts. Ideas. Plans. We all have a few of them. Often, more than a few. And all of us want to make some or all of them a reality.
+
+Far too often, however, those thoughts and ideas and plans are a jumble inside our heads. They refuse to take a discernable shape, preferring instead to rattle around here, there, and everywhere in our brains.
+
+One solution to that problem is to put everything into [an outline][2]. An outline can be a great way to organize what you need to organize and give it the shape you need to take it to the next step.
+
+A number of people I know rely on a popular web-based tool called WorkFlowy for their outlining needs. If you prefer your applications (including web ones) to be open source, you'll want to take a look at [Calculist][3].
+
+The brainchild of [Dan Allison][4], Calculist is billed as _the thinking tool for problem solvers_. It does much of what WorkFlowy does, and it has a few features that its rival is missing.
+
+Let's take a look at using Calculist to organize your ideas (and more).
+
+### Getting started
+
+If you have a server, you can try to [install Calculist][5] on it. If, like me, you don't have server or just don't have the technical chops, you can turn to the [hosted version][6] of Calculist.
+
+[Sign up][7] for a no-cost account, then log in. Once you've done that, you're ready to go.
+
+### Creating a basic outline
+
+What you use Calculist for really depends on your needs. I use Calculist to create outlines for articles and essays, to create lists of various sorts, and to plan projects. Regardless of what I'm doing, every outline I create follows the same pattern.
+
+To get started, click the **New List** button. This creates a blank outline (which Calculist calls a _list_ ).
+
+![Create a new list in Calculist][8]
+
+The outline is a blank slate waiting for you to fill it up. Give the outline a name, then press Enter. When you do that, Calculist adds the first blank line for your outline. Use that as your starting point.
+
+![A new outline in Calculist][9]
+
+Add a new line by pressing Enter. To indent a line, press the Tab key while on that line. If you need to create a hierarchy, you can indent lines as far as you need to indent them. Press Shift+Tab to outdent a line.
+
+Keep adding lines until you have a completed outline. Calculist saves your work every few seconds, so you don't need to worry about that.
+
+![Calculist outline][10]
+
+### Editing an outline
+
+Outlines are fluid. They morph. They grow and shrink. Individual items in an outline change. Calculist makes it easy for you to adapt and make those changes.
+
+You already know how to add an item to an outline. If you don't, go back a few paragraphs for a refresher. To edit text, click on an item and start typing. Don't double-click (more on this in a few moments). If you accidentally double-click on an item, press Esc on your keyboard and all will be well.
+
+Sometimes you need to move an item somewhere else in the outline. Do that by clicking and holding the bullet for that item. Drag the item and drop it wherever you want it. Anything indented below the item moves with it.
+
+At the moment, Calculist doesn't support adding notes or comments to an item in an outline. A simple workaround I use is to add a line indented one level deeper than the item where I want to add the note. That's not the most elegant solution, but it works.
+
+### Let your keyboard do the walking
+
+Not everyone likes to use their mouse to perform actions in an application. Like a good desktop application, you're not at the mercy of your mouse when you use Calculist. It has many keyboard shortcuts that you can use to move around your outlines and manipulate them.
+
+The keyboard shortcuts I mentioned a few paragraphs ago are just the beginning. There are a couple of dozen keyboard shortcuts that you can use.
+
+For example, you can focus on a single portion of an outline by pressing Ctrl+Right Arrow key. To get back to the full outline, press Ctrl+Left Arrow key. There are also shortcuts for moving up and down in your outline, expanding and collapsing lists, and deleting items.
+
+You can view the list of shortcuts by clicking on your user name in the upper-right corner of the Calculist window and clicking **Preferences**. You can also find a list of [keyboard shortcuts][11] in the Calculist GitHub repository.
+
+If you need or want to, you can change the shortcuts on the **Preferences** page. Click on the shortcut you want to change—you can, for example, change the shortcut for zooming in on an item to Ctrl+0.
+
+### The power of commands
+
+Calculist's keyboard shortcuts are useful, but they're only the beginning. The application has command mode that enables you to perform basic actions and do some interesting and complex tasks.
+
+To use a command, double-click an item in your outline or press Ctrl+Enter while on it. The item turns black. Type a letter or two, and a list of commands displays. Scroll down to find the command you want to use, then press Enter. There's also a [list of commands][12] in the Calculist GitHub repository.
+
+![Calclulist commands][13]
+
+The commands are quite comprehensive. While in command mode, you can, for example, delete an item in an outline or delete an entire outline. You can import or export outlines, sort and group items in an outline, or change the application's theme or font.
+
+### Final thoughts
+
+I've found that Calculist is a quick, easy, and flexible way to create and view outlines. It works equally well on my laptop and my phone, and it packs not only the features I regularly use but many others (including support for [LaTeX math expressions][14] and a [table/spreadsheet mode][15]) that more advanced users will find useful.
+
+That said, Calculist isn't for everyone. If you prefer your outlines on the desktop, then check out [TreeLine][16], [Leo][17], or [Emacs org-mode][18].
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/4/organize-calculist
+
+作者:[Scott Nesbitt ][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/scottnesbitt
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/checklist_todo_clock_time_team.png?itok=1z528Q0y (Team checklist)
+[2]: https://en.wikipedia.org/wiki/Outline_(list)
+[3]: https://calculist.io/
+[4]: https://danallison.github.io/
+[5]: https://github.com/calculist/calculist-web
+[6]: https://app.calculist.io/
+[7]: https://app.calculist.io/join
+[8]: https://opensource.com/sites/default/files/uploads/calculist-new-list.png (Create a new list in Calculist)
+[9]: https://opensource.com/sites/default/files/uploads/calculist-getting-started.png (A new outline in Calculist)
+[10]: https://opensource.com/sites/default/files/uploads/calculist-outline.png (Calculist outline)
+[11]: https://github.com/calculist/calculist/wiki/Keyboard-Shortcuts
+[12]: https://github.com/calculist/calculist/wiki/Command-Mode
+[13]: https://opensource.com/sites/default/files/uploads/calculist-commands.png (Calculist commands)
+[14]: https://github.com/calculist/calculist/wiki/LaTeX-Expressions
+[15]: https://github.com/calculist/calculist/issues/32
+[16]: https://opensource.com/article/18/1/creating-outlines-treeline
+[17]: http://www.leoeditor.com/
+[18]: https://orgmode.org/
diff --git a/sources/tech/20190418 Level up command-line playgrounds with WebAssembly.md b/sources/tech/20190418 Level up command-line playgrounds with WebAssembly.md
new file mode 100644
index 0000000000..411adc44fa
--- /dev/null
+++ b/sources/tech/20190418 Level up command-line playgrounds with WebAssembly.md
@@ -0,0 +1,196 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Level up command-line playgrounds with WebAssembly)
+[#]: via: (https://opensource.com/article/19/4/command-line-playgrounds-webassembly)
+[#]: author: (Robert Aboukhalil https://opensource.com/users/robertaboukhalil)
+
+Level up command-line playgrounds with WebAssembly
+======
+WebAssembly is a powerful tool for bringing command line utilities to
+the web and giving people the chance to tinker with tools.
+![Various programming languages in use][1]
+
+[WebAssembly][2] (Wasm) is a new low-level language designed with the web in mind. Its main goal is to enable developers to compile code written in other languages—such as C, C++, and Rust—into WebAssembly and run that code in the browser. In an environment where JavaScript has traditionally been the only option, WebAssembly is an appealing counterpart, and it enables portability along with the promise for near-native runtimes. WebAssembly has also already been used to port lots of tools to the web, including [desktop applications][3], [games][4], and even [data science tools written in Python][5]!
+
+Another application of WebAssembly is command line playgrounds, where users are free to play with a simulated version of a command line tool. In this article, we'll explore a concrete example of leveraging WebAssembly for this purpose, specifically to port the tool **[jq][6]** —which is normally confined to the command line—to run directly in the browser.
+
+If you haven't heard, jq is a very powerful command line tool for querying, modifying, and wrangling JSON objects on the command line.
+
+### Why WebAssembly?
+
+Aside from WebAssembly, there are two other approaches we can take to build a jq playground:
+
+ 1. **Set up a sandboxed environment** on your server that executes queries and returns the result to the user via API calls. Although this means your users get to play with the real thing, the thought of hosting, securing, and sanitizing user inputs for such an application is worrisome. Aside from security, the other concern is responsiveness; the additional round trips to the server can introduce noticeable latencies and negatively impact the user experience.
+ 2. **Simulate the command line environment using JavaScript** , where you define a series of steps that the user can take. Although this approach is more secure than option 1, it involves _a lot_ more work, as you need to rewrite the logic of the tool in JavaScript. This method is also limiting: when I'm learning a new tool, I'm not just interested in the "happy path"; I want to break things!
+
+
+
+These two solutions are not ideal because we have to choose between security and a meaningful learning experience. Ideally, we could simply run the command line tool directly in the browser, with no servers and no simulations. Lucky for us, WebAssembly is just the solution we need to achieve that.
+
+### Set up your environment
+
+In this article, we'll use the [Emscripten tool][7] to port jq from C to WebAssembly. Conveniently, it provides us with drop-in replacements for the most common C/C++ build tools, including gcc, make, and configure.
+
+Instead of [installing Emscripten from scratch][8] (the build process can take a long time), we'll use a Docker image I put together that comes prepackaged with everything you'll need for this article (and beyond!).
+
+Let's start by pulling the image and creating a container from it:
+
+
+```
+# Fetch docker image containing Emscripten
+docker pull robertaboukhalil/emsdk:1.38.26
+
+# Create container from that image
+docker run -dt --name wasm robertaboukhalil/emsdk:1.38.26
+
+# Enter the container
+docker exec -it wasm bash
+
+# Make sure we can run emcc, Emscripten's wrapper around gcc
+emcc --version
+```
+
+If you see the Emscripten version on the screen, you're good to go!
+
+### Porting jq to WebAssembly
+
+Next, let's clone the jq repository:
+
+
+```
+git clone
+cd jq
+git checkout 9fa2e51
+```
+
+Note that we're checking out a specific commit, just in case the jq code changes significantly after this article is published.
+
+Before we compile jq to WebAssembly, let's first consider how we would normally compile jq to binary for use on the command line.
+
+From the [README file][9], here is what we need to build jq to binary (don't type this in yet):
+
+
+```
+# Fetch jq dependencies
+git submodule update --init
+
+# Generate ./configure file
+autoreconf -fi
+
+# Run ./configure
+./configure \
+\--with-oniguruma=builtin \
+\--disable-maintainer-mode
+
+# Build jq executable
+make LDFLAGS=-all-static
+```
+
+Instead, to compile jq to WebAssembly, we'll leverage Emscripten's drop-in replacements for the configure and make build tools (note the differences here from the previous entry: **emconfigure** and **emmake** in the Run and Build statements, respectively):
+
+
+```
+# Fetch jq dependencies
+git submodule update --init
+
+# Generate ./configure file
+autoreconf -fi
+
+# Run ./configure
+emconfigure ./configure \
+\--with-oniguruma=builtin \
+\--disable-maintainer-mode
+
+# Build jq executable
+emmake make LDFLAGS=-all-static
+```
+
+If you type the commands above inside the Wasm container we created earlier, you'll notice that emconfigure and emmake will make sure jq is compiled using emcc instead of gcc (Emscripten also has a g++ replacement called em++).
+
+So far, this was surprisingly easy: we just prepended a handful of commands with Emscripten tools and ported a codebase—comprising tens of thousands of lines—from C to WebAssembly. Note that it won't always be this easy, especially for more complex codebases and graphical applications, but that's for [another article][10].
+
+Another advantage of Emscripten is that it can generate some JavaScript glue code for us that handles initializing the WebAssembly module, calling C functions from JavaScript, and even providing a [virtual filesystem][11].
+
+Let's generate that glue code from the executable file jq that emmake outputs:
+
+
+```
+# But first, rename the jq executable to a .o file; otherwise,
+# emcc complains that the "file has an unknown suffix"
+mv jq jq.o
+
+# Generate .js and .wasm files from jq.o
+# Disable errors on undefined symbols to avoid warnings about llvm_fma_f64
+emcc jq.o -o jq.js \
+-s ERROR_ON_UNDEFINED_SYMBOLS=0
+```
+
+To make sure it works, let's try an example from the [jq tutorial][12] directly on the command line:
+
+
+```
+# Output the description of the latest commit on the jq repo
+$ curl -s "" | \
+node jq.js '.[0].commit.message'
+"Restore cfunction arity in builtins/0\n\nCount arguments up-front at definition/invocation instead of doing it at\nbind time, which comes after generating builtins/0 since e843a4f"
+```
+
+And just like that, we are now ready to run jq in the browser!
+
+### The result
+
+Using the output of emcc above, we can put together a user interface that calls jq on a JSON blob the user provides. This is the approach I took to build [jqkungfu][13] (source code [available on GitHub][14]):
+
+![jqkungfu screenshot][15]
+
+jqkungfu, a playground built by compiling jq to WebAssembly
+
+Although there are similar web apps that let you execute arbitrary jq queries in the browser, they are generally implemented as server-side applications that execute user queries in a sandbox (option #1 above).
+
+Instead, by compiling jq from C to WebAssembly, we get the best of both worlds: the flexibility of the server and the security of the browser. Specifically, the benefits are:
+
+ 1. **Flexibility** : Users can "choose their own adventure" and use the app with fewer limitations
+ 2. **Speed** : Once the Wasm module is loaded, executing queries is extremely fast because all the magic happens in the browser
+ 3. **Security** : No backend means we don't have to worry about our servers being compromised or used to mine Bitcoins
+ 4. **Convenience** : Since we don't need a backend, jqkungfu is simply hosted as static files on a cloud storage platform
+
+
+
+### Conclusion
+
+WebAssembly is a powerful tool for bringing existing command line utilities to the web. When included as part of a tutorial, such playgrounds can become powerful teaching tools. They can even allow your users to test-drive your tool before they bother installing it.
+
+If you want to dive further into WebAssembly and learn how to build applications like jqkungfu (or games like Pacman!), check out my book [_Level up with WebAssembly_][16].
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/4/command-line-playgrounds-webassembly
+
+作者:[Robert Aboukhalil][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/robertaboukhalil
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/programming_language_c.png?itok=mPwqDAD9 (Various programming languages in use)
+[2]: https://webassembly.org/
+[3]: https://www.figma.com/blog/webassembly-cut-figmas-load-time-by-3x/
+[4]: http://www.continuation-labs.com/projects/d3wasm/
+[5]: https://hacks.mozilla.org/2019/03/iodide-an-experimental-tool-for-scientific-communicatiodide-for-scientific-communication-exploration-on-the-web/
+[6]: https://stedolan.github.io/jq/
+[7]: https://emscripten.org/
+[8]: https://emscripten.org/docs/getting_started/downloads.html
+[9]: https://github.com/stedolan/jq/blob/9fa2e51099c55af56e3e541dc4b399f11de74abe/README.md
+[10]: https://medium.com/@robaboukhalil/porting-games-to-the-web-with-webassembly-70d598e1a3ec?sk=20c835664031227eae5690b8a12514f0
+[11]: https://emscripten.org/docs/porting/files/file_systems_overview.html
+[12]: https://stedolan.github.io/jq/tutorial/
+[13]: http://jqkungfu.com
+[14]: https://github.com/robertaboukhalil/jqkungfu/
+[15]: https://opensource.com/sites/default/files/uploads/jqkungfu.gif (jqkungfu screenshot)
+[16]: http://levelupwasm.com/
diff --git a/sources/tech/20190418 Simplifying organizational change- A guide for the perplexed.md b/sources/tech/20190418 Simplifying organizational change- A guide for the perplexed.md
new file mode 100644
index 0000000000..e9fa0cb7fd
--- /dev/null
+++ b/sources/tech/20190418 Simplifying organizational change- A guide for the perplexed.md
@@ -0,0 +1,167 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Simplifying organizational change: A guide for the perplexed)
+[#]: via: (https://opensource.com/open-organization/19/4/simplifying-change)
+[#]: author: (Jen Kelchner https://opensource.com/users/jenkelchner)
+
+Simplifying organizational change: A guide for the perplexed
+======
+Here's a 4-step, open process for making change easier—both for you and
+your organization.
+![][1]
+
+Most organizational leaders have encountered a certain paralysis around efforts to implement culture change—perhaps because of perceived difficulty or the time necessary for realizing our work. But change is only as difficult as we choose to make it. In order to lead successful change efforts, we must simplify our understanding and approach to change.
+
+Change isn't something rare. We live everyday life in a continuous state of change—from grappling with the speed of innovation to simply interacting with the environment around us. Quite simply, *change is how we process, disseminate, and adopt new information. *And whether you're leading a team or an organization—or are simply breathing—you'll benefit from a more focused, simplified approach to change. Here's a process that can save you time and reduce frustration.
+
+### Three interactions with change
+
+Everyone interacts with change in different ways. Those differences are based on who we are, our own unique experiences, and our core beliefs. In fact, [only 5% of decision making involves conscious processing][2]. Even when you don't _think_ you're making a decision, you are actually making a decision (that is, to not take action).
+
+So you see, two actors are at play in situations involving change. The first is the human decision maker. The second is the information _coming to_ the decision maker. Both are present in three sets of interactions at varying stages in the decision-making process.
+
+#### **Engaging change**
+
+First, we must understand that uncertainty is really the result of "new information" we must process. We must accept where we are, at that moment, while waiting for additional information. Engaging with change requires us to trust—at the very least, ourselves and our capacity to manage—as new information continues to arrive. Everyone will respond to new information differently, and those responses are based on multiple factors: general hardwiring, unconscious needs that need to be met to feel safe, and so on. How do you feel safe in periods of uncertainty? Are you routine driven? Do you need details or need to assess risk? Are you good with figuring it out on the fly? Or does safety feel like creating something brand new?
+
+#### **Navigating change**
+
+"Navigating" doesn't necessarily mean "going around" something safely. It's knowing how to "get through it." Navigating change truly requires "all hands on deck" in order to keep everything intact and moving forward as we encounter each oncoming wave of new information. Everyone around you has something to contribute to the process of navigation; leverage them for “smooth sailing."
+
+#### **Adopting change**
+
+Only a small set of members in your organization will be truly comfortable with adopting change. But that committed and confident minority can spread the fire of change and help you grow some innovative ideas within your organization. Consider taking advantage of what researchers call "[the pendulum effect][3]," which holds that a group as small as 5% of an organization's population can influence a crowd's direction (the other 95% will follow along without realizing it). Moreover, [scientists at Rensselaer Polytechnic Institute have found][4] that when just 10% of a population holds an unshakable belief, that belief will always be adopted by a majority. Findings from this cognitive study have implications for the spread of innovations and movements within a collective group of people. Opportunities for mass adoption are directly related to your influence with the external parties around you.
+
+Everyone interacts with change in different ways. Those differences are based on who we are, our own unique experiences, and our core beliefs.
+
+### A useful matrix to guide culture change
+
+So far, we've identified three "interactions" every person, team, or department will experience with change: "engaging," "navigating," and "adopting." When we examine the work of _implementing_ change in the broader context of an organization (any kind), we can also identify _three relationships_ that drive the success of each interaction: "people," "capacity," and "information."
+
+Here's a brief list of considerations you should make—at every moment and with every relationship—to help you build roadmaps thoughtfully.
+
+#### **Engaging—People**
+
+Organizational success comes from the overlap of awareness and action of the "I" and the "We."
+
+ * _Individuals (I)_ are aware of and engage based on their [natural response strength][5].
+ * _Teams (We)_ are aware of and balance their responsibilities based on the Individual strengths by initiative.
+ * _Leaders (I/We) l_ everage insight based on knowing their (I) and the collective (We).
+
+
+
+#### **Engaging—Capacity**
+
+"Capacity" applies to skills, processes, and culture that is clearly structured, documented, and accessible with your organization. It is the “space” within which you operate and achieve solutions.
+
+ * _Current state_ awareness allows you to use what and who you have available and accessible through your known operational capacity.
+ * _Future state_ needs will show you what is required of you to learn, _or stretch_ , in order to bridge any gaps; essentially, you will design the recoding of your organization.
+
+
+
+#### **Engaging—Information**
+
+ * _Access to information_ is readily available to all based on appropriate needs within protocols.
+ * _Communication flows_ easily and is reciprocated at all levels.
+ * _Communication flow_ is timely and transparent.
+
+
+
+#### **Navigating—People**
+
+ * Balance responses from both individuals and the collective will impact your outcomes.
+ * Balance the _I_ with the _We_. This allows for responses to co-exist in a seamless, collaborative way—which fuels every project.
+
+
+
+#### **Navigating—Capacity**
+
+ * _Skills_ : Assuring a continuous state of assessment and learning through various modalities allows you to navigate with ease as each person graduates their understanding in preparation for the next iteration of change.
+ * _Culture:_ Be clear on goals and mission with a supported ecosystem in which your teams can operate by contributing their best efforts when working together.
+ * _Processes:_ Review existing processes and let go of anything that prevents you from evolving. Open practices and methodologies do allow for a higher rate of adaptability and decision making.
+ * _Utilize Talent:_ Discover who is already in your organization and how you can leverage their talent in new ways. Go beyond your known teams and seek out sources of new perspectives.
+
+
+
+#### **Navigating—Information**
+
+ * Be clear on your mission.
+ * Be very clear on your desired endgame so everyone knows what you are navigating toward (without clearly defined and posted directions, it's easy to waste time, money and efforts resulting in missed targets).
+
+
+
+#### **Adopting—People**
+
+ * _Behaviors_ have a critical impact on influence and adoption.
+ * For _internal adoption_ , consider the [pendulum of thought][3] swung by the committed few.
+
+
+
+#### **Adopting—Capacity**
+
+ * _Sustainability:_ Leverage people who are more routine and legacy-oriented to help stabilize and embed your new initiatives.
+ * Allows your innovators and co-creators to move into the next phase of development and begin solving problems while other team members can perform follow-through efforts.
+
+
+
+#### **Adopting—Information**
+
+ * Be open and transparent with your external communication.
+ * Lead the way in _what_ you do and _how_ you do it to create a tidal wave of change.
+ * Remember that mass adoption has a tipping point of 10%.
+
+
+
+[**Download a one-page guide to this model on GitHub.**][6]
+---
+
+### Four steps to simplify change
+
+You now understand what change is and how you are processing it. You've seen how you and your organization can reframe various interactions with it. Now, let's examine the four steps to simplify how you interact with and implement change as an individual, team leader, or organizational executive.
+
+#### **1\. Understand change**
+
+Change is receiving and processing new information and determining how to respond and participate with it (think personal or organizational operating system). Change is a _reciprocal_ action between yourself and incoming new information (think system interface). Change is an evolutionary process that happens in layers and stages in a continuous cycle (think data processing, bug fixes, and program iterations).
+
+#### **2\. Know your people**
+
+Change is personal and responses vary by context. People's responses to change are not indicators of the speed of adoption. Knowing how your people and your teams interact with change allows you to balance and optimize your efforts to solving problems, building solutions and sustaining implementations. Are they change makers, fast followers, innovators, stabilizers? When you know how you, _or others_ , process change, you can leverage your risk mitigators to sweep for potential pitfalls; and, your routine minded folks to be responsible for implementation follow through.
+
+Only a small set of members in your organization will be truly comfortable with adopting change. But that committed and confident minority can spread the fire of change and help you grow some innovative ideas within your organization.
+
+#### **3\. Know your capacity**
+
+Your capacity to implement widespread change will depend on your culture, your processes, and decision-making models. Get familiar with your operational capacity and guardrails (process and policy).
+
+#### **4\. Prepare for Interaction**
+
+Each interaction uses your people, capacity (operational), and information flow. Working with the stages of change is not always a linear process and may overlap at certain points along the way. Understand that [_people_ feed all engagement, navigation, and adoption actions][7].
+
+Humans are built for adaptation to our environments. Yes, any kind of change can be scary at first. But it need not involve some major new implementation with a large, looming deadline that throws you off. Knowing that you can take a simplified approach to change, hopefully, you're able to engage new information with ease. Using this approach over time—and integrating it as habit—allows for both the _I_ and the _We_ to experience continuous cycles of change without the tensions of old.
+
+_Want to learn more about simplifying change?[View additional resources on GitHub][8]._
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/open-organization/19/4/simplifying-change
+
+作者:[Jen Kelchner][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/jenkelchner
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/GOV_2dot0.png?itok=bKJ41T85
+[2]: http://www.simplifyinginterfaces.com/2008/08/01/95-percent-of-brain-activity-is-beyond-our-conscious-awareness/
+[3]: http://www.leeds.ac.uk/news/article/397/sheep_in_human_clothing__scientists_reveal_our_flock_mentality
+[4]: https://news.rpi.edu/luwakkey/2902
+[5]: https://opensource.com/open-organization/18/7/transformation-beyond-digital-2
+[6]: https://github.com/jenkelchner/simplifying-change/blob/master/Visual_%20Simplifying%20Change%20(1).pdf
+[7]: https://opensource.com/open-organization/17/7/digital-transformation-people-1
+[8]: https://github.com/jenkelchner/simplifying-change
diff --git a/sources/tech/20190422 4 open source apps for plant-based diets.md b/sources/tech/20190422 4 open source apps for plant-based diets.md
new file mode 100644
index 0000000000..2e27ab4b44
--- /dev/null
+++ b/sources/tech/20190422 4 open source apps for plant-based diets.md
@@ -0,0 +1,68 @@
+[#]: collector: (lujun9972)
+[#]: translator: (geekpi)
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (4 open source apps for plant-based diets)
+[#]: via: (https://opensource.com/article/19/4/apps-plant-based-diets)
+[#]: author: (Joshua Allen Holm https://opensource.com/users/holmja)
+
+4 open source apps for plant-based diets
+======
+These apps make it easier for vegetarians and vegans—and omnivores who
+want to eat healthier—to find food they can eat.
+![][1]
+
+Reducing your consumption of meat, dairy, and processed foods is better for the planet and better for your health. Changing your diet can be difficult, but several open source Android applications can help you switch to a more plant-based diet. Whether you are taking part in [Meatless Monday][2], following Mark Bittman's [Vegan Before 6:00][3] guidelines, or switching entirely to a [whole-food, plant-based diet][4], these apps can aid you on your journey by helping you figure out what to eat, discover vegan- and vegetarian-friendly restaurants, and easily communicate your dietary preferences to others. All of these apps are open source and available from the [F-Droid repository][5].
+
+### Daily Dozen
+
+![Daily Dozen app][6]
+
+The [Daily Dozen][7] app provides a checklist of items that Michael Greger, MD, FACLM, recommends as part of a healthy diet and lifestyle. Dr. Greger recommends consuming a whole-food, plant-based diet consisting of diverse foods and supported by daily exercise. This app lets you keep track of how many servings of each type of food you have eaten, how many servings of water (or other approved beverage, such as tea) you drank, and if you exercised each day. Each category of food provides serving sizes and lists of foods that fall under that category; for example, the Cruciferous Vegetable category includes bok choy, broccoli, brussels sprouts, and many other suggestions.
+
+### Food Restrictions
+
+![Food Restrictions app][8]
+
+[Food Restrictions][9] is a simple app that can help you communicate your dietary restrictions to others, even if those people do not speak your language. Users can enter their food restrictions for seven different categories: chicken, beef, pork, fish, cheese, milk, and peppers. There is an "I don't eat" and an "I'm allergic" option for each of those categories. The "don't eat" option shows the icon with a red X over it. The "allergic" option displays the X and a small skull icon. The same information can be displayed using text instead of icons, but the text is only available in English and Portuguese. There is also an option for displaying a text message that says the user is vegetarian or vegan, which summarizes those dietary restrictions more succinctly and more accurately than the pick-and-choose options. The vegan text clearly mentions not eating eggs and honey, which are not options in the pick-and-choose method. However, just like the text version of the pick-and-choose option, these sentences are only available in English and Portuguese.
+
+### OpenFoodFacts
+
+![Open Food Facts app][10]
+
+Avoiding unwanted ingredients when buying groceries can be frustrating, but [OpenFoodFacts][11] can help make the process easier. This app lets you scan the barcodes on products to get a report about the ingredients in a product and how healthy the product is. A product can still be very unhealthy even if it meets the criteria to be a vegan product. Having both the ingredients list and the nutrition facts lets you make informed choices when shopping. The only drawback for this app is that the data is user contributed, so not every product is available, but you can contribute new items, if you want to give back to the project.
+
+### OpenVegeMap
+
+![OpenVegeMap app][12]
+
+Find vegan and vegetarian restaurants in your neighborhood with the [OpenVegeMap][13] app. This app lets you search by either using your phone's current location or by entering an address. Restaurants are classified as Vegan only, Vegan friendly, Vegetarian only, Vegetarian friendly, Non-vegetarian, and Unknown. The app uses data from [OpenStreetMap][14] and user-contributed information about the restaurants, so be sure to double-check to make sure the information provided is up-to-date and accurate.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/4/apps-plant-based-diets
+
+作者:[Joshua Allen Holm ][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/holmja
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/rh_003588_01_rd3os.combacktoschoolserieshe_rh_041x_0.png?itok=tfg6_I78
+[2]: https://www.meatlessmonday.com/
+[3]: https://www.amazon.com/dp/0385344740/
+[4]: https://nutritionstudies.org/whole-food-plant-based-diet-guide/
+[5]: https://f-droid.org/
+[6]: https://opensource.com/sites/default/files/uploads/daily_dozen.png (Daily Dozen app)
+[7]: https://f-droid.org/en/packages/org.nutritionfacts.dailydozen/
+[8]: https://opensource.com/sites/default/files/uploads/food_restrictions.png (Food Restrictions app)
+[9]: https://f-droid.org/en/packages/br.com.frs.foodrestrictions/
+[10]: https://opensource.com/sites/default/files/uploads/openfoodfacts.png (Open Food Facts app)
+[11]: https://f-droid.org/en/packages/openfoodfacts.github.scrachx.openfood/
+[12]: https://opensource.com/sites/default/files/uploads/openvegmap.png (OpenVegeMap app)
+[13]: https://f-droid.org/en/packages/pro.rudloff.openvegemap/
+[14]: https://www.openstreetmap.org/
diff --git a/sources/tech/20190422 9 ways to save the planet.md b/sources/tech/20190422 9 ways to save the planet.md
new file mode 100644
index 0000000000..d3301006cc
--- /dev/null
+++ b/sources/tech/20190422 9 ways to save the planet.md
@@ -0,0 +1,96 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (9 ways to save the planet)
+[#]: via: (https://opensource.com/article/19/4/save-planet)
+[#]: author: (Jen Wike Huger https://opensource.com/users/jen-wike/users/alanfdoss/users/jmpearce)
+
+9 ways to save the planet
+======
+These ideas have an open source twist.
+![][1]
+
+What can be done to help save the planet? The question can seem depressing at a time when it feels like an individual's contribution isn't enough. But, who are we Earth dwellers if not for a collection of individuals? So, I asked our writer community to share ways that open source software or hardware can be used to make a difference. Here's what I heard back.
+
+### 9 ways to save the planet with an open source twist
+
+**1.** **Disable the blinking cursor in your terminal.**
+
+It might sound silly, but the trivial, blinking cursor can cause up to [2 watts per hour of extra power consumption][2]. To disable it, go to Terminal Settings: Edit > Preferences > Cursor > Cursor blinking > Disabled.
+
+_Recommended by Mars Toktonaliev_
+
+**2\. Reduce your consumption of animal products and processed foods.**
+
+One way to do this is to add these open source apps to your phone: Daily Dozen, OpenFoodFacts, OpenVegeMap, and Food Restrictions. These apps will help you eat a healthy, plant-based diet, find vegan- and vegetarian-friendly restaurants, and communicate your dietary needs to others, even if they do not speak the same language. To learn more about these apps read [_4 open source apps to support eating a plant-based diet_][3].
+
+_Recommendation by Joshua Allen Holm_
+
+**3\. Recycle old computers.**
+
+How? With Linux, of course. Pay it forward by giving creating a new computer for someone who can't one and keep a computer out of the landfill. Here's how we do it at [The Asian Penguins][4].
+
+_Recommendation by Stu Keroff_
+
+**4\. Turn off devices when you're not using them.**
+
+Use "smart power strips" that have a "master" outlet and several "controlled" outlets. Plug your PC into the master outlet, and when you turn on the computer, your monitor, printer, and anything else plugged into the controlled outlets turns on too. A simpler, low-tech solution is a power strip with a timer. That's what I use at home. You can use switches on the timer to set a handy schedule to turn the power on and off at specific times. Automatically turn off your network printer when no one is at home. Or for my six-year-old laptop, extend the life of the battery with a schedule to alternate when it's running from wall power (outlet is on) and when it's running from the battery (outlet is off).
+
+_Recommended by Jim Hall_
+
+**5\. Reduce the use of your HVAC system.**
+
+Sunlight shining through windows adds a lot of heat to your home during the summer. Use Home Assistant to [automatically adjust][5] window blinds and awnings [based on the time of day][6], or even based on the angle of the sun.
+
+_Recommended by Michael Hrivnak_
+
+**6\. Turn your thermostat off or to a lower setting while you're away.**
+
+If your home thermostat has an "Away" feature, activating it on your way out the door is easy to forget. With a touch of automation, any connected thermostat can begin automatically saving energy while you're not home. [Stataway][7] is one such project that uses your phone's GPS coordinates to determine when it should set your thermostat to "Home" or "Away".
+
+_Recommended by Michael Hrivnak_
+
+**7\. Save computing power for later.**
+
+I have an idea: Create a script that can read the power output from an alternative energy array (wind and solar) and begin turning on servers (taking them from a power-saving sleep mode to an active mode) in a computing cluster until the overload power is used (whatever excess is produced beyond what can be stored/buffered for later use). Then use the overload power during high-production times for compute-intensive projects like rendering. This process would be essentially free of cost because the power can't be buffered for other uses. I'm sure the monitoring, power management, and server array tools must exist to do this. Then, it's just an integration problem, making it all work together.
+
+_Recommended by Terry Hancock_
+
+**8\. Turn off exterior lights.**
+
+Light pollution affects more than 80% of the world's population, according to the [World Atlas of Artificial Night Sky Brightness][8], published (Creative Commons Attribution-NonCommercial 4.0) in 2016 in the open access journal _Science Advances_. Turning off exterior lights is a quick way to benefit wildlife, human health, our ability to enjoy the night sky, and of course energy consumption. Visit [darksky.org][9] for more ideas on how to reduce the impact of your exterior lighting.
+
+_Recommended by Michael Hrivnak_
+
+**9\. Reduce your CPU count.**
+
+For me, I remember I used to have a whole bunch of computers running in my basement as my IT playground/lab. I've become more conscious now of power consumption and so have really drastically reduced my CPU count. I like to take advantage of VMs, zones, containers... that type of technology a lot more these days. Also, I'm really glad that small form factor and SoC computers, such as the Raspberry Pi, exist because I can do a lot with one, such as run a DNS or Web server, without heating the room and running up my electricity bill.
+
+P.S. All of these computers are running Linux, FreeBSD, or Raspbian!
+
+_Recommended by Alan Formy-Duvall_
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/4/save-planet
+
+作者:[Jen Wike Huger ][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/jen-wike/users/alanfdoss/users/jmpearce
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/pixelated-world.png?itok=fHjM6m53
+[2]: https://www.redhat.com/archives/fedora-devel-list/2009-January/msg02406.html
+[3]: https://opensource.com/article/19/4/apps-plant-based-diets
+[4]: https://opensource.com/article/19/2/asian-penguins-close-digital-divide
+[5]: https://www.home-assistant.io/docs/automation/trigger/#sun-trigger
+[6]: https://www.home-assistant.io/components/cover/
+[7]: https://github.com/mhrivnak/stataway
+[8]: http://advances.sciencemag.org/content/2/6/e1600377
+[9]: http://darksky.org/
diff --git a/sources/tech/20190422 Strawberry- A Fork of Clementine Music Player.md b/sources/tech/20190422 Strawberry- A Fork of Clementine Music Player.md
new file mode 100644
index 0000000000..66b0345586
--- /dev/null
+++ b/sources/tech/20190422 Strawberry- A Fork of Clementine Music Player.md
@@ -0,0 +1,132 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Strawberry: A Fork of Clementine Music Player)
+[#]: via: (https://itsfoss.com/strawberry-music-player/)
+[#]: author: (John Paul https://itsfoss.com/author/john/)
+
+Strawberry: A Fork of Clementine Music Player
+======
+
+In this age of streaming music and cloud services, there are still people who need an application to collect and play their music. If you are such a person, this article should interest you.
+
+We have earlier covered [Sayonara music player][1]. Today, we will be taking a look at the Strawberry Music Player.
+
+### Strawberry Music Player: A fork of Clementine
+
+The [Strawberry Music Player][2] is, quite simply, an application to manage and play your music.
+
+![Strawberry media library][3]
+
+Strawberry contains the following list of features:
+
+ * Play and organize music
+ * Supports WAV, FLAC, WavPack, DSF, DSDIFF, Ogg Vorbis, Speex, MPC, TrueAudio, AIFF, MP4, MP3, ASF and Monkey’s Audio Audio CD playback
+ * Native desktop notifications
+ * Support for playlists in multiple formats
+ * Advanced audio output and device configuration for bit-perfect playback on Linux
+ * Edit tags on music files
+ * Fetch tags from [MusicBrainz Picard][4]
+ * Album cover art from [Last.fm][5], MusicBrainz and Discogs
+ * Song lyrics from [AudD][6]
+ * Support for multiple backends
+ * Audio analyzer
+ * Audio equalizer
+ * Transfer music to iPod, iPhone, MTP or mass-storage USB player
+ * Streaming support for Tidal
+ * Scrobbler with support for Last.fm, Libre.fm and ListenBrainz
+
+
+
+If you take a look at the screenshots, they probably look familiar. That is because Strawberry is a fork of the [Clementine Music Player][7]. Clementine has not been updated since 2016, while the most recent version of Strawberry (0.5.3) was released early April 2019.
+
+Trivia
+
+You might think that Strawberry music player is named after the fruit. However, its [creator][8] claims that he has named the project after the band [Strawbs][9].
+
+### Installing Strawberry Music player
+
+Now let’s take a look at how you can install Strawberry on your system.
+
+#### Ubuntu
+
+The easiest way to install Strawberry on Ubuntu is to install the [official snap][10]. Just type:
+
+```
+sudo snap install strawberry
+```
+
+If you are not a fan of snaps, you can download a .deb file from Strawberry’s GitHub [release page][11]. You can [install the .deb file][12] by double-clicking it and opening it via the Software Center.
+
+Strawberry is not available in the main [Ubuntu repositories][13].
+
+#### Fedora
+
+Installing Strawberry on Fedora is much simpler. Strawberry is in the Fedora repos, so you just have to type `sudo dnf strawberry`. Strawberry is not available on Flatpak.
+
+#### Arch
+
+Just like Fedora, Strawberry is in the Arch repos. All you have to type is `sudo pacman -S strawberry`. The same is true for Manjaro.
+
+You can find a list of Linux distros that have Strawberry in their repos [here][14]. If you have openSUSE or Mageia, click [here][15]. You can also compile Strawberry from source.
+
+### Experience with Strawberry Music Player
+
+![Playing an audio book with Strawberry][16]
+
+I installed Strawberry on Fedora and Windows. I have used Clementine in the past, so I knew what to expect. I downloaded a number of audiobooks and several [Old Time Radio][17] [shows][18] as I don’t listen to a lot of music. Instead of using a dedicated [audiobook player like Cozy][19], I used Strawberry for listening to these radio shows.
+
+Once I told Strawberry where my files were located, it quickly imported them. I used [EasyTag][20] to fix some of the MP3 information on the old time radio shows. Strawberry has a tag editor, but EasyTag allows you to edit several folders very quickly. Strawberry undated the media library instantaneously.
+
+The big plus for me was performance. It loaded quickly and ran well. This might have something to do with the fact that it is not another Electron app. Strawberry is written in good-old-fashioned C++ and Qt 5. No need to load a whole web browser every time you want to play music, or in my case listen to audio dramas.
+
+I was not able to test the Tidal streaming feature because I don’t have an account. Also, I don’t sync music to my iPod.
+
+### Final Thoughts
+
+Strawberry is like a standard music player that makes managing and playing your audio library very easy.
+
+The features that I miss from Clementine include the option to access your media from cloud storage systems (like Box and Dropbox) and the ability to download podcasts. But then, I don’t store my media in the cloud and I mainly listen to podcasts on my iPod.
+
+I recommend giving Strawberry a try. You just might like it as much as I do.
+
+Have you ever used Strawberry? What is your favorite music player/manager? Please let us know in the comments below.
+
+If you found this article interesting, please take a minute to share it on social media, Hacker News or [Reddit][21].
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/strawberry-music-player/
+
+作者:[John Paul][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/john/
+[b]: https://github.com/lujun9972
+[1]: https://itsfoss.com/sayonara-music-player/
+[2]: https://strawbs.org/
+[3]: https://itsfoss.com/wp-content/uploads/2019/04/strawberry1-800x471.png
+[4]: https://itsfoss.com/musicbrainz-picard/
+[5]: https://www.last.fm/
+[6]: https://audd.io/
+[7]: https://www.clementine-player.org/
+[8]: https://github.com/jonaski
+[9]: https://en.wikipedia.org/wiki/Strawbs
+[10]: https://snapcraft.io/strawberry
+[11]: https://github.com/jonaski/strawberry/releases
+[12]: https://itsfoss.com/install-deb-files-ubuntu/
+[13]: https://itsfoss.com/ubuntu-repositories/
+[14]: https://repology.org/project/strawberry/versions
+[15]: https://download.opensuse.org/repositories/home:/jonaski:/audio/
+[16]: https://itsfoss.com/wp-content/uploads/2019/04/strawberry3-800x471.png
+[17]: https://en.wikipedia.org/wiki/Golden_Age_of_Radio
+[18]: https://zootradio.com/
+[19]: https://itsfoss.com/cozy-audiobook-player/
+[20]: https://wiki.gnome.org/Apps/EasyTAG
+[21]: http://reddit.com/r/linuxusersgroup
diff --git a/sources/tech/20190423 Epic Games Store is Now Available on Linux Thanks to Lutris.md b/sources/tech/20190423 Epic Games Store is Now Available on Linux Thanks to Lutris.md
new file mode 100644
index 0000000000..37c7dc869b
--- /dev/null
+++ b/sources/tech/20190423 Epic Games Store is Now Available on Linux Thanks to Lutris.md
@@ -0,0 +1,135 @@
+[#]: collector: (lujun9972)
+[#]: translator: (Modrisco)
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Epic Games Store is Now Available on Linux Thanks to Lutris)
+[#]: via: (https://itsfoss.com/epic-games-lutris-linux/)
+[#]: author: (Ankush Das https://itsfoss.com/author/ankush/)
+
+Epic Games Store is Now Available on Linux Thanks to Lutris
+======
+
+_**Brief: Open Source gaming platform Lutris now enables you to use Epic Games Store on Linux. We tried it on Ubuntu 19.04 and here’s our experience with it.**_
+
+[Gaming on Linux][1] just keeps getting better. Want to [play Windows games on Linux][2], Steam’s new [in-progress feature][3] enables you to do that.
+
+Steam might be new in the field of Windows games on Linux but Lutris has been doing it for years.
+
+[Lutris][4] is an open source gaming platform for Linux where it provides installers for game clients like Origin, Steam, Blizzard.net app and so on. It utilizes Wine to run stuff that isn’t natively supported on Linux.
+
+Lutris has recently announced that you can now use Epic Games Store using Lutris.
+
+### Lutris brings Epic Games to Linux
+
+![Epic Games Store Lutris Linux][5]
+
+[Epic Games Store][6] is a digital video game distribution platform like Steam. It only supports Windows and macOS for the moment.
+
+The Lutris team worked hard to bring Epic Games Store to Linux via Lutris. Even though I’m not a big fan of Epic Games Store, it was good to know about the support for Linux via Lutris:
+
+> Good news! [@EpicGames][7] Store is now fully functional under Linux if you use Lutris to install it! No issues observed whatsoever. [@TimSweeneyEpic][8] will probably like this 😊 [pic.twitter.com/7mt9fXt7TH][9]
+>
+> — Lutris Gaming (@LutrisGaming) [April 17, 2019][10]
+
+As an avid gamer and Linux user, I immediately jumped upon this news and installed Lutris to run Epic Games on it.
+
+**Note:** _I used[Ubuntu 19.04][11] to test Epic Games store for Linux._
+
+### Using Epic Games Store for Linux using Lutris
+
+To install Epic Games Store on your Linux system, make sure that you have [Lutris][4] installed with its pre-requisites Wine and Python 3. So, first [install Wine on Ubuntu][12] or whichever Linux you are using and then [download Lutris from its website][13].
+
+[][14]
+
+Suggested read Ubuntu Mate Will Be Default OS On Entroware Laptops
+
+#### Installing Epic Games Store
+
+Once the installation of Lutris is successful, simply launch it.
+
+While I tried this, I encountered an error (nothing happened when I tried to launch it using the GUI). However, when I typed in “ **lutris** ” on the terminal to launch it otherwise, I noticed an error that looked like this:
+
+![][15]
+
+Thanks to Abhishek, I learned that this is a common issue (you can check that on [GitHub][16]).
+
+So, to fix it, all I had to do was – type in a command in the terminal:
+
+```
+export LC_ALL=C
+```
+
+Just copy it and enter it in your terminal if you face the same issue. And, then, you will be able to open Lutris.
+
+**Note:** _You’ll have to enter this command every time you launch Lutris. So better to add it to your .bashrc or list of environment variable._
+
+Once that is done, simply launch it and search for “ **Epic Games Store** ” as shown in the image below:
+
+![Epic Games Store in Lutris][17]
+
+Here, I have it installed already, so you will get the option to “Install” it and then it will automatically ask you to install the required packages that it needs. You just have to proceed in order to successfully install it. That’s it – no rocket science involved.
+
+#### Playing a Game on Epic Games Store
+
+![Epic Games Store][18]
+
+Now that we have Epic Games store via Lutris on Linux, simply launch it and log in to your account to get started.
+
+But, does it really work?
+
+_Yes, the Epic Games Store does work._ **But, all the games don’t.**
+
+Well, I haven’t tried everything, but I grabbed a free game (Transistor – a turn-based ARPG game) to check if that works.
+
+![Transistor – Epic Games Store][19]
+
+Unfortunately, it didn’t. It says that it is “Running” when I launch it but then again, nothing happens.
+
+As of now, I’m not aware of any solutions to that – so I’ll try to keep you guys updated if I find a fix.
+
+[][20]
+
+Suggested read Alpha Version Of New Skype Client For Linux Is Out Now
+
+**Wrapping Up**
+
+It’s good to see the gaming scene improve on Linux thanks to the solutions like Lutris for users. However, there’s still a lot of work to be done.
+
+For a game to run hassle-free on Linux is still a challenge. There can be issues like this which I encountered or similar. But, it’s going in the right direction – even if it has issues.
+
+What do you think of Epic Games Store on Linux via Lutris? Have you tried it yet? Let us know your thoughts in the comments below.
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/epic-games-lutris-linux/
+
+作者:[Ankush Das][a]
+选题:[lujun9972][b]
+译者:[Modrisco](https://github.com/Modrisco)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/ankush/
+[b]: https://github.com/lujun9972
+[1]: https://itsfoss.com/linux-gaming-guide/
+[2]: https://itsfoss.com/steam-play/
+[3]: https://itsfoss.com/steam-play-proton/
+[4]: https://lutris.net/
+[5]: https://itsfoss.com/wp-content/uploads/2019/04/epic-games-store-lutris-linux-800x450.png
+[6]: https://www.epicgames.com/store/en-US/
+[7]: https://twitter.com/EpicGames?ref_src=twsrc%5Etfw
+[8]: https://twitter.com/TimSweeneyEpic?ref_src=twsrc%5Etfw
+[9]: https://t.co/7mt9fXt7TH
+[10]: https://twitter.com/LutrisGaming/status/1118552969816018948?ref_src=twsrc%5Etfw
+[11]: https://itsfoss.com/ubuntu-19-04-release-features/
+[12]: https://itsfoss.com/install-latest-wine/
+[13]: https://lutris.net/downloads/
+[14]: https://itsfoss.com/ubuntu-mate-entroware/
+[15]: https://itsfoss.com/wp-content/uploads/2019/04/lutris-error.jpg
+[16]: https://github.com/lutris/lutris/issues/660
+[17]: https://itsfoss.com/wp-content/uploads/2019/04/lutris-epic-games-store-800x520.jpg
+[18]: https://itsfoss.com/wp-content/uploads/2019/04/epic-games-store-800x450.jpg
+[19]: https://itsfoss.com/wp-content/uploads/2019/04/transistor-game-epic-games-store-800x410.jpg
+[20]: https://itsfoss.com/skpe-alpha-linux/
diff --git a/sources/tech/20190423 How to identify same-content files on Linux.md b/sources/tech/20190423 How to identify same-content files on Linux.md
new file mode 100644
index 0000000000..8d9b34b30a
--- /dev/null
+++ b/sources/tech/20190423 How to identify same-content files on Linux.md
@@ -0,0 +1,260 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (How to identify same-content files on Linux)
+[#]: via: (https://www.networkworld.com/article/3390204/how-to-identify-same-content-files-on-linux.html#tk.rss_all)
+[#]: author: (Sandra Henry-Stocker https://www.networkworld.com/author/Sandra-Henry_Stocker/)
+
+How to identify same-content files on Linux
+======
+Copies of files sometimes represent a big waste of disk space and can cause confusion if you want to make updates. Here are six commands to help you identify these files.
+![Vinoth Chandar \(CC BY 2.0\)][1]
+
+In a recent post, we looked at [how to identify and locate files that are hard links][2] (i.e., that point to the same disk content and share inodes). In this post, we'll check out commands for finding files that have the same _content_ , but are not otherwise connected.
+
+Hard links are helpful because they allow files to exist in multiple places in the file system while not taking up any additional disk space. Copies of files, on the other hand, sometimes represent a big waste of disk space and run some risk of causing some confusion if you want to make updates. In this post, we're going to look at multiple ways to identify these files.
+
+**[ Two-Minute Linux Tips:[Learn how to master a host of Linux commands in these 2-minute video tutorials][3] ]**
+
+### Comparing files with the diff command
+
+Probably the easiest way to compare two files is to use the **diff** command. The output will show you the differences between the two files. The < and > signs indicate whether the extra lines are in the first (<) or second (>) file provided as arguments. In this example, the extra lines are in backup.html.
+
+```
+$ diff index.html backup.html
+2438a2439,2441
+>
+> That's all there is to report.
+>
+```
+
+If diff shows no output, that means the two files are the same.
+
+```
+$ diff home.html index.html
+$
+```
+
+The only drawbacks to diff are that it can only compare two files at a time, and you have to identify the files to compare. Some commands we will look at in this post can find the duplicate files for you.
+
+### Using checksums
+
+The **cksum** (checksum) command computes checksums for files. Checksums are a mathematical reduction of the contents to a lengthy number (like 2819078353 228029). While not absolutely unique, the chance that files that are not identical in content would result in the same checksum is extremely small.
+
+```
+$ cksum *.html
+2819078353 228029 backup.html
+4073570409 227985 home.html
+4073570409 227985 index.html
+```
+
+In the example above, you can see how the second and third files yield the same checksum and can be assumed to be identical.
+
+### Using the find command
+
+While the find command doesn't have an option for finding duplicate files, it can be used to search files by name or type and run the cksum command. For example:
+
+```
+$ find . -name "*.html" -exec cksum {} \;
+4073570409 227985 ./home.html
+2819078353 228029 ./backup.html
+4073570409 227985 ./index.html
+```
+
+### Using the fslint command
+
+The **fslint** command can be used to specifically find duplicate files. Note that we give it a starting location. The command can take quite some time to complete if it needs to run through a large number of files. Here's output from a very modest search. Note how it lists the duplicate files and also looks for other issues, such as empty directories and bad IDs.
+
+```
+$ fslint .
+-----------------------------------file name lint
+-------------------------------Invalid utf8 names
+-----------------------------------file case lint
+----------------------------------DUPlicate files <==
+home.html
+index.html
+-----------------------------------Dangling links
+--------------------redundant characters in links
+------------------------------------suspect links
+--------------------------------Empty Directories
+./.gnupg
+----------------------------------Temporary Files
+----------------------duplicate/conflicting Names
+------------------------------------------Bad ids
+-------------------------Non Stripped executables
+```
+
+You may have to install **fslint** on your system. You will probably have to add it to your search path, as well:
+
+```
+$ export PATH=$PATH:/usr/share/fslint/fslint
+```
+
+### Using the rdfind command
+
+The **rdfind** command will also look for duplicate (same content) files. The name stands for "redundant data find," and the command is able to determine, based on file dates, which files are the originals — which is helpful if you choose to delete the duplicates, as it will remove the newer files.
+
+```
+$ rdfind ~
+Now scanning "/home/shark", found 12 files.
+Now have 12 files in total.
+Removed 1 files due to nonunique device and inode.
+Total size is 699498 bytes or 683 KiB
+Removed 9 files due to unique sizes from list.2 files left.
+Now eliminating candidates based on first bytes:removed 0 files from list.2 files left.
+Now eliminating candidates based on last bytes:removed 0 files from list.2 files left.
+Now eliminating candidates based on sha1 checksum:removed 0 files from list.2 files left.
+It seems like you have 2 files that are not unique
+Totally, 223 KiB can be reduced.
+Now making results file results.txt
+```
+
+You can also run this command in "dryrun" (i.e., only report the changes that might otherwise be made).
+
+```
+$ rdfind -dryrun true ~
+(DRYRUN MODE) Now scanning "/home/shark", found 12 files.
+(DRYRUN MODE) Now have 12 files in total.
+(DRYRUN MODE) Removed 1 files due to nonunique device and inode.
+(DRYRUN MODE) Total size is 699352 bytes or 683 KiB
+Removed 9 files due to unique sizes from list.2 files left.
+(DRYRUN MODE) Now eliminating candidates based on first bytes:removed 0 files from list.2 files left.
+(DRYRUN MODE) Now eliminating candidates based on last bytes:removed 0 files from list.2 files left.
+(DRYRUN MODE) Now eliminating candidates based on sha1 checksum:removed 0 files from list.2 files left.
+(DRYRUN MODE) It seems like you have 2 files that are not unique
+(DRYRUN MODE) Totally, 223 KiB can be reduced.
+(DRYRUN MODE) Now making results file results.txt
+```
+
+The rdfind command also provides options for things such as ignoring empty files (-ignoreempty) and following symbolic links (-followsymlinks). Check out the man page for explanations.
+
+```
+-ignoreempty ignore empty files
+-minsize ignore files smaller than speficied size
+-followsymlinks follow symbolic links
+-removeidentinode remove files referring to identical inode
+-checksum identify checksum type to be used
+-deterministic determiness how to sort files
+-makesymlinks turn duplicate files into symbolic links
+-makehardlinks replace duplicate files with hard links
+-makeresultsfile create a results file in the current directory
+-outputname provide name for results file
+-deleteduplicates delete/unlink duplicate files
+-sleep set sleep time between reading files (milliseconds)
+-n, -dryrun display what would have been done, but don't do it
+```
+
+Note that the rdfind command offers an option to delete duplicate files with the **-deleteduplicates true** setting. Hopefully the command's modest problem with grammar won't irritate you. ;-)
+
+```
+$ rdfind -deleteduplicates true .
+...
+Deleted 1 files. <==
+```
+
+You will likely have to install the rdfind command on your system. It's probably a good idea to experiment with it to get comfortable with how it works.
+
+### Using the fdupes command
+
+The **fdupes** command also makes it easy to identify duplicate files and provides a large number of useful options — like **-r** for recursion. In its simplest form, it groups duplicate files together like this:
+
+```
+$ fdupes ~
+/home/shs/UPGRADE
+/home/shs/mytwin
+
+/home/shs/lp.txt
+/home/shs/lp.man
+
+/home/shs/penguin.png
+/home/shs/penguin0.png
+/home/shs/hideme.png
+```
+
+Here's an example using recursion. Note that many of the duplicate files are important (users' .bashrc and .profile files) and should clearly not be deleted.
+
+```
+# fdupes -r /home
+/home/shark/home.html
+/home/shark/index.html
+
+/home/dory/.bashrc
+/home/eel/.bashrc
+
+/home/nemo/.profile
+/home/dory/.profile
+/home/shark/.profile
+
+/home/nemo/tryme
+/home/shs/tryme
+
+/home/shs/arrow.png
+/home/shs/PNGs/arrow.png
+
+/home/shs/11/files_11.zip
+/home/shs/ERIC/file_11.zip
+
+/home/shs/penguin0.jpg
+/home/shs/PNGs/penguin.jpg
+/home/shs/PNGs/penguin0.jpg
+
+/home/shs/Sandra_rotated.png
+/home/shs/PNGs/Sandra_rotated.png
+```
+
+The fdupe command's many options are listed below. Use the **fdupes -h** command, or read the man page for more details.
+
+```
+-r --recurse recurse
+-R --recurse: recurse through specified directories
+-s --symlinks follow symlinked directories
+-H --hardlinks treat hard links as duplicates
+-n --noempty ignore empty files
+-f --omitfirst omit the first file in each set of matches
+-A --nohidden ignore hidden files
+-1 --sameline list matches on a single line
+-S --size show size of duplicate files
+-m --summarize summarize duplicate files information
+-q --quiet hide progress indicator
+-d --delete prompt user for files to preserve
+-N --noprompt when used with --delete, preserve the first file in set
+-I --immediate delete duplicates as they are encountered
+-p --permissions don't soncider files with different owner/group or
+ permission bits as duplicates
+-o --order=WORD order files according to specification
+-i --reverse reverse order while sorting
+-v --version display fdupes version
+-h --help displays help
+```
+
+The fdupes command is another one that you're like to have to install and work with for a while to become familiar with its many options.
+
+### Wrap-up
+
+Linux systems provide a good selection of tools for locating and potentially removing duplicate files, along with options for where you want to run your search and what you want to do with duplicate files when you find them.
+
+**[ Also see:[Invaluable tips and tricks for troubleshooting Linux][4] ]**
+
+Join the Network World communities on [Facebook][5] and [LinkedIn][6] to comment on topics that are top of mind.
+
+--------------------------------------------------------------------------------
+
+via: https://www.networkworld.com/article/3390204/how-to-identify-same-content-files-on-linux.html#tk.rss_all
+
+作者:[Sandra Henry-Stocker][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.networkworld.com/author/Sandra-Henry_Stocker/
+[b]: https://github.com/lujun9972
+[1]: https://images.idgesg.net/images/article/2019/04/chairs-100794266-large.jpg
+[2]: https://www.networkworld.com/article/3387961/how-to-identify-duplicate-files-on-linux.html
+[3]: https://www.youtube.com/playlist?list=PL7D2RMSmRO9J8OTpjFECi8DJiTQdd4hua
+[4]: https://www.networkworld.com/article/3242170/linux/invaluable-tips-and-tricks-for-troubleshooting-linux.html
+[5]: https://www.facebook.com/NetworkWorld/
+[6]: https://www.linkedin.com/company/network-world
diff --git a/sources/tech/20190425 Debian has a New Project Leader.md b/sources/tech/20190425 Debian has a New Project Leader.md
new file mode 100644
index 0000000000..00f114b907
--- /dev/null
+++ b/sources/tech/20190425 Debian has a New Project Leader.md
@@ -0,0 +1,106 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Debian has a New Project Leader)
+[#]: via: (https://itsfoss.com/debian-project-leader-election/)
+[#]: author: (Shirish https://itsfoss.com/author/shirish/)
+
+Debian has a New Project Leader
+======
+
+Like each year, the Debian Secretary announced a call for nominations for the post of Debian Project Leader (commonly known as DPL) in early March. Soon 5 candidates shared their nomination. One of the DPL candidates backed out due to personal reasons and we had [four candidates][1] as can be seen in the Nomination section of the Vote page.
+
+### Sam Hartman, the new Debian Project Leader
+
+![][2]
+
+While I will not go much into details as Sam already outlined his position on his [platform][3], it is good to see that most Debian developers recognize that it’s no longer just the technical excellence which need to be looked at. I do hope he is able to create more teams which would leave some more time in DPL’s hands and less stress going forward.
+
+As he has shared, he would be looking into also helping the other DPL candidates, all of which presented initiatives to make Debian better.
+
+Apart from this, there had been some excellent suggestions, for example modernizing debian-installer, making lists.debian.org have a [Mailman 3][4] instance, modernizing Debian packaging and many more.
+
+While probably a year is too short a time for any of the deliverables that Debian people are thinking, some sort of push or start should enable Debian to reach greater heights than today.
+
+### A brief history of DPL elections
+
+In the beginning, Debian was similar to many distributions which have a [BDFL][5], although from the very start Debian had a sort of rolling leadership. While I wouldn’t go through the whole history, from October 1998 there was an idea [germinated][6] to have a Debian Constitution.
+
+After quite a bit of discussion between Debian users, contributors, developers etc. [Debian 1.0 Constitution][7] was released on December 2nd, 1998. One of the big changes was that it formalised the selection of Debian Project Leader via elections.
+
+From 1998 till 2019 13 Debian project leaders have been elected till date with Sam Hartman being the latest (2019).
+
+Before Sam, [Chris Lamb][8] was DPL in 2017 and again stood up for re-election in 2018. One of the biggest changes in Chris’s tenure was having more impetus to outreach than ever before. This made it possible to have many more mini-debconfs all around the world and thus increasing more number of Debian users and potential Debian Developers.
+
+[][9]
+
+Suggested read SemiCode OS: A Linux Distribution For Programmers And Web Developers
+
+### Duties and Responsibilities of the Debian Project Leader
+
+![][10]
+
+Debian Project Leader (DPL) is a non-monetary position which means that the DPL doesn’t get a salary or any monetary benefits in the traditional sense but it’s a prestigious position.
+
+Curious what what a DPL does? Here are some of the duties, responsibilities, prestige and perks associated with this position.
+
+#### Travelling
+
+As the DPL is the public face of the project, she/he is supposed to travel to many places in the world to share about Debian. While the travel may be a perk, it is and could be discounted by being not paid for the time spent articulating Debian’s position in various free software and other communities. Also travel, language, politics of free software are also some of the stress points that any DPL would have to go through.
+
+#### Communication
+
+A DPL is expected to have excellent verbal and non-verbal communication skills as she/he is the expected to share Debian’s vision of computing to technical and non-technical people. As she/he is also expected to weigh in many a sensitive matter, the Project Leader has to make choices about which communications should be made public and which should be private.
+
+#### Budgeting
+
+Quite a bit of the time the Debian Project Leader has to look into the finances along with the Secretary and take a call at various initiatives mooted by the larger community. The Project Leader has to ask and then make informed decisions on the same.
+
+#### Delegation
+
+One of the important tasks of the DPL is to delegate different tasks to suitable people. Some sensitive delegations include ftp-master, ftp-assistant, list-managers, debian-mirror, debian-infrastructure and so on.
+
+#### Influence
+
+Last but not the least, just like any other election, the people who contest for DPL have a platform where they share their ideas about where they would like to see the Debian project heading and how they would go about doing it.
+
+This is by no means an exhaustive list. I would suggest to read Lucas Nussbaum’s [mail][11] in which he outlines some more responsibilities as a Debian Project Leader.
+
+[][12]
+
+Suggested read Lightweight Linux Distribution Bodhi Linux 5.0 Released
+
+**In the end…**
+
+I wish Sam Hartman all the luck. I look forward to see how Debian grows under his leadership.
+
+I also hope that you learned a few non-technical thing around Debian. If you are an [ardent Debian user][13], stuff like this make you feel more involved with Debian project. What do you say?
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/debian-project-leader-election/
+
+作者:[Shirish][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/shirish/
+[b]: https://github.com/lujun9972
+[1]: https://www.debian.org/vote/2019/vote_001
+[2]: https://itsfoss.com/wp-content/uploads/2019/04/Debian-Project-Leader-election-800x450.png
+[3]: https://www.debian.org/vote/2019/platforms/hartmans
+[4]: http://docs.mailman3.org/en/latest/
+[5]: https://en.wikipedia.org/wiki/Benevolent_dictator_for_life
+[6]: https://lists.debian.org/debian-devel/1998/09/msg00506.html
+[7]: https://www.debian.org/devel/constitution.1.0
+[8]: https://www.debian.org/vote/2017/platforms/lamby
+[9]: https://itsfoss.com/semicode-os-linux/
+[10]: https://itsfoss.com/wp-content/uploads/2019/04/leadership-800x450.jpg
+[11]: https://lists.debian.org/debian-vote/2019/03/msg00023.html
+[12]: https://itsfoss.com/bodhi-linux-5/
+[13]: https://itsfoss.com/reasons-why-i-love-debian/
diff --git a/sources/tech/20190426 NomadBSD, a BSD for the Road.md b/sources/tech/20190426 NomadBSD, a BSD for the Road.md
new file mode 100644
index 0000000000..d31f9b4a90
--- /dev/null
+++ b/sources/tech/20190426 NomadBSD, a BSD for the Road.md
@@ -0,0 +1,125 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (NomadBSD, a BSD for the Road)
+[#]: via: (https://itsfoss.com/nomadbsd/)
+[#]: author: (John Paul https://itsfoss.com/author/john/)
+
+NomadBSD, a BSD for the Road
+======
+
+As regular It’s FOSS readers should know, I like diving into the world of BSDs. Recently, I came across an interesting BSD that is designed to live on a thumb drive. Let’s take a look at NomadBSD.
+
+### What is NomadBSD?
+
+![Nomadbsd Desktop][1]
+
+[NomadBSD][2] is different than most available BSDs. NomadBSD is a live system based on FreeBSD. It comes with automatic hardware detection and an initial config tool. NomadBSD is designed to “be used as a desktop system that works out of the box, but can also be used for data recovery, for educational purposes, or to test FreeBSD’s hardware compatibility.”
+
+This German BSD comes with an [OpenBox][3]-based desktop with the Plank application dock. NomadBSD makes use of the [DSB project][4]. DSB stands for “Desktop Suite (for) (Free)BSD” and consists of a collection of programs designed to create a simple and working environment without needing a ton of dependencies to use one tool. DSB is created by [Marcel Kaiser][5] one of the lead devs of NomadBSD.
+
+Just like the original BSD projects, you can contact the NomadBSD developers via a [mailing list][6].
+
+[][7]
+
+Suggested read Enjoy Netflix? You Should Thank FreeBSD
+
+#### Included Applications
+
+NomadBSD comes with the following software installed:
+
+ * Thunar file manager
+ * Asunder CD ripper
+ * Bash 5.0
+ * Filezilla FTP client
+ * Firefox web browser
+ * Fish Command line
+ * Gimp
+ * Qpdfview
+ * Git
+
+
+ * Hexchat IRC client
+ * Leafpad text editor
+ * Midnight Commander file manager
+ * PaleMoon web browser
+ * PCManFM file manager
+ * Pidgin messaging client
+ * Transmission BitTorrent client
+
+
+ * Redshift
+ * Sakura terminal emulator
+ * Slim login manager
+ * Thunderbird email client
+ * VLC media player
+ * Plank application dock
+ * Z Shell
+
+
+
+You can see a complete of the pre-installed applications in the [MANIFEST file][8].
+
+![Nomadbsd Openbox Menu][9]
+
+#### Version 1.2 Released
+
+NomadBSD recently released version 1.2 on April 21, 2019. This means that NomadBSD is now based on FreeBSD 12.0-p3. TRIM is now enabled by default. One of the biggest changes is that the initial command-line setup was replaced with a Qt graphical interface. They also added a Qt5 tool to install NomadBSD to your hard drive. A number of fixes were included to improve graphics support. They also added support for creating 32-bit images.
+
+[][10]
+
+Suggested read 6 Reasons Why Linux Users Switch to BSD
+
+### Installing NomadBSD
+
+Since NomadBSD is designed to be a live system, we will need to add the BSD to a USB drive. First, you will need to [download it][11]. There are several options to choose from: 64-bit, 32-bit, or 64-bit Mac.
+
+You will be a USB drive that has at least 4GB. The system that you are installing to should have a 1.2 GHz processor and 1GB of RAM to run NomadBSD comfortably. Both BIOS and UEFI are supported.
+
+All of the images available for download are compressed as a `.lzma` file. So, once you have downloaded the file, you will need to extract the `.img` file. On Linux, you can use either of these commands: `lzma -d nomadbsd-x.y.z.img.lzma` or `xzcat nomadbsd-x.y.z.img.lzma`. (Be sure to replace x.y.z with the correct file name you just downloaded.)
+
+Before we proceed, we need to find out the id of your USB drive. (Hopefully, you have inserted it by now.) I use the `lsblk` command to find my USB drive, which in my case is `sdb`. To write the image file, use this command `sudo dd if=nomadbsd-x.y.z.img of=/dev/sdb bs=1M conv=sync`. (Again, don’t forget to correct the file name.) If you are uncomfortable using `dd`, you can use [Etcher][12]. If you have Windows, you will need to use [7-zip][13] to extract the image file and Etcher or [Rufus][14] to write the image to the USB drive.
+
+When you boot from the USB drive, you will encounter a simple config tool. Once you answer the required questions, you will be greeted with a simple Openbox desktop.
+
+### Thoughts on NomadBSD
+
+I first discovered NomadBSD back in January when they released 1.2-RC1. At the time, I had been unable to install [Project Trident][15] on my laptop and was very frustrated with BSDs. I downloaded NomadBSD and tried it out. I initially ran into issues reaching the desktop, but RC2 fixed that issue. However, I was unable to get on the internet, even though I had an Ethernet cable plugged in. Luckily, I found the wifi manager in the menu and was able to connect to my wifi.
+
+Overall, my experience with NomadBSD was pleasant. Once I figured out a few things, I was good to go. I hope that NomadBSD is the first of a new generation of BSDs that focus on mobility and ease of use. BSD has conquered the server world, it’s about time they figured out how to be more user-friendly.
+
+Have you ever used NomadBSD? What is your BSD? Please let us know in the comments below.
+
+If you found this article interesting, please take a minute to share it on social media, Hacker News or [Reddit][16].
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/nomadbsd/
+
+作者:[John Paul][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/john/
+[b]: https://github.com/lujun9972
+[1]: https://itsfoss.com/wp-content/uploads/2019/04/NomadBSD-desktop-800x500.jpg
+[2]: http://nomadbsd.org/
+[3]: http://openbox.org/wiki/Main_Page
+[4]: https://freeshell.de/%7Emk/projects/dsb.html
+[5]: https://github.com/mrclksr
+[6]: http://nomadbsd.org/contact.html
+[7]: https://itsfoss.com/netflix-freebsd-cdn/
+[8]: http://nomadbsd.org/download/nomadbsd-1.2.manifest
+[9]: https://itsfoss.com/wp-content/uploads/2019/04/NomadBSD-Openbox-menu-800x500.jpg
+[10]: https://itsfoss.com/why-use-bsd/
+[11]: http://nomadbsd.org/download.html
+[12]: https://www.balena.io/etcher/
+[13]: https://www.7-zip.org/
+[14]: https://rufus.ie/
+[15]: https://itsfoss.com/project-trident-interview/
+[16]: http://reddit.com/r/linuxusersgroup
diff --git a/sources/tech/20190427 Monitoring CPU and GPU Temperatures on Linux.md b/sources/tech/20190427 Monitoring CPU and GPU Temperatures on Linux.md
new file mode 100644
index 0000000000..89f942ce66
--- /dev/null
+++ b/sources/tech/20190427 Monitoring CPU and GPU Temperatures on Linux.md
@@ -0,0 +1,166 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Monitoring CPU and GPU Temperatures on Linux)
+[#]: via: (https://itsfoss.com/monitor-cpu-gpu-temp-linux/)
+[#]: author: (It's FOSS Community https://itsfoss.com/author/itsfoss/)
+
+Monitoring CPU and GPU Temperatures on Linux
+======
+
+_**Brief: This articles discusses two simple ways of monitoring CPU and GPU temperatures in Linux command line.**_
+
+Because of **[Steam][1]** (including _[Steam Play][2]_ , aka _Proton_ ) and other developments, **GNU/Linux** is becoming the gaming platform of choice for more and more computer users everyday. A good number of users are also going for **GNU/Linux** when it comes to other resource-consuming computing tasks such as [video editing][3] or graphic design ( _Kdenlive_ and _[Blender][4]_ are good examples of programs for these).
+
+Whether you are one of those users or otherwise, you are bound to have wondered how hot your computer’s CPU and GPU can get (even more so if you do overclocking). If that is the case, keep reading. We will be looking at a couple of very simple commands to monitor CPU and GPU temps.
+
+My setup includes a [Slimbook Kymera][5] and two displays (a TV set and a PC monitor) which allows me to use one for playing games and the other to keep an eye on the temperatures. Also, since I use [Zorin OS][6] I will be focusing on **Ubuntu** and **Ubuntu** derivatives.
+
+To monitor the behaviour of both CPU and GPU we will be making use of the useful `watch` command to have dynamic readings every certain number of seconds.
+
+![][7]
+
+### Monitoring CPU Temperature in Linux
+
+For CPU temps, we will combine `watch` with the `sensors` command. An interesting article about a [gui version of this tool has already been covered on It’s FOSS][8]. However, we will use the terminal version here:
+
+```
+watch -n 2 sensors
+```
+
+`watch` guarantees that the readings will be updated every 2 seconds (and this value can — of course — be changed to what best fit your needs):
+
+```
+Every 2,0s: sensors
+
+iwlwifi-virtual-0
+Adapter: Virtual device
+temp1: +39.0°C
+
+acpitz-virtual-0
+Adapter: Virtual device
+temp1: +27.8°C (crit = +119.0°C)
+temp2: +29.8°C (crit = +119.0°C)
+
+coretemp-isa-0000
+Adapter: ISA adapter
+Package id 0: +37.0°C (high = +82.0°C, crit = +100.0°C)
+Core 0: +35.0°C (high = +82.0°C, crit = +100.0°C)
+Core 1: +35.0°C (high = +82.0°C, crit = +100.0°C)
+Core 2: +33.0°C (high = +82.0°C, crit = +100.0°C)
+Core 3: +36.0°C (high = +82.0°C, crit = +100.0°C)
+Core 4: +37.0°C (high = +82.0°C, crit = +100.0°C)
+Core 5: +35.0°C (high = +82.0°C, crit = +100.0°C)
+```
+
+Amongst other things, we get the following information:
+
+ * We have 5 cores in use at the moment (with the current highest temperature being 37.0ºC).
+ * Values higher than 82.0ºC are considered high.
+ * A value over 100.0ºC is deemed critical.
+
+
+
+[][9]
+
+Suggested read Top 10 Command Line Games For Linux
+
+The values above lead us to the conclusion that the computer’s workload is very light at the moment.
+
+### Monitoring GPU Temperature in Linux
+
+Let us turn to the graphics card now. I have never used an **AMD** dedicated graphics card, so I will be focusing on **Nvidia** ones. The first thing to do is download the appropriate, current driver through [additional drivers in Ubuntu][10].
+
+On **Ubuntu** (and its forks such as **Zorin** or **Linux Mint** ), going to _Software & Updates_ > _Additional Drivers_ and selecting the most recent one normally suffices. Additionally, you can add/enable the official _ppa_ for graphics cards (either through the command line or via _Software & Updates_ > _Other Software_ ). After installing the driver you will have at your disposal the _Nvidia X Server_ gui application along with the command line utility _nvidia-smi_ (Nvidia System Management Interface). So we will use `watch` and `nvidia-smi`:
+
+```
+watch -n 2 nvidia-smi
+```
+
+And — the same as for the CPU — we will get updated readings every two seconds:
+
+```
+Every 2,0s: nvidia-smi
+
+Fri Apr 19 20:45:30 2019
++-----------------------------------------------------------------------------+
+| Nvidia-SMI 418.56 Driver Version: 418.56 CUDA Version: 10.1 |
+|-------------------------------+----------------------+----------------------+
+| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
+| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
+|===============================+======================+======================|
+| 0 GeForce GTX 106... Off | 00000000:01:00.0 On | N/A |
+| 0% 54C P8 10W / 120W | 433MiB / 6077MiB | 4% Default |
++-------------------------------+----------------------+----------------------+
+
++-----------------------------------------------------------------------------+
+| Processes: GPU Memory |
+| GPU PID Type Process name Usage |
+|=============================================================================|
+| 0 1557 G /usr/lib/xorg/Xorg 190MiB |
+| 0 1820 G /usr/bin/gnome-shell 174MiB |
+| 0 7820 G ...equest-channel-token=303407235874180773 65MiB |
++-----------------------------------------------------------------------------+
+```
+
+The chart gives the following information about the graphics card:
+
+ * it is using the open source driver version 418.56.
+ * the current temperature of the card is 54.0ºC — with the fan at 0% of its capacity.
+ * the power consumption is very low: only 10W.
+ * out of 6 GB of vram (video random access memory), it is only using 433 MB.
+ * the used vram is being taken by three processes whose IDs are — respectively — 1557, 1820 and 7820.
+
+
+
+[][11]
+
+Suggested read Googler: Now You Can Google From Linux Terminal!
+
+Most of these facts/values show that — clearly — we are not playing any resource-consuming games or dealing with heavy workloads. Should we started playing a game, processing a video — or the like —, the values would start to go up.
+
+#### Conclusion
+
+Althoug there are gui tools, I find these two commands very handy to check on your hardware in real time.
+
+What do you make of them? You can learn more about the utilities involved by reading their man pages.
+
+Do you have other preferences? Share them with us in the comments, ;).
+
+Halof!!! (Have a lot of fun!!!).
+
+![avatar][12]
+
+### Alejandro Egea-Abellán
+
+It’s FOSS Community Contributor
+
+I developed a liking for electronics, linguistics, herpetology and computers (particularly GNU/Linux and FOSS). I am LPIC-2 certified and currently work as a technical consultant and Moodle administrator in the Department for Lifelong Learning at the Ministry of Education in Murcia, Spain. I am a firm believer in lifelong learning, the sharing of knowledge and computer-user freedom.
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/monitor-cpu-gpu-temp-linux/
+
+作者:[It's FOSS Community][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/itsfoss/
+[b]: https://github.com/lujun9972
+[1]: https://itsfoss.com/install-steam-ubuntu-linux/
+[2]: https://itsfoss.com/steam-play-proton/
+[3]: https://itsfoss.com/best-video-editing-software-linux/
+[4]: https://www.blender.org/
+[5]: https://slimbook.es/
+[6]: https://zorinos.com/
+[7]: https://itsfoss.com/wp-content/uploads/2019/04/monitor-cpu-gpu-temperature-linux-800x450.png
+[8]: https://itsfoss.com/check-laptop-cpu-temperature-ubuntu/
+[9]: https://itsfoss.com/best-command-line-games-linux/
+[10]: https://itsfoss.com/install-additional-drivers-ubuntu/
+[11]: https://itsfoss.com/review-googler-linux/
+[12]: https://itsfoss.com/wp-content/uploads/2019/04/EGEA-ABELLAN-Alejandro.jpg
diff --git a/sources/tech/20190428 Installing Budgie Desktop on Ubuntu -Quick Guide.md b/sources/tech/20190428 Installing Budgie Desktop on Ubuntu -Quick Guide.md
new file mode 100644
index 0000000000..11659592fb
--- /dev/null
+++ b/sources/tech/20190428 Installing Budgie Desktop on Ubuntu -Quick Guide.md
@@ -0,0 +1,116 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Installing Budgie Desktop on Ubuntu [Quick Guide])
+[#]: via: (https://itsfoss.com/install-budgie-ubuntu/)
+[#]: author: (Atharva Lele https://itsfoss.com/author/atharva/)
+
+Installing Budgie Desktop on Ubuntu [Quick Guide]
+======
+
+_**Brief: Learn how to install Budgie desktop on Ubuntu in this step-by-step tutorial.**_
+
+Among all the [various Ubuntu versions][1], [Ubuntu Budgie][2] is the most underrated one. It looks elegant and it’s not heavy on resources.
+
+Read this [Ubuntu Budgie review][3] or simply watch this video to see what Ubuntu Budgie 18.04 looks like.
+
+[Subscribe to our YouTube channel for more Linux Videos][4]
+
+If you like [Budgie desktop][5] but you are using some other version of Ubuntu such as the default Ubuntu with GNOME desktop, I have good news for you. You can install Budgie on your current Ubuntu system and switch the desktop environments.
+
+In this post, I’m going to tell you exactly how to do that. But first, a little introduction to Budgie for those who are unaware about it.
+
+Budgie desktop environment is developed mainly by [Solus Linux team.][6] It is designed with focus on elegance and modern usage. Budgie is available for all major Linux distributions for users to try and experience this new desktop environment. Budgie is pretty mature by now and provides a great desktop experience.
+
+Warning
+
+Installing multiple desktops on the same system MAY result in conflicts and you may see some issue like missing icons in the panel or multiple icons of the same program.
+
+You may not see any issue at all as well. It’s your call if you want to try different desktop.
+
+### Install Budgie on Ubuntu
+
+This method is not tested on Linux Mint, so I recommend that you not follow this guide for Mint.
+
+For those on Ubuntu, Budgie is now a part of the Ubuntu repositories by default. Hence, we don’t need to add any PPAs in order to get Budgie.
+
+To install Budgie, simply run this command in terminal. We’ll first make sure that the system is fully updated.
+
+```
+sudo apt update && sudo apt upgrade
+sudo apt install ubuntu-budgie-desktop
+```
+
+When everything is done downloading, you will get a prompt to choose your display manager. Select ‘lightdm’ to get the full Budgie experience.
+
+![Select lightdm][7]
+
+After the installation is complete, reboot your computer. You will be then greeted by the Budgie login screen. Enter your password to go into the homescreen.
+
+![Budgie Desktop Home][8]
+
+### Switching to other desktop environments
+
+![Budgie login screen][9]
+
+You can click the Budgie icon next to your name to get options for login. From there you can select between the installed Desktop Environments (DEs). In my case, I see Budgie and the default Ubuntu (GNOME) DEs.
+
+![Select your DE][10]
+
+Hence whenever you feel like logging into GNOME, you can do so using this menu.
+
+[][11]
+
+Suggested read Get Rid of 'snapd returned status code 400: Bad Request' Error in Ubuntu
+
+### How to Remove Budgie
+
+If you don’t like Budgie or just want to go back to your regular old Ubuntu, you can switch back to your regular desktop as described in the above section.
+
+However, if you really want to remove Budgie and its component, you can follow the following commands to get back to a clean slate.
+
+_**Switch to some other desktop environments before using these commands:**_
+
+```
+sudo apt remove ubuntu-budgie-desktop ubuntu-budgie* lightdm
+sudo apt autoremove
+sudo apt install --reinstall gdm3
+```
+
+After running all the commands successfully, reboot your computer.
+
+Now, you will be back to GNOME or whichever desktop environment you had.
+
+**What you think of Budgie?**
+
+Budgie is one of the [best desktop environments for Linux][12]. Hope this short guide helped you install the awesome Budgie desktop on your Ubuntu system.
+
+If you did install Budgie, what do you like about it the most? Let us know in the comments below. And as usual, any questions or suggestions are always welcome.
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/install-budgie-ubuntu/
+
+作者:[Atharva Lele][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/atharva/
+[b]: https://github.com/lujun9972
+[1]: https://itsfoss.com/which-ubuntu-install/
+[2]: https://ubuntubudgie.org/
+[3]: https://itsfoss.com/ubuntu-budgie-18-review/
+[4]: https://www.youtube.com/c/itsfoss?sub_confirmation=1
+[5]: https://github.com/solus-project/budgie-desktop
+[6]: https://getsol.us/home/
+[7]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/04/budgie_install_select_dm.png?fit=800%2C559&ssl=1
+[8]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/04/budgie_homescreen.jpg?fit=800%2C500&ssl=1
+[9]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/04/budgie_install_lockscreen.png?fit=800%2C403&ssl=1
+[10]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/04/budgie_install_lockscreen_select_de.png?fit=800%2C403&ssl=1
+[11]: https://itsfoss.com/snapd-error-ubuntu/
+[12]: https://itsfoss.com/best-linux-desktop-environments/
diff --git a/sources/tech/20190429 Awk utility in Fedora.md b/sources/tech/20190429 Awk utility in Fedora.md
new file mode 100644
index 0000000000..21e40641f7
--- /dev/null
+++ b/sources/tech/20190429 Awk utility in Fedora.md
@@ -0,0 +1,177 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Awk utility in Fedora)
+[#]: via: (https://fedoramagazine.org/awk-utility-in-fedora/)
+[#]: author: (Stephen Snow https://fedoramagazine.org/author/jakfrost/)
+
+Awk utility in Fedora
+======
+
+![][1]
+
+Fedora provides _awk_ as part of its default installation, including all its editions, including the immutable ones like Silverblue. But you may be asking, what is _awk_ and why would you need it?
+
+_Awk_ is a data driven programming language that acts when it matches a pattern. On Fedora, and most other distributions, GNU _awk_ or _gawk_ is used. Read on for more about this language and how to use it.
+
+### A brief history of awk
+
+_Awk_ began at Bell Labs in 1977. Its name is an acronym from the initials of the designers: Alfred V. Aho, Peter J. Weinberger, and Brian W. Kernighan.
+
+> The specification for _awk_ in the POSIX Command Language and Utilities standard further clarified the language. Both the _gawk_ designers and the original _awk_ designers at Bell Laboratories provided feedback for the POSIX specification.
+>
+> From [The GNU Awk User’s Guide][2]
+
+For a more in-depth look at how _awk/gawk_ ended up being as powerful and useful as it is, follow the link above. Numerous individuals have contributed to the current state of _gawk_. Among those are:
+
+ * Arnold Robbins and David Trueman, the creators of _gawk_
+ * Michael Brennan, the creator of _mawk_ , which later was merged with _gawk_
+ * Jurgen Kahrs, who added networking capabilities to _gawk_ in 1997
+ * John Hague, who rewrote the _gawk_ internals and added an _awk_ -level debugger in 2011
+
+
+
+### Using awk
+
+The following sections show various ways of using _awk_ in Fedora.
+
+#### At the command line
+
+The simples way to invoke _awk_ is at the command line. You can search a text file for a particular pattern, and if found, print out the line(s) of the file that match the pattern anywhere. As an example, use _cat_ to take a look at the command history file in your home director:
+
+```
+$ cat ~/.bash_history
+```
+
+There are probably many lines scrolling by right now.
+
+_Awk_ helps with this type of file quite easily. Instead of printing the entire file out to the terminal like _cat_ , you can use _awk_ to find something of specific interest. For this example, type the following at the command line if you’re running a standard Fedora edition:
+
+```
+$ awk '/dnf/' ~/.bash_history
+```
+
+If you’re running Silverblue, try this instead:
+
+```
+$ awk '/rpm-ostree/' ~/.bash_history
+```
+
+In both cases, more data likely appears than what you really want. That’s no problem for _awk_ since it can accept regular expressions. Using the previous example, you can change the pattern to more closely match search requirements of wanting to know about installs only. Try changing the search pattern to one of these:
+
+```
+$ awk '/rpm-ostree install/' ~/.bash_history
+$ awk '/dnf install/' ~/.bash_history
+```
+
+All the entries of your bash command line history appear that have the pattern specified at any position along the line. Awk works on one line of a data file at a time. It matches pattern, then performs an action, then moves to next line until the end of file (EOF) is reached.
+
+#### From an _awk_ program
+
+Using awk at the command line as above is not much different than piping output to _grep_ , like this:
+
+```
+$ cat .bash_history | grep 'dnf install'
+```
+
+The end result of printing to standard output ( _stdout_ ) is the same with both methods.
+
+Awk is a programming language, and the command _awk_ is an interpreter of that language. The real power and flexibility of _awk_ is you can make programs with it, and combine them with shell scripts to create even more powerful programs. For more feature rich development with _awk_ , you can also incorporate C or C++ code using [Dynamic-Extensions][3].
+
+Next, to show the power of _awk_ , let’s make a couple of program files to print the header and draw five numbers for the first row of a bingo card. To do this we’ll create two awk program files.
+
+The first file prints out the header of the bingo card. For this example it is called _bingo-title.awk_. Use your favorite editor to save this text as that file name:
+```
+
+```
+
+BEGIN {
+print "B\tI\tN\tG\tO"
+}
+```
+
+```
+
+Now the title program is ready. You could try it out with this command:
+
+```
+$ awk -f bingo-title.awk
+```
+
+The program prints the word BINGO, with a tab space ( _\t_ ) between the characters. For the number selection, let’s use one of awk’s builtin numeric functions called _rand()_ and use two of the control statements, _for_ and _switch._ (Except the editor changed my program, so no switch statement used this time).
+
+The title of the second awk program is _bingo-num.awk_. Enter the following into your favorite editor and save with that file name:
+```
+
+```
+
+@include "bingo-title.awk"
+BEGIN {
+for (i = 1; i < = 5; i++) {
+b = int(rand() * 15) + (15*(i-1))
+printf "%s\t", b
+}
+print
+}
+```
+
+```
+
+The _@include_ statement in the file tells the interpreter to process the included file first. In this case the interpreter processs the _bingo-title.awk_ file so the title prints out first.
+
+#### Running the test program
+
+Now enter the command to pick a row of bingo numbers:
+
+```
+$ awk -f bingo-num.awk
+```
+
+Output appears similar to the following. Note that the _rand()_ function in _awk_ is not ideal for truly random numbers. It’s used here only as for example purposes.
+```
+
+```
+
+$ awk -f bingo-num.awk
+B I N G O
+13 23 34 53 71
+```
+
+```
+
+In the example, we created two programs with only beginning sections that used actions to manipulate data generated from within the awk program. In order to satisfy the rules of Bingo, more work is needed to achieve the desirable results. The reader is encouraged to fix the programs so they can reliably pick bingo numbers, maybe look at the awk function _srand()_ for answers on how that could be done.
+
+### Final examples
+
+_Awk_ can be useful even for mundane daily search tasks that you encounter, like listing all _flatpak’s_ on the _Flathub_ repository from _org.gnome_ (providing you have the Flathub repository setup). The command to do that would be:
+
+```
+$ flatpak remote-ls flathub --system | awk /org.gnome/
+```
+
+A listing appears that shows all output from _remote-ls_ that matches the _org.gnome_ pattern. To see flatpaks already installed from org.gnome, enter this command:
+
+```
+$ flatpak list --system | awk /org.gnome/
+```
+
+Awk is a powerful and flexible programming language that fills a niche with text file manipulation exceedingly well.
+
+--------------------------------------------------------------------------------
+
+via: https://fedoramagazine.org/awk-utility-in-fedora/
+
+作者:[Stephen Snow][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://fedoramagazine.org/author/jakfrost/
+[b]: https://github.com/lujun9972
+[1]: https://fedoramagazine.org/wp-content/uploads/2019/04/awk-816x345.jpg
+[2]: https://www.gnu.org/software/gawk/manual/gawk.html#Foreword3
+[3]: https://www.gnu.org/software/gawk/manual/gawk.html#Dynamic-Extensions
diff --git a/sources/tech/20190429 How To Turn On And Shutdown The Raspberry Pi -Absolute Beginner Tip.md b/sources/tech/20190429 How To Turn On And Shutdown The Raspberry Pi -Absolute Beginner Tip.md
new file mode 100644
index 0000000000..ce667a1dff
--- /dev/null
+++ b/sources/tech/20190429 How To Turn On And Shutdown The Raspberry Pi -Absolute Beginner Tip.md
@@ -0,0 +1,111 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (How To Turn On And Shutdown The Raspberry Pi [Absolute Beginner Tip])
+[#]: via: (https://itsfoss.com/turn-on-raspberry-pi/)
+[#]: author: (Chinmay https://itsfoss.com/author/chinmay/)
+
+How To Turn On And Shutdown The Raspberry Pi [Absolute Beginner Tip]
+======
+
+_**Brief: This quick tip teaches you how to turn on Raspberry Pi and how to shut it down properly afterwards.**_
+
+The [Raspberry Pi][1] is one of the [most popular SBC (Single-Board-Computer)][2]. If you are interested in this topic, I believe that you’ve finally got a Pi device. I also advise to get all the [additional Raspberry Pi accessories][3] to get started with your device.
+
+You’re ready to turn it on and start to tinker around with it. It has it’s own similarities and differences compared to traditional computers like desktops and laptops.
+
+Today, let’s go ahead and learn how to turn on and shutdown a Raspberry Pi as it doesn’t really feature a ‘power button’ of sorts.
+
+For this article I’m using a Raspberry Pi 3B+, but it’s the same for all the Raspberry Pi variants.
+
+Bestseller No. 1
+
+[][4]
+
+[CanaKit Raspberry Pi 3 B+ (B Plus) Starter Kit (32 GB EVO+ Edition, Premium Black Case)][4]
+
+CanaKit - Personal Computers
+
+$79.99 [][5]
+
+Bestseller No. 2
+
+[][6]
+
+[CanaKit Raspberry Pi 3 B+ (B Plus) with Premium Clear Case and 2.5A Power Supply][6]
+
+CanaKit - Personal Computers
+
+$54.99 [][5]
+
+### Turn on Raspberry Pi
+
+![Micro USB port for Power][7]
+
+The micro USB port powers the Raspberry Pi, the way you turn it on is by plugging in the power cable into the micro USB port. But, before you do that you should make sure that you have done the following things.
+
+ * Preparing the micro SD card with Raspbian according to the official [guide][8] and inserting into the micro SD card slot.
+ * Plugging in the HDMI cable, USB keyboard and a Mouse.
+ * Plugging in the Ethernet Cable(Optional).
+
+
+
+Once you have done the above, plug in the power cable. This turns on the Raspberry Pi and the display will light up and load the Operating System.
+
+Bestseller No. 1
+
+[][4]
+
+[CanaKit Raspberry Pi 3 B+ (B Plus) Starter Kit (32 GB EVO+ Edition, Premium Black Case)][4]
+
+CanaKit - Personal Computers
+
+$79.99 [][5]
+
+### Shutting Down the Pi
+
+Shutting down the Pi is pretty straight forward, click the menu button and choose shutdown.
+
+![Turn off Raspberry Pi graphically][9]
+
+Alternatively, you can use the [shutdown command][10] in the terminal:
+
+```
+sudo shutdown now
+```
+
+Once the shutdown process has started **wait** till it completely finishes and then you can cut the power to it. Once the Pi shuts down, there is no real way to turn the Pi back on without turning off and turning on the power. You could the GPIO’s to turn on the Pi from the shutdown state but it’ll require additional modding.
+
+[][2]
+
+Suggested read 12 Single Board Computers: Alternative to Raspberry Pi
+
+_Note: Micro USB ports tend to be fragile, hence turn-off/on the power at source instead of frequently unplugging and plugging into the micro USB port._
+
+Well, that’s about all you should know about turning on and shutting down the Pi, what do you plan to use it for? Let me know in the comments.
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/turn-on-raspberry-pi/
+
+作者:[Chinmay][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/chinmay/
+[b]: https://github.com/lujun9972
+[1]: https://www.raspberrypi.org/
+[2]: https://itsfoss.com/raspberry-pi-alternatives/
+[3]: https://itsfoss.com/things-you-need-to-get-your-raspberry-pi-working/
+[4]: https://www.amazon.com/CanaKit-Raspberry-Starter-Premium-Black/dp/B07BCC8PK7?SubscriptionId=AKIAJ3N3QBK3ZHDGU54Q&tag=chmod7mediate-20&linkCode=xm2&camp=2025&creative=165953&creativeASIN=B07BCC8PK7&keywords=raspberry%20pi%20kit (CanaKit Raspberry Pi 3 B+ (B Plus) Starter Kit (32 GB EVO+ Edition, Premium Black Case))
+[5]: https://www.amazon.com/gp/prime/?tag=chmod7mediate-20 (Amazon Prime)
+[6]: https://www.amazon.com/CanaKit-Raspberry-Premium-Clear-Supply/dp/B07BC7BMHY?SubscriptionId=AKIAJ3N3QBK3ZHDGU54Q&tag=chmod7mediate-20&linkCode=xm2&camp=2025&creative=165953&creativeASIN=B07BC7BMHY&keywords=raspberry%20pi%20kit (CanaKit Raspberry Pi 3 B+ (B Plus) with Premium Clear Case and 2.5A Power Supply)
+[7]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/04/raspberry-pi-3-microusb.png?fit=800%2C532&ssl=1
+[8]: https://www.raspberrypi.org/documentation/installation/installing-images/README.md
+[9]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/04/Raspbian-ui-menu.jpg?fit=800%2C492&ssl=1
+[10]: https://linuxhandbook.com/linux-shutdown-command/
diff --git a/sources/tech/20190430 The Awesome Fedora 30 is Here- Check Out the New Features.md b/sources/tech/20190430 The Awesome Fedora 30 is Here- Check Out the New Features.md
new file mode 100644
index 0000000000..3d158c7031
--- /dev/null
+++ b/sources/tech/20190430 The Awesome Fedora 30 is Here- Check Out the New Features.md
@@ -0,0 +1,115 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (The Awesome Fedora 30 is Here! Check Out the New Features)
+[#]: via: (https://itsfoss.com/fedora-30/)
+[#]: author: (Abhishek Prakash https://itsfoss.com/author/abhishek/)
+
+The Awesome Fedora 30 is Here! Check Out the New Features
+======
+
+The latest and greatest release of Fedora is here. Fedora 30 brings some visual as well as performance improvements.
+
+Fedora releases a new version every six months and each release is supported for thirteen months.
+
+Before you decide to download or upgrade Fedora, let’s first see what’s new in Fedora 30.
+
+### New Features in Fedora 30
+
+![Fedora 30 Release][1]
+
+Here’s what’s new in the latest release of Fedora.
+
+#### GNOME 3.32 gives a brand new look, features and performance improvement
+
+A lot of visual improvements is brought by the latest release of GNOME.
+
+GNOME 3.32 has refreshed new icons and UI and it almost looks like a brand new version of GNOME.
+
+![Gnome 3.32 icons | Image Credit][2]
+
+GNOME 3.32 also brings several other features like fractional scaling, permission control for each application, granular control on Night Light intensity among many other changes.
+
+GNOME 3.32 also brings some performance improvements. You’ll see faster file and app searches and a smoother scrolling.
+
+#### Improved performance for DNF
+
+Fedora 30 will see a faster [DNF][3] (the default package manager for Fedora) thanks to the [zchunk][4] compression algorithm.
+
+The zchunk algorithm splits the file into independent chunks. This helps in dealing with ‘delta’ or changes as you download only the changed chunks while downloading the new version of a file.
+
+With zcunk, dnf will only download the difference between the metadata of the current version and the earlier versions.
+
+#### Fedora 30 brings two new desktop environments into the fold
+
+Fedora already offers several desktop environment choices. Fedora 30 extends the offering with [elementary OS][5]‘ Pantheon desktop environment and Deepin Linux’ [DeepinDE][6].
+
+So now you can enjoy the looks and feel of elementary OS and Deepin Linux in Fedora. How cool is that!
+
+#### Linux Kernel 5
+
+Fedora 29 has Linux Kernel 5.0.9 version that has improved support for hardware and some performance improvements. You may check out the [features of Linux kernel 5.0 in this article][7].
+
+[][8]
+
+Suggested read The Featureful Release of Nextcloud 14 Has Two New Security Features
+
+#### Updated software
+
+You’ll also get newer versions of software. Some of the major ones are:
+
+ * GCC 9.0.1
+ * [Bash Shell 5.0][9]
+ * GNU C Library 2.29
+ * Ruby 2.6
+ * Golang 1.12
+ * Mesa 19.0.2
+
+
+ * Vagrant 2.2
+ * JDK12
+ * PHP 7.3
+ * Fish 3.0
+ * Erlang 21
+ * Python 3.7.3
+
+
+
+### Getting Fedora 30
+
+If you are already using Fedora 29 then you can upgrade to the latest release from your current install. You may follow this guide to learn [how to upgrade a Fedora version][10].
+
+Fedora 29 users will still get the updates for seven more months so if you don’t feel like upgrading, you may skip it for now. Fedora 28 users have no choice because Fedora 28 reached end of life next month which means there will be no security or maintenance update anymore. Upgrading to a newer version is no longer a choice.
+
+You always has the option to download the ISO of Fedora 30 and install it afresh. You can download Fedora from its official website. It’s only available for 64-bit systems and the ISO is 1.9 GB in size.
+
+[Download Fedora 30 Workstation][11]
+
+What do you think of Fedora 30? Are you planning to upgrade or at least try it out? Do share your thoughts in the comment section.
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/fedora-30/
+
+作者:[Abhishek Prakash][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/abhishek/
+[b]: https://github.com/lujun9972
+[1]: https://itsfoss.com/wp-content/uploads/2019/04/fedora-30-release-800x450.png
+[2]: https://itsfoss.com/wp-content/uploads/2019/04/gnome-3-32-icons.png
+[3]: https://fedoraproject.org/wiki/DNF?rd=Dnf
+[4]: https://github.com/zchunk/zchunk
+[5]: https://itsfoss.com/elementary-os-juno-features/
+[6]: https://www.deepin.org/en/dde/
+[7]: https://itsfoss.com/linux-kernel-5/
+[8]: https://itsfoss.com/nextcloud-14-release/
+[9]: https://itsfoss.com/bash-5-release/
+[10]: https://itsfoss.com/upgrade-fedora-version/
+[11]: https://getfedora.org/en/workstation/
diff --git a/sources/tech/20190501 Looking into Linux modules.md b/sources/tech/20190501 Looking into Linux modules.md
new file mode 100644
index 0000000000..cb431874d3
--- /dev/null
+++ b/sources/tech/20190501 Looking into Linux modules.md
@@ -0,0 +1,219 @@
+[#]: collector: (lujun9972)
+[#]: translator: (bodhix)
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Looking into Linux modules)
+[#]: via: (https://www.networkworld.com/article/3391362/looking-into-linux-modules.html#tk.rss_all)
+[#]: author: (Sandra Henry-Stocker https://www.networkworld.com/author/Sandra-Henry_Stocker/)
+
+Looking into Linux modules
+======
+The lsmod command can tell you which kernel modules are currently loaded on your system, along with some interesting details about their use.
+![Rob Oo \(CC BY 2.0\)][1]
+
+### What are Linux modules?
+
+Kernel modules are chunks of code that are loaded and unloaded into the kernel as needed, thus extending the functionality of the kernel without requiring a reboot. In fact, unless users inquire about modules using commands like **lsmod** , they won't likely know that anything has changed.
+
+One important thing to understand is that there are _lots_ of modules that will be in use on your Linux system at all times and that a lot of details are available if you're tempted to dive into the details.
+
+One of the prime ways that lsmod is used is to examine modules when a system isn't working properly. However, most of the time, modules load as needed and users don't need to be aware of how they are working.
+
+**[ Also see:[Must-know Linux Commands][2] ]**
+
+### Listing modules
+
+The easiest way to list modules is with the **lsmod** command. While this command provides a lot of detail, this is the most user-friendly output.
+
+```
+$ lsmod
+Module Size Used by
+snd_hda_codec_realtek 114688 1
+snd_hda_codec_generic 77824 1 snd_hda_codec_realtek
+ledtrig_audio 16384 2 snd_hda_codec_generic,snd_hda_codec_realtek
+snd_hda_codec_hdmi 53248 1
+snd_hda_intel 40960 2
+snd_hda_codec 131072 4 snd_hda_codec_generic,snd_hda_codec_hdmi,snd_hda_intel
+ ,snd_hda_codec_realtek
+snd_hda_core 86016 5 snd_hda_codec_generic,snd_hda_codec_hdmi,snd_hda_intel
+ ,snd_hda_codec,snd_hda_codec_realtek
+snd_hwdep 20480 1 snd_hda_codec
+snd_pcm 102400 4 snd_hda_codec_hdmi,snd_hda_intel,snd_hda_codec,snd_hda
+ _core
+snd_seq_midi 20480 0
+snd_seq_midi_event 16384 1 snd_seq_midi
+dcdbas 20480 0
+snd_rawmidi 36864 1 snd_seq_midi
+snd_seq 69632 2 snd_seq_midi,snd_seq_midi_event
+coretemp 20480 0
+snd_seq_device 16384 3 snd_seq,snd_seq_midi,snd_rawmidi
+snd_timer 36864 2 snd_seq,snd_pcm
+kvm_intel 241664 0
+kvm 626688 1 kvm_intel
+radeon 1454080 10
+irqbypass 16384 1 kvm
+joydev 24576 0
+input_leds 16384 0
+ttm 102400 1 radeon
+drm_kms_helper 180224 1 radeon
+drm 475136 13 drm_kms_helper,radeon,ttm
+snd 81920 15 snd_hda_codec_generic,snd_seq,snd_seq_device,snd_hda
+ _codec_hdmi,snd_hwdep,snd_hda_intel,snd_hda_codec,snd
+ _hda_codec_realtek,snd_timer,snd_pcm,snd_rawmidi
+i2c_algo_bit 16384 1 radeon
+fb_sys_fops 16384 1 drm_kms_helper
+syscopyarea 16384 1 drm_kms_helper
+serio_raw 20480 0
+sysfillrect 16384 1 drm_kms_helper
+sysimgblt 16384 1 drm_kms_helper
+soundcore 16384 1 snd
+mac_hid 16384 0
+sch_fq_codel 20480 2
+parport_pc 40960 0
+ppdev 24576 0
+lp 20480 0
+parport 53248 3 parport_pc,lp,ppdev
+ip_tables 28672 0
+x_tables 40960 1 ip_tables
+autofs4 45056 2
+raid10 57344 0
+raid456 155648 0
+async_raid6_recov 24576 1 raid456
+async_memcpy 20480 2 raid456,async_raid6_recov
+async_pq 24576 2 raid456,async_raid6_recov
+async_xor 20480 3 async_pq,raid456,async_raid6_recov
+async_tx 20480 5 async_pq,async_memcpy,async_xor,raid456,async_raid6_re
+ cov
+xor 24576 1 async_xor
+raid6_pq 114688 3 async_pq,raid456,async_raid6_recov
+libcrc32c 16384 1 raid456
+raid1 45056 0
+raid0 24576 0
+multipath 20480 0
+linear 20480 0
+hid_generic 16384 0
+psmouse 151552 0
+i2c_i801 32768 0
+pata_acpi 16384 0
+lpc_ich 24576 0
+usbhid 53248 0
+hid 126976 2 usbhid,hid_generic
+e1000e 245760 0
+floppy 81920 0
+```
+
+In the output above:
+
+ * "Module" shows the name of each module
+ * "Size" shows the module size (not how much memory it is using)
+ * "Used by" shows each module's usage count and the referring modules
+
+
+
+Clearly, that's a _lot_ of modules. The number of modules loaded will depend on your system and distribution and what's running. We can count them like this:
+
+```
+$ lsmod | wc -l
+67
+```
+
+To see the number of modules available on the system (not just running), try this command:
+
+```
+$ modprobe -c | wc -l
+41272
+```
+
+### Other commands for examining modules
+
+Linux provides several commands for listing, loading and unloading, examining, and checking the status of modules.
+
+ * depmod -- generates modules.dep and map files
+ * insmod -- a simple program to insert a module into the Linux Kernel
+ * lsmod -- show the status of modules in the Linux Kernel
+ * modinfo -- show information about a Linux Kernel module
+ * modprobe -- add and remove modules from the Linux Kernel
+ * rmmod -- a simple program to remove a module from the Linux Kernel
+
+
+
+### Listing modules that are built in
+
+As mentioned above, the **lsmod** command is the most convenient command for listing modules. There are, however, other ways to examine them. The modules.builtin file lists all modules that are built into the kernel and is used by modprobe when trying to load one of these modules. Note that **$(uname -r)** in the commands below provides the name of the kernel release.
+
+```
+$ more /lib/modules/$(uname -r)/modules.builtin | head -10
+kernel/arch/x86/crypto/crc32c-intel.ko
+kernel/arch/x86/events/intel/intel-uncore.ko
+kernel/arch/x86/platform/intel/iosf_mbi.ko
+kernel/mm/zpool.ko
+kernel/mm/zbud.ko
+kernel/mm/zsmalloc.ko
+kernel/fs/binfmt_script.ko
+kernel/fs/mbcache.ko
+kernel/fs/configfs/configfs.ko
+kernel/fs/crypto/fscrypto.ko
+```
+
+You can get some additional detail on a module by using the **modinfo** command, though nothing that qualifies as an easy explanation of what service the module provides. The omitted details from the output below include a lengthy signature.
+
+```
+$ modinfo floppy | head -16
+filename: /lib/modules/5.0.0-13-generic/kernel/drivers/block/floppy.ko
+alias: block-major-2-*
+license: GPL
+author: Alain L. Knaff
+srcversion: EBEAA26742DF61790588FD9
+alias: acpi*:PNP0700:*
+alias: pnp:dPNP0700*
+depends:
+retpoline: Y
+intree: Y
+name: floppy
+vermagic: 5.0.0-13-generic SMP mod_unload
+sig_id: PKCS#7
+signer:
+sig_key:
+sig_hashalgo: md4
+```
+
+You can load or unload a module using the **modprobe** command. Using a command like the one below, you can locate the kernel object associated with a particular module:
+
+```
+$ find /lib/modules/$(uname -r) -name floppy*
+/lib/modules/5.0.0-13-generic/kernel/drivers/block/floppy.ko
+```
+
+If you needed to load the module, you could use a command like this one:
+
+```
+$ sudo modprobe floppy
+```
+
+### Wrap-up
+
+Clearly the loading and unloading of modules is a big deal. It makes Linux systems considerably more flexible and efficient than if they ran with a one-size-fits-all kernel. It also means you can make significant changes — including adding hardware — without rebooting.
+
+**[ Two-Minute Linux Tips:[Learn how to master a host of Linux commands in these 2-minute video tutorials][3] ]**
+
+Join the Network World communities on [Facebook][4] and [LinkedIn][5] to comment on topics that are top of mind.
+
+--------------------------------------------------------------------------------
+
+via: https://www.networkworld.com/article/3391362/looking-into-linux-modules.html#tk.rss_all
+
+作者:[Sandra Henry-Stocker][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.networkworld.com/author/Sandra-Henry_Stocker/
+[b]: https://github.com/lujun9972
+[1]: https://images.idgesg.net/images/article/2019/04/modules-100794941-large.jpg
+[2]: https://www.networkworld.com/article/3391029/must-know-linux-commands.html
+[3]: https://www.youtube.com/playlist?list=PL7D2RMSmRO9J8OTpjFECi8DJiTQdd4hua
+[4]: https://www.facebook.com/NetworkWorld/
+[5]: https://www.linkedin.com/company/network-world
diff --git a/sources/tech/20190502 Crowdsourcing license compliance with ClearlyDefined.md b/sources/tech/20190502 Crowdsourcing license compliance with ClearlyDefined.md
new file mode 100644
index 0000000000..fe36e37b9c
--- /dev/null
+++ b/sources/tech/20190502 Crowdsourcing license compliance with ClearlyDefined.md
@@ -0,0 +1,99 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Crowdsourcing license compliance with ClearlyDefined)
+[#]: via: (https://opensource.com/article/19/5/license-compliance-clearlydefined)
+[#]: author: (Jeff McAffer https://opensource.com/users/jeffmcaffer)
+
+Crowdsourcing license compliance with ClearlyDefined
+======
+Licensing is what holds open source together, and ClearlyDefined takes
+the mystery out of projects' licenses, copyright, and source location.
+![][1]
+
+Open source use continues to skyrocket, not just in use cases and scenarios but also in volume. It is trivial for a developer to depend on a 1,000 JavaScript packages from a single run of `npm install` or have thousands of packages in a [Docker][2] image. At the same time, there is increased interest in ensuring license compliance.
+
+Without the right license you may not be able to legally use a software component in the way you intend or may have obligations that run counter to your business model. For instance, a JavaScript package could be marked as [MIT license][3], which allows commercial reuse, while one of its dependencies is licensed has a [copyleft license][4] that requires you give your software away under the same license. Complying means finding the applicable license(s), and assessing and adhering to the terms, which is not too bad for individual components adn can be daunting for large initiatives.
+
+Fortunately, this open source challenge has an open source solution: [ClearlyDefined][5]. ClearlyDefined is a crowdsourced, open source, [Open Source Initiative][6] (OSI) effort to gather, curate, and upstream/normalize data about open source components, such as license, copyright, and source location. This data is the cornerstone of reducing the friction in open source license compliance.
+
+The premise behind ClearlyDefined is simple: we are all struggling to find and understand key information related to the open source we use—whether it is finding the license, knowing who to attribute, or identifying the source that goes with a particular package. Rather than struggling independently, ClearlyDefined allows us to collaborate and share the compliance effort. Moreover, the ClearlyDefined community seeks to upstream any corrections so future releases are more clearly defined and make conventions more explicit to improve community understanding of project intent.
+
+### How it works
+
+![ClearlyDefined's harvest, curate, upstream process][7]
+
+ClearlyDefined monitors the open source ecosystem and automatically harvests relevant data from open source components using a host of open source tools such as [ScanCode][8], [FOSSology][9], and [Licensee][10]. The results are summarized and aggregated to create a _definition_ , which is then surfaced to users via an API and a UI. Each definition includes:
+
+ * Declared license of the component
+ * Licenses and copyrights discovered across all files
+ * Exact source code location to the commit level
+ * Release date
+ * List of embedded components
+
+
+
+Coincidentally (well, not really), this is exactly the data you need to do license compliance.
+
+### Curating
+
+Any given definition may have gaps or imperfections due to tool issues or the data being missing or incorrect at the origin. ClearlyDefined enables users to curate the results by refining the values and filling in the gaps. These contributions are reviewed and merged, as with any open source project. The result is an improved dataset for all to use.
+
+### Getting ahead
+
+To a certain degree, this process is still chasing the problem—analyzing and curating after the packages have already been published. To get ahead of the game, the ClearlyDefined community also feeds merged curations back to the originating projects as pull requests (e.g., adding a license file, clarifying a copyright). This increases the clarity of future release and sets up a virtuous cycle.
+
+### Adapting, not mandating
+
+In doing the analysis, we've found quite a number of approaches to expressing license-related data. Different communities put LICENSE files in different places or have different practices around attribution. The ClearlyDefined philosophy is to discover these conventions and adapt to them rather than asking the communities to do something different. A side benefit of this is that implicit conventions can be made more explicit, improving clarity for all.
+
+Related to this, ClearlyDefined is careful to not look too hard for this interesting data. If we have to be too smart and infer too much to find the data, then there's a good chance the origin is not all that clear. Instead, we prefer to work with the community to better understand and clarify the conventions being used. From there, we can update the tools accordingly and make it easier to be "clearly defined."
+
+#### NOTICE files
+
+As an added bonus for users, we set up an API and UI for generating NOTICE files, making it trivial for you to comply with the attribution requirements found in most open source licenses. You can give ClearlyDefined a list of components (e.g., _drag and drop an npm package-lock.json file on the UI_ ) and get back a fully formed NOTICE file rendered by one of several renderers (e.g., text, HTML, Handlebars.js template). This is a snap, given that we already have all the compliance data. Big shout out to the [OSS Attribution Builder project][11] for making a simple and pluggable NOTICE renderer we could just pop into the ClearlyDefined service.
+
+### Getting involved
+
+You can get involved with ClearlyDefined in several ways:
+
+ * Become an active user, contributing to your compliance workflow
+ * Review other people's curations using the interface
+ * Get involved in [the code][12] (Node and React)
+ * Ask and answer questions on [our mailing list][13] or [Discord channel][14]
+ * Contribute money to the OSI targeted to ClearlyDefined. We'll use that to fund development and curation.
+
+
+
+We are excited to continue to grow our community of contributors so that licensing can continue to become an understable part of any team's open source adoption. For more information, check out [https://clearlydefined.io][15].
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/5/license-compliance-clearlydefined
+
+作者:[Jeff McAffer][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/jeffmcaffer
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/OSDC_Crowdfunding_520x292_9597717_0612CM.png?itok=lxSKyFXU
+[2]: https://opensource.com/resources/what-docker
+[3]: /article/19/4/history-mit-license
+[4]: /resources/what-is-copyleft
+[5]: https://clearlydefined.io
+[6]: https://opensource.org
+[7]: https://opensource.com/sites/default/files/uploads/clearlydefined.png (ClearlyDefined's harvest, curate, upstream process)
+[8]: https://github.com/nexB/scancode-toolkit
+[9]: https://www.fossology.org/
+[10]: https://github.com/licensee/licensee
+[11]: https://github.com/amzn/oss-attribution-builder
+[12]: https://github.com/clearlydefined
+[13]: mailto:clearlydefined@googlegroups.com
+[14]: %C2%A0https://clearlydefined.io/discord)
+[15]: https://clearlydefined.io/
diff --git a/sources/tech/20190502 The making of the Breaking the Code electronic book.md b/sources/tech/20190502 The making of the Breaking the Code electronic book.md
new file mode 100644
index 0000000000..6786df8549
--- /dev/null
+++ b/sources/tech/20190502 The making of the Breaking the Code electronic book.md
@@ -0,0 +1,62 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (The making of the Breaking the Code electronic book)
+[#]: via: (https://opensource.com/article/19/5/code-book)
+[#]: author: (Alicia Gibb https://opensource.com/users/aliciagibb/users/don-watkins)
+
+The making of the Breaking the Code electronic book
+======
+Offering a safe space for middle school girls to learn technology speaks
+volumes about who should be sitting around the tech table.
+![Open hardware electronic book][1]
+
+I like a good challenge. The [Open Source Stories team][2] came to me with a great one: Create a hardware project where students could create their own thing that would be put together as a larger thing. The students would be middle school girls. My job was to figure out the hardware and make this thing make sense.
+
+After days of sketching out concepts, I was wandering through my local public library, and it dawned on me that the perfect piece of hardware where everyone could design their own part to create something whole is a book! The idea of a book using paper electronics was exciting, simple enough to be taught in a day, and fit the criteria of needing no special equipment, like soldering irons.
+
+!["Breaking the Code" book cover][3]
+
+I designed two parts to the electronics within the book. Half the circuits were developed with copper tape, LEDs, and DIY buttons, and half were developed with LilyPad Arduino microcontrollers, sensors, LEDs, and DIY buttons. Using the electronics in the book, the girls could make pages light up, buzz, or play music using various inputs such as button presses, page turns, or tilting the book.
+
+!['Breaking the Code' interior pages][4]
+
+We worked with young adult author [Lauren Sabel][5] to come up with the story, which features two girls who get locked in the basement of their school and have to solve puzzles to get out. Setting the scene in the basement gave us lots of opportunities to use lights! Along with the story, we received illustrations that the girls enhanced with electronics. The girls got creative, for example, using lights as the skeleton's eyes, not just for the obvious light bulb in the room.
+
+Creating a curriculum that was flexible enough to empower each girl to build her own successfully functioning circuit was a vital piece of the user experience. We chose components so the circuit wouldn't need to be over-engineered. We also used breakout boards and LEDs with built-in resistors so that the circuits allowed flexibility and functioned with only basic knowledge of circuit design—without getting too muddled in the deep end.
+
+!['Breaking the Code' interior pages][6]
+
+The project curriculum gave girls the confidence and skills to understand electronics by building two circuits, in the process learning circuit layout, directional aspects, cause-and-effect through inputs and outputs, and how to identify various components. Controlling electrons by pushing them through a circuit feels a bit like you're controlling a tiny part of the universe. And seeing the girls' faces light up is like seeing a universe of opportunities open in front of them.
+
+!['Breaking the Code' interior pages][7]
+
+The girls were ecstatic to see their work as a completed book, taking pride in their pages and showing others what they had built.
+
+![About 'Breaking the Code'][8]
+
+Teaching them my little corner of the world for the day was a truly empowering experience for me. As a woman in tech, I think this is the right approach for companies trying to change the gender inequalities we see in tech. Offering a safe space to learn—with lots of people in the room who look like you as mentors—speaks volumes about who should be sitting around the tech table.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/5/code-book
+
+作者:[Alicia Gibb][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/aliciagibb/users/don-watkins
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/code_book_electronics_hardware.jpg?itok=zb-zaiwz (Open hardware electronic book)
+[2]: https://www.redhat.com/en/open-source-stories
+[3]: https://opensource.com/sites/default/files/uploads/codebook_cover.jpg ("Breaking the Code" book cover)
+[4]: https://opensource.com/sites/default/files/uploads/codebook_38-39.jpg ('Breaking the Code' interior pages)
+[5]: https://www.amazon.com/Lauren-Sabel/e/B01M0FW223
+[6]: https://opensource.com/sites/default/files/uploads/codebook_lightbulb.jpg ('Breaking the Code' interior pages)
+[7]: https://opensource.com/sites/default/files/uploads/codebook_10-11.jpg ('Breaking the Code' interior pages)
+[8]: https://opensource.com/sites/default/files/uploads/codebook_pg1.jpg (About 'Breaking the Code')
diff --git a/sources/tech/20190503 Mirror your System Drive using Software RAID.md b/sources/tech/20190503 Mirror your System Drive using Software RAID.md
new file mode 100644
index 0000000000..1b5936dfa0
--- /dev/null
+++ b/sources/tech/20190503 Mirror your System Drive using Software RAID.md
@@ -0,0 +1,306 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Mirror your System Drive using Software RAID)
+[#]: via: (https://fedoramagazine.org/mirror-your-system-drive-using-software-raid/)
+[#]: author: (Gregory Bartholomew https://fedoramagazine.org/author/glb/)
+
+Mirror your System Drive using Software RAID
+======
+
+![][1]
+
+Nothing lasts forever. When it comes to the hardware in your PC, most of it can easily be replaced. There is, however, one special-case hardware component in your PC that is not as easy to replace as the rest — your hard disk drive.
+
+### Drive Mirroring
+
+Your hard drive stores your personal data. Some of your data can be backed up automatically by scheduled backup jobs. But those jobs scan the files to be backed up for changes and trying to scan an entire drive would be very resource intensive. Also, anything that you’ve changed since your last backup will be lost if your drive fails. [Drive mirroring][2] is a better way to maintain a secondary copy of your entire hard drive. With drive mirroring, a secondary copy of _all the data_ on your hard drive is maintained _in real time_.
+
+An added benefit of live mirroring your hard drive to a secondary hard drive is that it can [increase your computer’s performance][3]. Because disk I/O is one of your computer’s main performance [bottlenecks][4], the performance improvement can be quite significant.
+
+Note that a mirror is not a backup. It only protects your data from being lost if one of your physical drives fail. Types of failures that drive mirroring, by itself, does not protect against include:
+
+ * [File System Corruption][5]
+ * [Bit Rot][6]
+ * Accidental File Deletion
+ * Simultaneous Failure of all Mirrored Drives (highly unlikely)
+
+
+
+Some of the above can be addressed by other file system features that can be used in conjunction with drive mirroring. File system features that address the above types of failures include:
+
+ * Using a [Journaling][7] or [Log-Structured][8] file system
+ * Using [Checksums][9] ([ZFS][10] , for example, does this automatically and transparently)
+ * Using [Snapshots][11]
+ * Using [BCVs][12]
+
+
+
+This guide will demonstrate one method of mirroring your system drive using the Multiple Disk and Device Administration (mdadm) toolset. Just for fun, this guide will show how to do the conversion without using any extra boot media (CDs, USB drives, etc). For more about the concepts and terminology related to the multiple device driver, you can skim the _md_ man page:
+
+```
+$ man md
+```
+
+### The Procedure
+
+ 1. **Use** [**sgdisk**][13] **to (re)partition the _extra_ drive that you have added to your computer** :
+
+```
+ $ sudo -i
+# MY_DISK_1=/dev/sdb
+# sgdisk --zap-all $MY_DISK_1
+# test -d /sys/firmware/efi/efivars || sgdisk -n 0:0:+1MiB -t 0:ef02 -c 0:grub_1 $MY_DISK_1
+# sgdisk -n 0:0:+1GiB -t 0:ea00 -c 0:boot_1 $MY_DISK_1
+# sgdisk -n 0:0:+4GiB -t 0:fd00 -c 0:swap_1 $MY_DISK_1
+# sgdisk -n 0:0:0 -t 0:fd00 -c 0:root_1 $MY_DISK_1
+```
+
+– If the drive that you will be using for the second half of the mirror in step 12 is smaller than this drive, then you will need to adjust down the size of the last partition so that the total size of all the partitions is not greater than the size of your second drive.
+– A few of the commands in this guide are prefixed with a test for the existence of an _efivars_ directory. This is necessary because those commands are slightly different depending on whether your computer is BIOS-based or UEFI-based.
+
+ 2. **Use** [**mdadm**][14] **to create RAID devices that use the new partitions to store their data** :
+
+```
+ # mdadm --create /dev/md/boot --homehost=any --metadata=1.0 --level=1 --raid-devices=2 /dev/disk/by-partlabel/boot_1 missing
+# mdadm --create /dev/md/swap --homehost=any --metadata=1.0 --level=1 --raid-devices=2 /dev/disk/by-partlabel/swap_1 missing
+# mdadm --create /dev/md/root --homehost=any --metadata=1.0 --level=1 --raid-devices=2 /dev/disk/by-partlabel/root_1 missing
+
+# cat << END > /etc/mdadm.conf
+MAILADDR root
+AUTO +all
+DEVICE partitions
+END
+
+# mdadm --detail --scan >> /etc/mdadm.conf
+```
+
+– The _missing_ parameter tells mdadm to create an array with a missing member. You will add the other half of the mirror in step 14.
+– You should configure [sendmail][15] so you will be notified if a drive fails.
+– You can configure [Evolution][16] to [monitor a local mail spool][17].
+
+ 3. **Use** [**dracut**][18] **to update the initramfs** :
+
+```
+# dracut -f --add mdraid --add-drivers xfs
+```
+
+– Dracut will include the /etc/mdadm.conf file you created in the previous section in your initramfs _unless_ you build your initramfs with the _hostonly_ option set to _no_. If you build your initramfs with the hostonly option set to no, then you should either manually include the /etc/mdadm.conf file, manually specify the UUID’s of the RAID arrays to assemble at boot time with the _rd.md.uuid_ kernel parameter, or specify the _rd.auto_ kernel parameter to have all RAID arrays automatically assembled and started at boot time. This guide will demonstrate the _rd.auto_ option since it is the most generic.
+
+ 4. **Format the RAID devices** :
+
+```
+ # mkfs -t vfat /dev/md/boot
+# mkswap /dev/md/swap
+# mkfs -t xfs /dev/md/root
+```
+
+– The new [Boot Loader Specification][19] states “if the OS is installed on a disk with GPT disk label, and no ESP partition exists yet, a new suitably sized (let’s say 500MB) ESP should be created and should be used as $BOOT” and “$BOOT must be a VFAT (16 or 32) file system”.
+
+ 5. **Reboot and set the _rd.auto_ , _rd.break_ and _single_ kernel parameters** :
+
+```
+# reboot
+```
+
+– You may need to [set your root password][20] before rebooting so that you can get into _single-user mode_ in step 7.
+– See “[Making Temporary Changes to a GRUB 2 Menu][21]” for directions on how to set kernel parameters on compters that use the GRUB 2 boot loader.
+
+ 6. **Use** [**the dracut shell**][18] **to copy the root file system** :
+
+```
+ # mkdir /newroot
+# mount /dev/md/root /newroot
+# shopt -s dotglob
+# cp -ax /sysroot/* /newroot
+# rm -rf /newroot/boot/*
+# umount /newroot
+# exit
+```
+
+– The _dotglob_ flag is set for this bash session so that the [wildcard character][22] will match hidden files.
+– Files are removed from the _boot_ directory because they will be copied to a separate partition in the next step.
+– This copy operation is being done from the dracut shell to insure that no processes are accessing the files while they are being copied.
+
+ 7. **Use _single-user mode_ to copy the non-root file systems** :
+
+```
+ # mkdir /newroot
+# mount /dev/md/root /newroot
+# mount /dev/md/boot /newroot/boot
+# shopt -s dotglob
+# cp -Lr /boot/* /newroot/boot
+# test -d /newroot/boot/efi/EFI && mv /newroot/boot/efi/EFI/* /newroot/boot/efi && rmdir /newroot/boot/efi/EFI
+# test -d /sys/firmware/efi/efivars && ln -sfr /newroot/boot/efi/fedora/grub.cfg /newroot/etc/grub2-efi.cfg
+# cp -ax /home/* /newroot/home
+# exit
+```
+
+– It is OK to run these commands in the dracut shell shown in the previous section instead of doing it from single-user mode. I’ve demonstrated using single-user mode to avoid having to explain how to mount the non-root partitions from the dracut shell.
+– The parameters being past to the _cp_ command for the _boot_ directory are a little different because the VFAT file system doesn’t support symbolic links or Unix-style file permissions.
+– In rare cases, the _rd.auto_ parameter is known to cause LVM to fail to assemble due to a [race condition][23]. If you see errors about your _swap_ or _home_ partition failing to mount when entering single-user mode, simply try again by repeating step 5 but omiting the _rd.break_ paramenter so that you will go directly to single-user mode.
+
+ 8. **Update _fstab_ on the new drive** :
+
+```
+ # cat << END > /newroot/etc/fstab
+/dev/md/root / xfs defaults 0 0
+/dev/md/boot /boot vfat defaults 0 0
+/dev/md/swap swap swap defaults 0 0
+END
+```
+
+ 9. **Configure the boot loader on the new drive** :
+
+```
+ # NEW_GRUB_CMDLINE_LINUX=$(cat /etc/default/grub | sed -n 's/^GRUB_CMDLINE_LINUX="\(.*\)"/\1/ p')
+# NEW_GRUB_CMDLINE_LINUX=${NEW_GRUB_CMDLINE_LINUX//rd.lvm.*([^ ])}
+# NEW_GRUB_CMDLINE_LINUX=${NEW_GRUB_CMDLINE_LINUX//resume=*([^ ])}
+# NEW_GRUB_CMDLINE_LINUX+=" selinux=0 rd.auto"
+# sed -i "/^GRUB_CMDLINE_LINUX=/s/=.*/=\"$NEW_GRUB_CMDLINE_LINUX\"/" /newroot/etc/default/grub
+```
+
+– You can re-enable selinux after this procedure is complete. But you will have to [relabel your file system][24] first.
+
+ 10. **Install the boot loader on the new drive** :
+
+```
+ # sed -i '/^GRUB_DISABLE_OS_PROBER=.*/d' /newroot/etc/default/grub
+# echo "GRUB_DISABLE_OS_PROBER=true" >> /newroot/etc/default/grub
+# MY_DISK_1=$(mdadm --detail /dev/md/boot | grep active | grep -m 1 -o "/dev/sd.")
+# for i in dev dev/pts proc sys run; do mount -o bind /$i /newroot/$i; done
+# chroot /newroot env MY_DISK_1=$MY_DISK_1 bash --login
+# test -d /sys/firmware/efi/efivars || MY_GRUB_DIR=/boot/grub2
+# test -d /sys/firmware/efi/efivars && MY_GRUB_DIR=$(find /boot/efi -type d -name 'fedora' -print -quit)
+# test -e /usr/sbin/grub2-switch-to-blscfg && grub2-switch-to-blscfg --grub-directory=$MY_GRUB_DIR
+# grub2-mkconfig -o $MY_GRUB_DIR/grub.cfg \;
+# test -d /sys/firmware/efi/efivars && test /boot/grub2/grubenv -nt $MY_GRUB_DIR/grubenv && cp /boot/grub2/grubenv $MY_GRUB_DIR/grubenv
+# test -d /sys/firmware/efi/efivars || grub2-install "$MY_DISK_1"
+# logout
+# for i in run sys proc dev/pts dev; do umount /newroot/$i; done
+# test -d /sys/firmware/efi/efivars && efibootmgr -c -d "$MY_DISK_1" -p 1 -l "$(find /newroot/boot -name shimx64.efi -printf '/%P\n' -quit | sed 's!/!\\!g')" -L "Fedora RAID Disk 1"
+```
+
+– The _grub2-switch-to-blscfg_ command is optional. It is only supported on Fedora 29+.
+– The _cp_ command above should not be necessary, but there appears to be a bug in the current version of grub which causes it to write to $BOOT/grub2/grubenv instead of $BOOT/efi/fedora/grubenv on UEFI systems.
+– You can use the following command to verify the contents of the _grub.cfg_ file right after running the _grub2-mkconfig_ command above:
+
+```
+# sed -n '/BEGIN .*10_linux/,/END .*10_linux/ p' $MY_GRUB_DIR/grub.cfg
+```
+
+– You should see references to _mdraid_ and _mduuid_ in the output from the above command if the RAID array was detected properly.
+
+ 11. **Boot off of the new drive** :
+
+```
+# reboot
+```
+
+– How to select the new drive is system-dependent. It usually requires pressing one of the **F12** , **F10** , **Esc** or **Del** keys when you hear the [System OK BIOS beep code][25].
+– On UEFI systems the boot loader on the new drive should be labeled “Fedora RAID Disk 1”.
+
+ 12. **Remove all the volume groups and partitions from your old drive** :
+
+```
+ # MY_DISK_2=/dev/sda
+# MY_VOLUMES=$(pvs | grep $MY_DISK_2 | awk '{print $2}' | tr "\n" " ")
+# test -n "$MY_VOLUMES" && vgremove $MY_VOLUMES
+# sgdisk --zap-all $MY_DISK_2
+```
+
+– **WARNING** : You want to make certain that everything is working properly on your new drive before you do this. A good way to verify that your old drive is no longer being used is to try booting your computer once without the old drive connected.
+– You can add another new drive to your computer instead of erasing your old one if you prefer.
+
+ 13. **Create new partitions on your old drive to match the ones on your new drive** :
+
+```
+ # test -d /sys/firmware/efi/efivars || sgdisk -n 0:0:+1MiB -t 0:ef02 -c 0:grub_2 $MY_DISK_2
+# sgdisk -n 0:0:+1GiB -t 0:ea00 -c 0:boot_2 $MY_DISK_2
+# sgdisk -n 0:0:+4GiB -t 0:fd00 -c 0:swap_2 $MY_DISK_2
+# sgdisk -n 0:0:0 -t 0:fd00 -c 0:root_2 $MY_DISK_2
+```
+
+– It is important that the partitions match in size and type. I prefer to use the _parted_ command to display the partition table because it supports setting the display unit:
+
+```
+ # parted /dev/sda unit MiB print
+# parted /dev/sdb unit MiB print
+```
+
+ 14. **Use mdadm to add the new partitions to the RAID devices** :
+
+```
+ # mdadm --manage /dev/md/boot --add /dev/disk/by-partlabel/boot_2
+# mdadm --manage /dev/md/swap --add /dev/disk/by-partlabel/swap_2
+# mdadm --manage /dev/md/root --add /dev/disk/by-partlabel/root_2
+```
+
+ 15. **Install the boot loader on your old drive** :
+
+```
+ # test -d /sys/firmware/efi/efivars || grub2-install "$MY_DISK_2"
+# test -d /sys/firmware/efi/efivars && efibootmgr -c -d "$MY_DISK_2" -p 1 -l "$(find /boot -name shimx64.efi -printf "/%P\n" -quit | sed 's!/!\\!g')" -L "Fedora RAID Disk 2"
+```
+
+ 16. **Use mdadm to test that email notifications are working** :
+
+```
+# mdadm --monitor --scan --oneshot --test
+```
+
+
+
+
+As soon as your drives have finished synchronizing, you should be able to select either drive when restarting your computer and you will receive the same live-mirrored operating system. If either drive fails, mdmonitor will send an email notification. Recovering from a drive failure is now simply a matter of swapping out the bad drive with a new one and running a few _sgdisk_ and _mdadm_ commands to re-create the mirrors (steps 13 through 15). You will no longer have to worry about losing any data if a drive fails!
+
+### Video Demonstrations
+
+Converting a UEFI PC to RAID1
+
+Converting a BIOS PC to RAID1
+
+ * TIP: Set the the quality to 720p on the above videos for best viewing.
+
+
+
+--------------------------------------------------------------------------------
+
+via: https://fedoramagazine.org/mirror-your-system-drive-using-software-raid/
+
+作者:[Gregory Bartholomew][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://fedoramagazine.org/author/glb/
+[b]: https://github.com/lujun9972
+[1]: https://fedoramagazine.org/wp-content/uploads/2019/05/raid_mirroring-816x345.jpg
+[2]: https://en.wikipedia.org/wiki/Disk_mirroring
+[3]: https://en.wikipedia.org/wiki/Disk_mirroring#Additional_benefits
+[4]: https://en.wikipedia.org/wiki/Bottleneck_(software)
+[5]: https://en.wikipedia.org/wiki/Data_corruption
+[6]: https://en.wikipedia.org/wiki/Data_degradation
+[7]: https://en.wikipedia.org/wiki/Journaling_file_system
+[8]: https://www.quora.com/What-is-the-difference-between-a-journaling-vs-a-log-structured-file-system
+[9]: https://en.wikipedia.org/wiki/File_verification
+[10]: https://en.wikipedia.org/wiki/ZFS#Summary_of_key_differentiating_features
+[11]: https://en.wikipedia.org/wiki/Snapshot_(computer_storage)#File_systems
+[12]: https://en.wikipedia.org/wiki/Business_continuance_volume
+[13]: https://fedoramagazine.org/managing-partitions-with-sgdisk/
+[14]: https://fedoramagazine.org/managing-raid-arrays-with-mdadm/
+[15]: https://fedoraproject.org/wiki/QA:Testcase_Sendmail
+[16]: https://en.wikipedia.org/wiki/Evolution_(software)
+[17]: https://dotancohen.com/howto/root_email.html
+[18]: https://fedoramagazine.org/initramfs-dracut-and-the-dracut-emergency-shell/
+[19]: https://systemd.io/BOOT_LOADER_SPECIFICATION#technical-details
+[20]: https://docs.fedoraproject.org/en-US/Fedora/26/html/System_Administrators_Guide/sec-Changing_and_Resetting_the_Root_Password.html
+[21]: https://docs.fedoraproject.org/en-US/fedora/rawhide/system-administrators-guide/kernel-module-driver-configuration/Working_with_the_GRUB_2_Boot_Loader/#sec-Making_Temporary_Changes_to_a_GRUB_2_Menu
+[22]: https://en.wikipedia.org/wiki/Wildcard_character#File_and_directory_patterns
+[23]: https://en.wikipedia.org/wiki/Race_condition
+[24]: https://wiki.centos.org/HowTos/SELinux#head-867ca18a09f3103705cdb04b7d2581b69cd74c55
+[25]: https://en.wikipedia.org/wiki/Power-on_self-test#Original_IBM_POST_beep_codes
diff --git a/sources/tech/20190503 SuiteCRM- An Open Source CRM Takes Aim At Salesforce.md b/sources/tech/20190503 SuiteCRM- An Open Source CRM Takes Aim At Salesforce.md
new file mode 100644
index 0000000000..63802d4976
--- /dev/null
+++ b/sources/tech/20190503 SuiteCRM- An Open Source CRM Takes Aim At Salesforce.md
@@ -0,0 +1,105 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (SuiteCRM: An Open Source CRM Takes Aim At Salesforce)
+[#]: via: (https://itsfoss.com/suitecrm-ondemand/)
+[#]: author: (Ankush Das https://itsfoss.com/author/ankush/)
+
+SuiteCRM: An Open Source CRM Takes Aim At Salesforce
+======
+
+SuiteCRM is one of the most popular open source CRM (Customer Relationship Management) software available. With its unique-priced managed CRM hosting service, SuiteCRM is aiming to challenge enterprise CRMs like Salesforce.
+
+### SuiteCRM: An Open Source CRM Software
+
+CRM stands for Customer Relationship Management. It is used by businesses to manage the interaction with customers, keep track of services, supplies and other things that help the business manage their customers.
+
+![][1]
+
+[SuiteCRM][2] came into existence after the hugely popular [SugarCRM][3] decided to stop developing its open source version. The open source version of SugarCRM was then forked into SuiteCRM by UK-based [SalesAgility][4] team.
+
+In just a couple of years, SuiteCRM became immensely popular and started to be considered the best open source CRM software out there. You can gauge its popularity from the fact that it’s nearing a million download and it has over 100,000 community members. There are around 4 million SuiteCRM users worldwide (a CRM software usually has more than one user) and it is available in several languages. It’s even used by National Health Service ([NHS][5]) in UK.
+
+Since SuiteCRM is a free and open source software, you are free to download it and deploy it on your cloud server such as [UpCloud][6] (we at It’s FOSS use it), [DigitalOcean][7], [AWS][8] or any Linux server of our own.
+
+But configuring the software, deploying it and managing it a tiresome job and requires certain skill level or a the services of a sysadmin. This is why business oriented open source software provide a hosted version of their software.
+
+This enables you to enjoy the open source software without the additional headache and the team behind the software has a way to generate revenue and continue the development of their software.
+
+### Suite:OnDemand – Cost effective managed hosting of SuiteCRM
+
+So, recently, [SalesAgility][4] – the creators/maintainers of SuiteCRM, decided to challenge [Salesforce][9] and other enterprise CRMs by introducing [Suite:OnDemand][10] , a hosted version of SuiteCRM.
+
+[][11]
+
+Suggested read Papyrus: An Open Source Note Manager
+
+Normally, you will observe pricing plans on the basis of number of users. But, with SuiteCRM’s OnDemand cloud hosting plans, they are trying to give businesses an affordable solution on a “per-server” basis instead of paying for every user you add.
+
+In other words, they want you to pay extra only for advanced features, not for more users.
+
+Here’s what SalesAgility mentioned in their [press release][12]:
+
+> Unlike Salesforce and other enterprise CRM vendors, the practice of pricing per user has been abandoned in favour of per-server hosting packages all of which will support unlimited users. In addition, there’s no increase in cost for access to advanced features. With Suite:OnDemand every feature and benefit is available with each hosting package.
+
+Of course, unlimited users does not mean that you will have to abuse the term. So, there’s a recommended number of users for every hosting plan you opt for.
+
+![Suitecrm Hosting][13]
+
+The CEO of SalesAgility also had to describe their goals for this step:
+
+“ _We want SuiteCRM to be available to all businesses and to all users within a business,_ ”said **Dale Murray CEO** of **SalesAgility**.
+
+In addition to that, they also mentioned that they want to revolutionize the way enterprise-class CRM is being currently offered in order to make it more accessible to businesses and organizations:
+
+> “Many organisations do not have the experience to run and support our product on-premise or it is not part of their technology strategy to do so. With Suite:OnDemand we are providing our customers with a quick and easy solution to access all the features of SuiteCRM without a per user cost. We’re also saying to Salesforce that enterprise-class CRM can be delivered, enhanced, maintained and supported without charging mouth-wateringly expensive monthly fees. Our aim is to transform the CRM market to enable users to make CRM pervasive within their organisations.”
+>
+> Dale Murray, CEO of SalesAgility
+
+### Why is this a big deal?
+
+This is a huge relief for small business owners and startups because other CRMs like Saleforce and SugarCRM charge $30-$40 per month per user. If you have 10 members in your team, this will increase the cost to $300-$400 per month.
+
+[][14]
+
+Suggested read Winds Beautifully Combines Feed Reader and Podcast Player in One Single App
+
+This is also a good news for the open source community that we will have an affordable alternative to Salesforce.
+
+In addition to this, SuiteCRM is fully open source meaning there are no license fees or vendor lock-in – as they mention. You are always free to use it on your own.
+
+It is interesting to see different strategies and solutions being applied for an open source CRM software to take an aim at Salesforce directly.
+
+What do you think? Let us know your thoughts in the comments below.
+
+_With inputs from Abhishek Prakash._
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/suitecrm-ondemand/
+
+作者:[Ankush Das][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/ankush/
+[b]: https://github.com/lujun9972
+[1]: https://itsfoss.com/wp-content/uploads/2019/05/suite-crm-800x450.png
+[2]: https://suitecrm.com/
+[3]: https://www.sugarcrm.com/
+[4]: https://salesagility.com/
+[5]: https://www.nhs.uk/
+[6]: https://www.upcloud.com/register/?promo=itsfoss
+[7]: https://m.do.co/c/d58840562553
+[8]: https://aws.amazon.com/
+[9]: https://www.salesforce.com
+[10]: https://suitecrm.com/suiteondemand/
+[11]: https://itsfoss.com/papyrus-open-source-note-manager/
+[12]: https://suitecrm.com/sod-pr/
+[13]: https://itsfoss.com/wp-content/uploads/2019/05/suitecrm-hosting-800x457.jpg
+[14]: https://itsfoss.com/winds-podcast-feedreader/
diff --git a/sources/tech/20190503 Tutanota Launches New Encrypted Tool to Support Press Freedom.md b/sources/tech/20190503 Tutanota Launches New Encrypted Tool to Support Press Freedom.md
new file mode 100644
index 0000000000..692b4ecba8
--- /dev/null
+++ b/sources/tech/20190503 Tutanota Launches New Encrypted Tool to Support Press Freedom.md
@@ -0,0 +1,85 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Tutanota Launches New Encrypted Tool to Support Press Freedom)
+[#]: via: (https://itsfoss.com/tutanota-secure-connect/)
+[#]: author: (John Paul https://itsfoss.com/author/john/)
+
+Tutanota Launches New Encrypted Tool to Support Press Freedom
+======
+
+A secure email provider has announced the release of a new product designed to help whistleblowers get their information to the media. The tool is free for journalists.
+
+### Tutanota helps you protect your privacy
+
+![][1]
+
+[Tutanota][2] is a German-based company that provides “world’s most secure email service, easy to use and private by design.” They offer end-to-end encryption for their [secure email service][3]. Recently Tutanota announced a [desktop app for their email service][4].
+
+They also make use of two-factor authentication and [open source the code][5] that they use.
+
+While you can get an account for free, you don’t have to worry about your information being sold or seeing ads. Tutanota makes money by charging for extra features and storage. They also offer solutions for non-profit organizations.
+
+Tutanota has launched a new service to further help journalists, social activists and whistleblowers in communicating securely.
+
+[][6]
+
+Suggested read Purism's New Offering is a Dream Come True for Privacy Concerned People
+
+### Secure Connect: An encrypted form for websites
+
+![][7]
+
+Tutanota has released a new piece of software named Secure Connect. Secure Connect is “an open source encrypted contact form for news sites”. The goal of the project is to create a way so that “whistleblowers can get in touch with journalists securely”. Tutanota picked the right day because May 3rd is the [Day of Press Freedom][8].
+
+According to Tutanota, Secure Connect is designed to be easily added to websites, but can also work on any blog to ensure access by smaller news agencies. A whistleblower would access Secure Connect app on a news site, preferably using Tor, and type in any information that they want to bring to light. The whistleblower would also be able to upload files. Once they submit the information, Secure Connect will assign a random address and password, “which lets the whistleblower re-access his sent message at a later stage and check for replies from the news site.”
+
+![Secure Connect Encrypted Contact Form][9]
+
+While Tutanota will be offering Secure Connect to journalists for free, they know that someone will have to foot the bill. They plan to pay for further development of the project by selling it to businesses, such as “lawyers, financial institutions, medical institutions, educational institutions, and the authorities”. Non-journalists would have to pay €24 per month.
+
+You can see a demo of Secure Connect, by clicking [here][10]. If you are a journalist interested in adding Secure Connect to your website or blog, you can contact them at [[email protected]][11] Be sure to include a link to your website.
+
+[][12]
+
+Suggested read 8 Privacy Oriented Alternative Search Engines To Google in 2019
+
+### Final Thoughts on Secure Connect
+
+I have read repeatedly about whistleblowers whose identities were accidentally exposed, either by themselves or others. Tutanota’s project looks like it would remove that possibility by making it impossible for others to discover their identity. It also gives both parties an easy way to exchange information without having to worry about encryption or PGP keys.
+
+I understand that it’s not the same as [Firefox Send][13], another encrypted file sharing program from Mozilla. The only question I have is whose servers will the whistleblowers’ information be sitting on?
+
+Do you think that Tutanota’s Secure Connect will be a boon for whistleblowers and activists? Please let us know in the comments below.
+
+If you found this article interesting, please take a minute to share it on social media, Hacker News or [Reddit][14].
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/tutanota-secure-connect/
+
+作者:[John Paul][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/john/
+[b]: https://github.com/lujun9972
+[1]: https://itsfoss.com/wp-content/uploads/2018/02/tutanota-featured-800x450.png
+[2]: https://tutanota.com/
+[3]: https://itsfoss.com/tutanota-review/
+[4]: https://itsfoss.com/tutanota-desktop/
+[5]: https://tutanota.com/blog/posts/open-source-email
+[6]: https://itsfoss.com/librem-one/
+[7]: https://itsfoss.com/wp-content/uploads/2019/05/secure-communication.jpg
+[8]: https://en.wikipedia.org/wiki/World_Press_Freedom_Day
+[9]: https://itsfoss.com/wp-content/uploads/2019/05/secure-connect-encrypted-contact-form.png
+[10]: https://secureconnect.tutao.de/contactform/demo
+[11]: /cdn-cgi/l/email-protection
+[12]: https://itsfoss.com/privacy-search-engines/
+[13]: https://itsfoss.com/firefox-send/
+[14]: http://reddit.com/r/linuxusersgroup
diff --git a/sources/tech/20190504 May the fourth be with you- How Star Wars (and Star Trek) inspired real life tech.md b/sources/tech/20190504 May the fourth be with you- How Star Wars (and Star Trek) inspired real life tech.md
new file mode 100644
index 0000000000..a05f9a6b4f
--- /dev/null
+++ b/sources/tech/20190504 May the fourth be with you- How Star Wars (and Star Trek) inspired real life tech.md
@@ -0,0 +1,93 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (May the fourth be with you: How Star Wars (and Star Trek) inspired real life tech)
+[#]: via: (https://opensource.com/article/19/5/may-the-fourth-star-wars-trek)
+[#]: author: (Jeff Macharyas https://opensource.com/users/jeffmacharyas)
+
+May the fourth be with you: How Star Wars (and Star Trek) inspired real life tech
+======
+The technologies may have been fictional, but these two acclaimed sci-fi
+series have inspired open source tech.
+![Triangulum galaxy, NASA][1]
+
+Conventional wisdom says you can either be a fan of _Star Trek_ or of _Star Wars_ , but mixing the two is like mixing matter and anti-matter. I'm not sure that's true, but even if the laws of physics cannot be changed, these two acclaimed sci-fi series have influenced the open source universe and created their own open source multi-verses.
+
+For example, fans have used the original _Star Trek_ as "source code" to create fan-made films, cartoons, and games. One of the more notable fan creations was the web series _Star Trek Continues_ , which faithfully adapted Gene Roddenberry's universe and redistributed it to the world.
+
+"Eventually we realized that there is no more profound way in which people could express what _Star Trek_ has meant to them than by creating their own very personal _Star Trek_ things," [Roddenberry said][2]. However, due to copyright restrictions, this "open source" channel [has since been curtailed][3].
+
+_Star Wars_ has a different approach to open sourcing its universe. [Jess Paguaga writes][4] on FanSided: "With a variety [of] fan film awards dating back to 2002, the _Star Wars_ brand has always supported and encouraged the creation of short films that help expand the universe of a galaxy far, far away."
+
+But, _Star Wars_ is not without its own copyright prime directives. In one case, a Darth Vader film by a YouTuber called Star Wars Theory has drawn a copyright claim from Disney. The claim does not stop production of the film, but diverts monetary gains from it, [reports James Richards][5] on FanSided.
+
+This could be one of the [Ferengi Rules of Acquisition][6], perhaps.
+
+But if you can't watch your favorite fan film, you can still get your [_Star Wars_ fix right in the Linux terminal][7] by entering:
+
+
+```
+`telnet towel.blinkenlights.nl`
+```
+
+And _Star Trek_ fans can also interact with the Federation with the original text-based video game from 1971. While a high-school senior, Mike Mayfield ported the game from punch cards to HP BASIC. If you'd like to go old school and battle Klingons, the source code is available at the [Code Project][8].
+
+### Real-life star tech
+
+Both _Star Wars_ and _Star Trek_ have inspired real-life technologies. Although those technologies were fictional, many have become the practical, open technology we use today. Some of them inspired technologies that are still in development now.
+
+In the early 1970s, Motorola engineer Martin Cooper was trying to beat AT&T at the car-phone game. He says he was watching Captain Kirk use a "communicator" on an episode of _Star Trek_ and had a eureka moment. His team went on to create the first portable cellular 800MHz phone prototype in 90 days.
+
+In _Star Wars_ , scout stormtroopers of the Galactic Empire rode the Aratech 74-Z Speeder Bike, and a real-life counterpart is the [Aero-X][9] being developed by California's Aerofex.
+
+Perhaps the most visible _Star Wars_ tech to enter our lives is droids. We first encountered R2-D2 back in the 1970s, but now we have droids vacuuming our carpets and mowing our lawns, from Roombas to the [Worx Landroid][10] lawnmower.
+
+And, in _Star Wars_ , Princess Leia appeared to Obi-Wan Kenobi as a hologram, and in Star Trek: Voyager, the ship's chief medical officer was an interactive hologram that could diagnose and treat patients. The technology to bring characters like these to "life" is still a ways off, but there are some interesting open source developments that hint of things to come. [OpenHolo][11], "an open source library containing algorithms and software implementations for holograms in various fields," is one such project.
+
+### Where's the beef?
+
+> "She handled… real meat… touched it, and cut it?" —Keiko O'Brien, Star Trek: The Next Generation
+
+In the _Star Trek_ universe, crew members get their meals by simply ordering a replicator to produce whatever food they desire. That could one day become a reality thanks to a concept created by two German students for an open source "meat-printer" they call the [Cultivator][12]. It would use bio-printing to produce something that appears to be meat; the user could even select its mineral and fat content. Perhaps with more collaboration and development, the Cultivator could become the replicator in tomorrow's kitchen!
+
+### The 501st
+
+Cosplayers, people from all walks of life who dress as their favorite characters, are the "open source embodiment" of their favorite universes. The [501st][13] [Legion][13] is an all-volunteer _Star Wars_ fan organization "formed for the express purpose of bringing together costume enthusiasts under a collective identity within which to operate," according to its charter.
+
+Jon Stallard, a member of Garrison Tyranus, the Central Virginia chapter of the 501st Legion says, "Everybody wanted to be something else when they were a kid, right? Whether it was Neil Armstrong, Batman, or the Six Million Dollar Man. Every backyard playdate was some kind of make-believe. The 501st lets us participate in our fan communities while contributing to the community at large."
+
+Are cosplayers really "open source characters"? Well, that depends. The copyright laws around cosplay and using unique props, costumes, and more are very complex, [writes Meredith Filak Rose][14] for _Public Knowledge_. "We're lucky to be living in a time where fandom generally enjoys a positive relationship with the creators whose work it admires," Rose concludes.
+
+So, it is safe to say that stormtroopers, Ferengi, Vulcans, and Yoda are all here to stay for a long, long time, near, and far, far away.
+
+Live long and prosper, you shall.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/5/may-the-fourth-star-wars-trek
+
+作者:[Jeff Macharyas ][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/jeffmacharyas
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/triangulum_galaxy_nasa_stars.jpg?itok=NdS19A7m
+[2]: https://fanlore.org/wiki/Gene_Roddenberry#His_Views_Regarding_Fanworks
+[3]: https://trekmovie.com/2016/06/23/cbs-and-paramount-release-fan-film-guidelines/
+[4]: https://dorksideoftheforce.com/2019/01/17/star-wars-fan-films/
+[5]: https://dorksideoftheforce.com/2019/01/16/disney-claims-copyright-star-wars-theory/
+[6]: https://en.wikipedia.org/wiki/Rules_of_Acquisition
+[7]: https://itsfoss.com/star-wars-linux/
+[8]: https://www.codeproject.com/Articles/28228/Star-Trek-1971-Text-Game
+[9]: https://www.livescience.com/58943-real-life-star-wars-technology.html
+[10]: https://www.digitaltrends.com/cool-tech/best-robot-lawnmowers/
+[11]: http://openholo.org/
+[12]: https://www.pastemagazine.com/articles/2016/05/the-future-is-vegan-according-to-star-trek.html
+[13]: https://www.501st.com/
+[14]: https://www.publicknowledge.org/news-blog/blogs/copyright-and-cosplay-working-with-an-awkward-fit
diff --git a/sources/tech/20190505 -Review- Void Linux, a Linux BSD Hybrid.md b/sources/tech/20190505 -Review- Void Linux, a Linux BSD Hybrid.md
new file mode 100644
index 0000000000..cc8a660252
--- /dev/null
+++ b/sources/tech/20190505 -Review- Void Linux, a Linux BSD Hybrid.md
@@ -0,0 +1,136 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: ([Review] Void Linux, a Linux BSD Hybrid)
+[#]: via: (https://itsfoss.com/void-linux/)
+[#]: author: (John Paul https://itsfoss.com/author/john/)
+
+[Review] Void Linux, a Linux BSD Hybrid
+======
+
+There are distros that follow the crowd and there are others that try to make their own path through the tall weed. Today, we’ll be looking at a small distro that looks to challenge how a distro should work. We’ll be looking at Void Linux.
+
+### What is Void Linux?
+
+[Void Linux][1] is a “general purpose operating system, based on the monolithic Linux kernel. Its package system allows you to quickly install, update and remove software; software is provided in binary packages or can be built directly from sources with the help of the XBPS source packages collection.”
+
+![Void Linux Neofetch][2]
+
+Like Solus, Void Linux is written from scratch and does not depend on any other operating system. It is a rolling release. Unlike the majority of Linux distros, Void does not use [systemd][3]. Instead, it uses [runit][4]. Another thing that separates Void from the rest of Linux distros is the fact that they use LibreSSL instead of OpenSSL. Void also offers support for the [musl C library][5]. In fact, when you download a .iso file, you can choose between `glibc` and `musl`.
+
+The homegrown package manager that Void uses is named X Binary Package System (or xbps). According to the [Void wiki][6], xbps has the following features:
+
+ * Supports multiple local and remote repositories (HTTP/HTTPS/FTP).
+ * RSA signed remote repositories
+ * SHA256 hashes for package metadata, files, and binary packages
+ * Supports package states (ala dpkg) to mitigate broken package * installs/updates
+ * Ability to resume partial package install/updates
+ * Ability to unpack only files that have been modified in * package updates
+ * Ability to use virtual packages
+ * Ability to check for incompatible shared libraries in reverse dependencies
+ * Ability to replace packages
+ * Ability to put packages on hold (to never update them)
+ * Ability to preserve/update configuration files
+ * Ability to force reinstallation of any installed package
+ * Ability to downgrade any installed package
+ * Ability to execute pre/post install/remove/update scriptlets
+ * Ability to check package integrity: missing files, hashes, missing or unresolved (reverse)dependencies, dangling or modified symlinks, etc.
+
+
+
+#### System Requirements
+
+According to the [Void Linux download page][7], the system requirements differ based on the architecture you choose. 64-bit images require “EM64T CPU, 96MB RAM, 350MB disk, Ethernet/WiFi for network installation”. 32-bit images require “Pentium 4 CPU (SSE2), 96MB RAM, 350MB disk, Ethernet / WiFi for network installation”. The [Void Linux handbook][8] recommends 700 MB for storage and also notes that “Flavor installations require more resources. How much more depends on the flavor.”
+
+Void also supports ARM devices. You can download [ready to boot images][9] for Raspberry Pi and several other [Raspberry Pi alternatives][10].
+
+[][11]
+
+Suggested read NomadBSD, a BSD for the Road
+
+### Void Linux Installation
+
+NOTE: you can either install [Void Linux download page][7] via a live image or use a net installer. I used a live image.
+
+I was able to successfully install Void Linux on my Dell Latitude D630. This laptop has an Intel Centrino Duo Core processor running at 2.00 GHz, NVIDIA Quadro NVS 135M graphics chip, and 4 GB of RAM.
+
+![Void Linux Mate][12]
+
+After I `dd`ed the 800 MB Void Linux MATE image to my thumb drive and inserted it, I booted my computer. I was very quickly presented with a vanilla MATE desktop. To start installing Void, I opened up a terminal and typed `sudo void-installer`. After using the default password `voidlinux`, the installer started. The installer reminded me a little bit of the terminal Debian installer, but it was laid out more like FreeBSD. It was divided into keyboard, network, source, hostname, locale, timezone, root password, user account, bootloader, partition, and filesystems sections.
+
+Most of the sections where self-explanatory. In the source section, you could choose whether to install the packages from the local image or grab them from the web. I chose local because I did not want to eat up bandwidth or take longer than I had to. The partition and filesystems sections are usually handled automatically by most installers, but not on Void. In this case, the first section allows you to use `cfdisk` to create partitions and the second allows to specify what filesystems will be used in those partitions. I followed the partition layout on [this page][13].
+
+If you install Void Linux from the local image, you definitely need to update your system. The [Void wiki][14] recommends running `xbps-install -Suv` until there are no more updates to install. It would probably be a good idea to reboot between batches of updates.
+
+### Experience with Void Linux
+
+So far in my Linux journey, Void Linux has been by far the most difficult. It feels more like I’m [using a BSD than a Linux distro][15]. (I guess that should not be surprising since Void was created by a former [NetBSD][16] developer who wanted to experiment with his own package manager.) The steps in the command line installer are closer to that of [FreeBSD][17] than Debian.
+
+Once Void was installed and updated, I went to work installing apps. Unfortunately, I ran into an issue with missing applications. Most of these applications come preinstalled on other distros. I had to install wget, unzip, git, nano, LibreOffice to name just a few.
+
+Void does not come with a graphical package manager. There are three unofficial frontends for the xbps package manager and [one is based on qt][18]. I ran into issues getting one of the Bash-based tools to work. It hadn’t been updated in 4-5 years.
+
+![Octoxbps][19]
+
+The xbps package manager is kinda interesting. It downloads the package and its signature to verify it. You can see the [terminal print out][20] from when I installed Mcomix. Xbps does not use the normal naming convention used in most package managers (ie `apt install` or `pacman -R`), instead, it uses `xbps-install`, `xbps-query`, `xbps-remove`. Luckily, the Void wiki had a [page][21] to show what xbps command relates to apt or dnf commands.
+
+[][22]
+
+Suggested read How To Solve: error: no such partition grub rescue in Ubuntu Linux
+
+The main repo for Void is located in Germany, so I decided to switch to a more local server to ease the burden on that server and to download packages quicker. Switching to a local mirror took a couple of tries because the documentation was not very clear. Documentation for Void is located in two different places: the [wiki][23] and the [handbook][24]. For me, the wiki’s [explanation][25] was confusing and I ran into issues. So, I searched for an answer on DuckDuckGo. From there I stumbled upon the [handbook’s instructions][26], which were much clearer. (The handbook is not linked on the Void Linux website and I had to stumble across it via search.)
+
+One of the nice things about Void is the speed of the system once everything was installed. It had the quickest boot time I have ever encountered. Overall, the system was very responsive. I did not run into any system crashes.
+
+### Final Thoughts
+
+Void Linux took more work to get to a useable state than any other distro I have tried. Even the BSDs I tried felt more polished than Void. I think the tagline “General purpose Linux” is misleading. It should be “Linux with hackers and tinkerers in mind”. Personally, I prefer using distros that are ready for me to use after installing. While it is an interesting combination of Linux and BSD ideas, I don’t think I’ll add Void to my short list of go-to distros.
+
+If you like tinkering with your Linux system or like building it from scratch, give [Void Linux][7] a try.
+
+Have you ever used Void Linux? What is your favorite Debian-based distro? Please let us know in the comments below.
+
+If you found this article interesting, please take a minute to share it on social media, Hacker News or [Reddit][27].
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/void-linux/
+
+作者:[John Paul][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/john/
+[b]: https://github.com/lujun9972
+[1]: https://voidlinux.org/
+[2]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/04/Void-Linux-Neofetch.png?resize=800%2C562&ssl=1
+[3]: https://en.wikipedia.org/wiki/Systemd
+[4]: http://smarden.org/runit/
+[5]: https://www.musl-libc.org/
+[6]: https://wiki.voidlinux.org/XBPS
+[7]: https://voidlinux.org/download/
+[8]: https://docs.voidlinux.org/installation/base-requirements.html
+[9]: https://voidlinux.org/download/#download-ready-to-boot-images-for-arm
+[10]: https://itsfoss.com/raspberry-pi-alternatives/
+[11]: https://itsfoss.com/nomadbsd/
+[12]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/04/Void-Linux-Mate.png?resize=800%2C640&ssl=1
+[13]: https://wiki.voidlinux.org/Disks#Filesystems
+[14]: https://wiki.voidlinux.org/Post_Installation#Updates
+[15]: https://itsfoss.com/why-use-bsd/
+[16]: https://itsfoss.com/netbsd-8-release/
+[17]: https://www.freebsd.org/
+[18]: https://github.com/aarnt/octoxbps
+[19]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/04/OctoXBPS.jpg?resize=800%2C534&ssl=1
+[20]: https://pastebin.com/g31n1bFT
+[21]: https://wiki.voidlinux.org/Rosetta_stone
+[22]: https://itsfoss.com/solve-error-partition-grub-rescue-ubuntu-linux/
+[23]: https://wiki.voidlinux.org/
+[24]: https://docs.voidlinux.org/
+[25]: https://wiki.voidlinux.org/XBPS#Official_Repositories
+[26]: https://docs.voidlinux.org/xbps/repositories/mirrors/changing.html
+[27]: http://reddit.com/r/linuxusersgroup
diff --git a/sources/tech/20190505 Blockchain 2.0 - An Introduction To Hyperledger Project (HLP) -Part 8.md b/sources/tech/20190505 Blockchain 2.0 - An Introduction To Hyperledger Project (HLP) -Part 8.md
new file mode 100644
index 0000000000..bb1d187ea4
--- /dev/null
+++ b/sources/tech/20190505 Blockchain 2.0 - An Introduction To Hyperledger Project (HLP) -Part 8.md
@@ -0,0 +1,88 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Blockchain 2.0 – An Introduction To Hyperledger Project (HLP) [Part 8])
+[#]: via: (https://www.ostechnix.com/blockchain-2-0-an-introduction-to-hyperledger-project-hlp/)
+[#]: author: (editor https://www.ostechnix.com/author/editor/)
+
+Blockchain 2.0 – An Introduction To Hyperledger Project (HLP) [Part 8]
+======
+
+![Introduction To Hyperledger Project][1]
+
+Once a new technology platform reaches a threshold level of popularity in terms of active development and commercial interests, major global companies and smaller start-ups alike rush to catch a slice of the pie. **Linux** was one such platform back in the day. Once the ubiquity of its applications was realized individuals, firms, and institutions started displaying their interest in it and by 2000 the **Linux foundation** was formed.
+
+The Linux foundation aims to standardize and develop Linux as a platform by sponsoring their development team. The Linux Foundation is a non-profit organization that is supported by software and IT behemoths such as Microsoft, Oracle, Samsung, Cisco, IBM, Intel among others[1]. This is excluding the hundreds of individual developers who offer their services for the betterment of the platform. Over the years the Linux foundation has taken many projects under its roof. The **Hyperledger Project** is their fastest growing one till date.
+
+Such consortium led development have a lot of advantages when it comes to furthering tech into usable useful forms. Developing the standards, libraries and all the back-end protocols for large scale projects are expensive and resource intensive without a shred of income generating from it. Hence, it makes sense for companies to pool in their resources to develop the common “boring” parts by supporting such organizations and later upon completing work on these standard parts to simply plug & play and customize their products afterwards. Apart from the economics of the model, such collaborative efforts also yield standards allowing for easier use and integration into aspiring products and services.
+
+Other major innovations that were once or are currently being developed following the said consortium model include standards for WiFi (The Wi-Fi alliance), Mobile Telephony etc.
+
+### Introduction to Hyperledger Project (HLP)
+
+The Hyperledger project was launched in December 2015 by the Linux foundation as is currently among the fastest growing project they’ve incubated. It’s an umbrella organization for collaborative efforts into developing and advancing tools & standards for [**blockchain**][2] based distributed ledger technologies(DLT). Major industry players supporting the project include **IBM** , **Intel** and **SAP Ariba** among [**others**][3]. The HLP aims to create frameworks for individuals and companies to create shared as well as closed blockchains as required to further their own requirements. The design principles include a strong tilt toward developing a globally deployable, scalable, robust platform with a focus on privacy, and future auditability[2]. It is also important to note that most of the blockchains proposed and the frame.
+
+### Development goals and structure: Making it plug & play
+
+Although enterprise facing platforms exist from the likes of the Ethereum alliance, HLP is by definition business facing and supported by industry behemoths who contribute and further development in the many modules that come under the HLP banner. The HLP incubates projects in development after their induction into the cause and after finishing work on it and correcting the knick-knacks rolls it out for the public. Members of the Hyperledger project contribute their own work such as how IBM contributed their Fabric platform for collaborative development. The codebase is absorbed and developed in house by the group in the project and rolled out for all members equally for their use.
+
+Such processes make the modules in HLP highly flexible plug-in frameworks which will support rapid development and roll-outs in enterprise settings. Furthermore, other comparable platforms are open **permission-less blockchains** or rather **public chains** by default and even though it is possible to adapt them to specific applications, HLP modules support the feature natively.
+
+The differences and use cases of public & private blockchains are covered more [**here**][4] in this comparative primer on the same.
+
+The Hyperledger project’s mission is four-fold according to **Brian Behlendorf** , the executive director of the project.
+
+They are:
+
+ 1. To create an enterprise grade DLT framework and standards which anyone can port to suit their specific industrial or personal needs.
+ 2. To give rise to a robust open source community to aid the ecosystem.
+ 3. To promote and further participation of industry members of the said ecosystem such as member firms.
+ 4. To host a neutral unbiased infrastructure for the HLP community to gather and share updates and developments regarding the same.
+
+
+
+The original document can be accessed [**here**][5]****.
+
+### Structure of the HLP
+
+The **HLP consists of 12 projects** that are classified as independent modules, each usually structured and working independently to develop their module. These are first studied for their capabilities and viability before being incubated. Proposals for additions can be made by any member of the organization. After the project is incubated active development ensues after which it is rolled out. The interoperability between these modules are given a high priority, hence regular communication between these groups are maintained by the community. Currently 4 of these projects are categorized as active. The active tag implies these are ready for use but not ready for a major release yet. These 4 are arguably the most significant or rather fundamental modules to furthering the blockchain revolution. We’ll look at the individual modules and their functionalities at a later time in detail. However, a brief description of a the Hyperledger Fabric platform, arguably the most popular among them follows.
+
+### Hyperledger Fabric
+
+The **Hyperledger Fabric** [2] is a fully open-source, permissioned (non-public) blockchain-based DLT platform that is designed keeping enterprise uses in mind. The platform provides features and is structured to fit the enterprise environment. It is highly modular allowing its developers to choose from different consensus protocols, **chain code protocols ([smart contracts][6])** , or identity management systems etc., as they go along. **It is a permissioned blockchain based platform** that’s makes use of an identity management system, meaning participants will be aware of each other’s identities which is required in an enterprise setting. Fabric allows for smart contract ( _ **“chaincode”, is the term that the Hyperledger team uses**_ ) development in a variety of mainstream programming languages including **Java** , **Javascript** , **Go** etc. This allows institutions and enterprises to make use of their existing talent in the area without hiring or re-training developers to develop their own smart contracts. Fabric also uses an execute-order-validate system to handle smart contracts for better reliability compared to the standard order-validate system that is used by other platforms providing smart contract functionality. Pluggable performance, identity management systems, DBMS, Consensus platforms etc. are other features of Fabric that keeps it miles ahead of its competition.
+
+### Conclusion
+
+Projects such as the Hyperledger Fabric platforms enable a faster rate of adoption of blockchain technology in mainstream use-cases. The Hyperledger community structure itself supports open governance principles and since all the projects are led as open source platforms, this improves the security and accountability that the teams exhibit in pushing out commitments.
+
+Since major applications of such projects involve working with enterprises to further development of platforms and standards, the Hyperledger project is currently at a great position with respect to comparable projects by others.
+
+**References:**
+
+ * **[1][Samsung takes a seat with Intel and IBM at the Linux Foundation | TheINQUIRER][7]**
+ * **[2] E. Androulaki et al., “Hyperledger Fabric: A Distributed Operating System for Permissioned Blockchains,” 2018.**
+
+
+
+--------------------------------------------------------------------------------
+
+via: https://www.ostechnix.com/blockchain-2-0-an-introduction-to-hyperledger-project-hlp/
+
+作者:[editor][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.ostechnix.com/author/editor/
+[b]: https://github.com/lujun9972
+[1]: https://www.ostechnix.com/wp-content/uploads/2019/04/Introduction-To-Hyperledger-Project-720x340.png
+[2]: https://www.ostechnix.com/blockchain-2-0-an-introduction/
+[3]: https://www.hyperledger.org/members
+[4]: https://www.ostechnix.com/blockchain-2-0-public-vs-private-blockchain-comparison/
+[5]: http://www.hitachi.com/rev/archive/2017/r2017_01/expert/index.html
+[6]: https://www.ostechnix.com/blockchain-2-0-explaining-smart-contracts-and-its-types/
+[7]: https://www.theinquirer.net/inquirer/news/2182438/samsung-takes-seat-intel-ibm-linux-foundation
diff --git a/sources/tech/20190505 Blockchain 2.0 - Public Vs Private Blockchain Comparison -Part 7.md b/sources/tech/20190505 Blockchain 2.0 - Public Vs Private Blockchain Comparison -Part 7.md
new file mode 100644
index 0000000000..a954e8514e
--- /dev/null
+++ b/sources/tech/20190505 Blockchain 2.0 - Public Vs Private Blockchain Comparison -Part 7.md
@@ -0,0 +1,106 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Blockchain 2.0 – Public Vs Private Blockchain Comparison [Part 7])
+[#]: via: (https://www.ostechnix.com/blockchain-2-0-public-vs-private-blockchain-comparison/)
+[#]: author: (editor https://www.ostechnix.com/author/editor/)
+
+Blockchain 2.0 – Public Vs Private Blockchain Comparison [Part 7]
+======
+
+![Public vs Private blockchain][1]
+
+The previous part of the [**Blockchain 2.0**][2] series explored the [**the state of Smart contracts**][3] now. This post intends to throw some light on the different types of blockchains that can be created. Each of these are used for vastly different applications and depending on the use cases, the protocol followed by each of these differ. Now let us go ahead and learn about **Public vs Private blockchain comparison** with Open source and proprietary technology.
+
+The fundamental three-layer structure of a blockchain based distributed ledger as we know is as follows:
+
+![][4]
+
+Figure 1 – Fundamental structure of Blockchain-based ledgers
+
+The differences between the types mentioned here is attributable primarily to the protocol that rests on the underlying blockchain. The protocol dictates rules for the participants and the behavior of the blockchain in response to the said participation.
+
+Remember to keep the following things in mind while reading through this article:
+
+ * Platforms such as these are always created to solve a use-case requirement. There is no one direction that the technology should take that is best. Blockchains for instance have tremendous applications and some of these might require dropping features that seem significant in other settings. **Decentralized storage** is a major example in this regard.
+ * Blockchains are basically database systems keeping track of information by timestamping and organizing data in the form of blocks. Creators of such blockchains can choose who has the right to make these blocks and perform alterations.
+ * Blockchains can be “centralized” as well, and participation in varying extents can be limited to those who this “central authority” deems eligible.
+
+
+
+Most blockchains are either **public** or **private**. Broadly speaking, public blockchains can be considered as being the equivalent of open source software and most private blockchains can be seen as proprietary platforms deriving from the public ones. The figure below should make the basic difference obvious to most of you.
+
+![][5]
+
+Figure 2 – Public vs Private blockchain comparison with Open source and Proprietary Technology
+
+This is not to say that all private blockchains are derived from open public ones. The most popular ones however usually are though.
+
+### Public Blockchains
+
+A public blockchain can be considered as a **permission-less platform** or **network**. Anyone with the knowhow and computing resources can participate in it. This will have the following implications:
+
+ * Anyone can join and participate in a public blockchain network. All the “participant” needs is a stable internet connection along with computing resources.
+ * Participation will include reading, writing, verifying, and providing consensus during transactions. An example for participating individuals would be **Bitcoin miners**. In exchange for participating in the network the miners are paid back in Bitcoins in this case.
+ * The platform is decentralized completely and fully redundant.
+ * Because of the decentralized nature, no one entity has complete control over the data recorded in the ledger. To validate a block all (or most) participants need to vet the data.
+ * This means that once information is verified and recorded, it cannot be altered easily. Even if it is, its impossible to not leave marks.
+ * The identity of participants remains anonymous by design in platforms such as **BITCOIN** and **LITECOIN**. These platforms by design aim for protecting and securing user identities. This is primarily a feature provided by the overlying protocol stack.
+ * Examples for public blockchain networks are **BITCOIN** , **LITECOIN** , **ETHEREUM** etc.
+ * Extensive decentralizations mean that gaining consensus on transactions might take a while compared to what is typically possible over blockchain ledger networks and throughput can be a challenge for large enterprises aiming for pushing a very high number of transactions every instant.
+ * The open participation and often the high number of such participants in open chains such as bitcoin add up to considerable initial investments in computing equipment and energy costs.
+
+
+
+### Private Blockchain
+
+In contrast, a private blockchain is a **permissioned blockchain**. Meaning:
+
+ * Permission to participate in the network is restricted and is presided over by the owner or institution overseeing the network. Meaning even though an individual will be able to store data and transact (send and receive payments for example), the validation and storage of these transactions will be done only by select participants.
+ * Participation even once permission is given by the central authority will be limited by terms. For instance, in case of a private blockchain network run by a financial institution, not every customer will have access to the entire blockchain ledger, and even among those with the permission, not everyone will be able to access everything. Permissions to access select services will be given by the central figure in this case. This is often referred to as **“channeling”**.
+ * Such systems have significantly larger throughput capabilities and also showcase much faster transaction speeds compared to their public counterparts because a block of information only needs to be validated by a select few.
+ * Security by design is something the public blockchains are renowned for. They achieve this
+by:
+ * Anonymizing participants,
+ * Distributed & redundant but encrypted storage on multiple nodes,
+ * Mass consensus required for creating and altering data.
+
+
+
+Private blockchains usually don’t feature any of these in their protocol. This makes the system only as secure as most cloud-based database systems currently in use.
+
+### A note for the wise
+
+An important point to note is this, the fact that they’re named public or private (or open or closed) has nothing to do with the underlying code base. The code or the literal foundations on which the platforms are based on may or may not be publicly available and or developed in either of these cases. **R3** is a **DLT** ( **D** istributed **L** edger **T** echnology) company that leads a public consortium of over 200 multinational institutions. Their aim is to further development of blockchain and related distributed ledger technology in the domain of finance and commerce. **Corda** is the product of this joint effort. R3 defines corda as a blockchain platform that is built specially for businesses. The codebase for the same is open source and developers all over the world are encouraged to contribute to the project. However, given its business facing nature and the needs it is meant to address, corda would be categorized as a permissioned closed blockchain platform. Meaning businesses can choose the participants of the network once it is deployed and choose the kind of information these participants can access through the use of natively available smart contract tools.
+
+While it is a reality that public platforms like Bitcoin and Ethereum are responsible for the widespread awareness and development going on in the space, it can still be argued that private blockchains designed for specific use cases in enterprise or business settings is what will lead monetary investments in the short run. These are the platforms most of us will see implemented the near future in practical ways.
+
+Read the next guide about Hyperledger project in this series.
+
+ * [**Blockchain 2.0 – An Introduction To Hyperledger Project (HLP)**][6]
+
+
+
+We are working on many interesting topics on Blockchain technology. Stay tuned!
+
+--------------------------------------------------------------------------------
+
+via: https://www.ostechnix.com/blockchain-2-0-public-vs-private-blockchain-comparison/
+
+作者:[editor][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.ostechnix.com/author/editor/
+[b]: https://github.com/lujun9972
+[1]: https://www.ostechnix.com/wp-content/uploads/2019/04/Public-Vs-Private-Blockchain-720x340.png
+[2]: https://www.ostechnix.com/blockchain-2-0-an-introduction/
+[3]: https://www.ostechnix.com/blockchain-2-0-ongoing-projects-the-state-of-smart-contracts-now/
+[4]: http://www.ostechnix.com/wp-content/uploads/2019/04/blockchain-architecture.png
+[5]: http://www.ostechnix.com/wp-content/uploads/2019/04/Public-vs-Private-blockchain-comparison.png
+[6]: https://www.ostechnix.com/blockchain-2-0-an-introduction-to-hyperledger-project-hlp/
diff --git a/sources/tech/20190505 Blockchain 2.0 - What Is Ethereum -Part 9.md b/sources/tech/20190505 Blockchain 2.0 - What Is Ethereum -Part 9.md
new file mode 100644
index 0000000000..a4669a2eb0
--- /dev/null
+++ b/sources/tech/20190505 Blockchain 2.0 - What Is Ethereum -Part 9.md
@@ -0,0 +1,83 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Blockchain 2.0 – What Is Ethereum [Part 9])
+[#]: via: (https://www.ostechnix.com/blockchain-2-0-what-is-ethereum/)
+[#]: author: (editor https://www.ostechnix.com/author/editor/)
+
+Blockchain 2.0 – What Is Ethereum [Part 9]
+======
+
+![Ethereum][1]
+
+In the previous guide of this series, we discussed about [**Hyperledger Project (HLP)**][2], a fastest growing product developed by **Linux Foundation**. In this guide, we are going to discuss about what is **Ethereum** and its features in detail. Many researchers opine that the future of the internet will be based on principles of decentralized computing. Decentralized computing was in fact among one of the broader objectives of having the internet in the first place. However, the internet took another turn owing to differences in computing capabilities available. While modern server capabilities make the case for server-side processing and execution, lack of decent mobile networks in large parts of the world make the case for the same on the client side. Modern smartphones now have **SoCs** (system on a chip or system on chip) capable of handling many such operations on the client side itself, however, limitations owing to retrieving and storing data securely still pushes developers to have server-side computing and data management. Hence, a bottleneck in regards to data transfer capabilities is currently observed.
+
+All of that might soon change because of advancements in distributed data storage and program execution platforms. [**The blockchain**][3], for the first time in the history of the internet, basically allows for secure data management and program execution on a distributed network of users as opposed to central servers.
+
+**Ethereum** is one such blockchain platform that gives developers access to frameworks and tools used to build and run applications on such a decentralized network. Though more popularly known in general for its cryptocurrency, Ethereum is more than just **ethers** (the cryptocurrency). It’s a full **Turing complete programming language** that is designed to develop and deploy **DApps** or **Distributed APPlications** [1]. We’ll look at DApps in more detail in one of the upcoming posts.
+
+Ethereum is an open-source, supports by default a public (non-permissioned) blockchain, and features an extensive smart contract platform **(Solidity)** underneath. Ethereum provides a virtual computing environment called the **Ethereum virtual machine** to run applications and [**smart contracts**][4] as well[2]. The Ethereum virtual machine runs on thousands of participating nodes all over the world, meaning the application data while being secure, is almost impossible to be tampered with or lost.
+
+### Getting behind Ethereum: What sets it apart
+
+In 2017, a 30 plus group of the who’s who of the tech and financial world got together to leverage the Ethereum blockchain’s capabilities. Thus, the **Ethereum Enterprise Alliance (EEA)** was formed by a long list of supporting members including _Microsoft_ , _JP Morgan_ , _Cisco Systems_ , _Deloitte_ , and _Accenture_. JP Morgan already has **Quorum** , a decentralized computing platform for financial services based on Ethereum currently in operation, while Microsoft has Ethereum based cloud services it markets through its Azure cloud business[3].
+
+### What is ether and how is it related to Ethereum
+
+Ethereum creator **Vitalik Buterin** understood the true value of a decentralized processing platform and the underlying blockchain tech that powered bitcoin. He failed to gain majority agreement for his idea of proposing that Bitcoin should be developed to support running distributed applications (DApps) and programs (now referred to as smart contracts).
+
+Hence in 2013, he proposed the idea of Ethereum in a white paper he published. The original white paper is still maintained and available for readers **[here][5]**. The idea was to develop a blockchain based platform to run smart contracts and applications designed to run on nodes and user devices instead of servers.
+
+The Ethereum system is often mistaken to just mean the cryptocurrency ether, however, it has to be reiterated that Ethereum is a full stack platform for developing applications and executing them as well and has been so since inception whereas bitcoin isn’t. **Ether is currently the second biggest cryptocurrency** by market capitalization and trades at an average of $170 per ether at the time of writing this article[4].
+
+### Features and technicalities of the platform[5]
+
+ * As we’ve already mentioned, the cryptocurrency called ether is simply one of the things the platform features. The purpose of the system is more than taking care of financial transactions. In fact, the key difference between the Ethereum platform and Bitcoin is in their scripting capabilities. Ethereum is developed in a Turing complete programming language which means it has scripting and application capabilities similar to other major programming languages. Developers require this feature to create DApps and complex smart contracts on the platform, a feature that bitcoin misses on.
+ * The “mining” process of ether is more stringent and complex. While specialized ASICs may be used to mine bitcoin, the basic hashing algorithm used by Ethereum **(EThash)** reduces the advantage that ASICs have in this regard.
+ * The transaction fees itself to be paid as an incentive to miners and node operators for running the network is calculated using a computational token called **Gas**. Gas improves the system’s resilience and resistance to external hacks and attacks by requiring the initiator of the transaction to pay ethers proportionate to the number of computational resources that are required to carry out that transaction. This is in contrast to other platforms such as Bitcoin where the transaction fee is measured in tandem with the transaction size. As such, the average transaction costs in Ethereum is radically less than Bitcoin. This also implies that running applications running on the Ethereum virtual machine will require a fee depending straight up on the computational problems that the application is meant to solve. Basically, the more complex an execution, the more the fee.
+ * The block time for Ethereum is estimated to be around _**10-15 seconds**_. The block time is the average time that is required to timestamp and create a block on the blockchain network. Compared to the 10+ minutes the same transaction will take on the bitcoin network, it becomes apparent that _**Ethereum is much faster**_ with respect to transactions and verification of blocks.
+ * _It is also interesting to note that there is no hard cap on the amount of ether that can be mined or the rate at which ether can be mined leading to less radical system design than bitcoin._
+
+
+
+### Conclusion
+
+While Ethereum is comparable and far outpaces similar platforms, the platform itself lacked a definite path for development until the Ethereum enterprise alliance started pushing it. While the definite push for enterprise developments are made by the Ethereum platform, it has to be noted that Ethereum also caters to small-time developers and individuals as well. As such developing the platform for end users and enterprises leave a lot of specific functionality out of the loop for Ethereum. Also, the blockchain model proposed and developed by the Ethereum foundation is a public model whereas the one proposed by projects such as the Hyperledger project is private and permissioned.
+
+While only time can tell which platform among the ones put forward by Ethereum, Hyperledger, and R3 Corda among others will find the most fans in real-world use cases, such systems do prove the validity behind the claim of a blockchain powered future.
+
+**References:**
+
+ * [1] [**Gabriel Nicholas, “Ethereum Is Coding’s New Wild West | WIRED,” Wired , 2017**][6].
+ * [2] [**What is Ethereum? — Ethereum Homestead 0.1 documentation**][7].
+ * [3] [**Ethereum, a Virtual Currency, Enables Transactions That Rival Bitcoin’s – The New York Times**][8].
+ * [4] [**Cryptocurrency Market Capitalizations | CoinMarketCap**][9].
+ * [5] [**Introduction — Ethereum Homestead 0.1 documentation**][10].
+
+
+
+--------------------------------------------------------------------------------
+
+via: https://www.ostechnix.com/blockchain-2-0-what-is-ethereum/
+
+作者:[editor][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.ostechnix.com/author/editor/
+[b]: https://github.com/lujun9972
+[1]: https://www.ostechnix.com/wp-content/uploads/2019/04/Ethereum-720x340.png
+[2]: https://www.ostechnix.com/blockchain-2-0-an-introduction-to-hyperledger-project-hlp/
+[3]: https://www.ostechnix.com/blockchain-2-0-an-introduction/
+[4]: https://www.ostechnix.com/blockchain-2-0-explaining-smart-contracts-and-its-types/
+[5]: https://github.com/ethereum/wiki/wiki/White-Paper
+[6]: https://www.wired.com/story/ethereum-is-codings-new-wild-west/
+[7]: http://www.ethdocs.org/en/latest/introduction/what-is-ethereum.html#ethereum-virtual-machine
+[8]: https://www.nytimes.com/2016/03/28/business/dealbook/ethereum-a-virtual-currency-enables-transactions-that-rival-bitcoins.html
+[9]: https://coinmarketcap.com/
+[10]: http://www.ethdocs.org/en/latest/introduction/index.html
diff --git a/sources/tech/20190505 Five Methods To Check Your Current Runlevel In Linux.md b/sources/tech/20190505 Five Methods To Check Your Current Runlevel In Linux.md
new file mode 100644
index 0000000000..2169f04e51
--- /dev/null
+++ b/sources/tech/20190505 Five Methods To Check Your Current Runlevel In Linux.md
@@ -0,0 +1,183 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Five Methods To Check Your Current Runlevel In Linux?)
+[#]: via: (https://www.2daygeek.com/check-current-runlevel-in-linux/)
+[#]: author: (Magesh Maruthamuthu https://www.2daygeek.com/author/magesh/)
+
+Five Methods To Check Your Current Runlevel In Linux?
+======
+
+A run level is an operating system state on Linux system.
+
+There are seven runlevels exist, numbered from zero to six.
+
+A system can be booted into any of the given runlevel. Run levels are identified by numbers.
+
+Each runlevel designates a different system configuration and allows access to a different combination of processes.
+
+By default Linux boots either to runlevel 3 or to runlevel 5.
+
+Only one runlevel is executed at a time on startup. It doesn’t execute one after another.
+
+The default runlevel for a system is specified in the /etc/inittab file for SysVinit system.
+
+But systemd systems doesn’t read this file and it uses the following file `/etc/systemd/system/default.target` to get default runlevel information.
+
+We can check the Linux system current runlevel using the below five methods.
+
+ * **`runlevel Command:`** runlevel prints the previous and current runlevel of the system.
+ * **`who Command:`** Print information about users who are currently logged in. It will print the runlevel information with “-r” option.
+ * **`systemctl Command:`** It controls the systemd system and service manager.
+ * **`Using /etc/inittab File:`** The default runlevel for a system is specified in the /etc/inittab file for SysVinit System.
+ * **`Using /etc/systemd/system/default.target File:`** The default runlevel for a system is specified in the /etc/systemd/system/default.target file for systemd System.
+
+
+
+Detailed runlevels information is described in the below table.
+
+**Runlevel** | **SysVinit System** | **systemd System**
+---|---|---
+0 | Shutdown or Halt the system | shutdown.target
+1 | Single user mode | rescue.target
+2 | Multiuser, without NFS | multi-user.target
+3 | Full multiuser mode | multi-user.target
+4 | unused | multi-user.target
+5 | X11 (Graphical User Interface) | graphical.target
+6 | reboot the system | reboot.target
+
+The system will execute the programs/service based on the runlevel.
+
+For SysVinit system, it will be execute from the following location.
+
+ * Run level 0 – /etc/rc.d/rc0.d/
+ * Run level 1 – /etc/rc.d/rc1.d/
+ * Run level 2 – /etc/rc.d/rc2.d/
+ * Run level 3 – /etc/rc.d/rc3.d/
+ * Run level 4 – /etc/rc.d/rc4.d/
+ * Run level 5 – /etc/rc.d/rc5.d/
+ * Run level 6 – /etc/rc.d/rc6.d/
+
+
+
+For systemd system, it will be execute from the following location.
+
+ * runlevel1.target – /etc/systemd/system/rescue.target
+ * runlevel2.target – /etc/systemd/system/multi-user.target.wants
+ * runlevel3.target – /etc/systemd/system/multi-user.target.wants
+ * runlevel4.target – /etc/systemd/system/multi-user.target.wants
+ * runlevel5.target – /etc/systemd/system/graphical.target.wants
+
+
+
+### 1) How To Check Your Current Runlevel In Linux Using runlevel Command?
+
+runlevel prints the previous and current runlevel of the system.
+
+```
+$ runlevel
+N 5
+```
+
+ * **`N:`** “N” indicates that the runlevel has not been changed since the system was booted.
+ * **`5:`** “5” indicates the current runlevel of the system.
+
+
+
+### 2) How To Check Your Current Runlevel In Linux Using who Command?
+
+Print information about users who are currently logged in. It will print the runlevel information with `-r` option.
+
+```
+$ who -r
+ run-level 5 2019-04-22 09:32
+```
+
+### 3) How To Check Your Current Runlevel In Linux Using systemctl Command?
+
+systemctl is used to controls the systemd system and service manager. systemd is system and service manager for Unix like operating systems.
+
+It can work as a drop-in replacement for sysvinit system. systemd is the first process get started by kernel and holding PID 1.
+
+systemd uses `.service` files Instead of bash scripts (SysVinit uses). systemd sorts all daemons into their own Linux cgroups and you can see the system hierarchy by exploring `/cgroup/systemd` file.
+
+```
+$ systemctl get-default
+graphical.target
+```
+
+### 4) How To Check Your Current Runlevel In Linux Using /etc/inittab File?
+
+The default runlevel for a system is specified in the /etc/inittab file for SysVinit System but systemd systemd doesn’t read the files.
+
+So, it will work only on SysVinit system and not in systemd system.
+
+```
+$ cat /etc/inittab
+# inittab is only used by upstart for the default runlevel.
+#
+# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
+#
+# System initialization is started by /etc/init/rcS.conf
+#
+# Individual runlevels are started by /etc/init/rc.conf
+#
+# Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf
+#
+# Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,
+# with configuration in /etc/sysconfig/init.
+#
+# For information on how to write upstart event handlers, or how
+# upstart works, see init(5), init(8), and initctl(8).
+#
+# Default runlevel. The runlevels used are:
+# 0 - halt (Do NOT set initdefault to this)
+# 1 - Single user mode
+# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
+# 3 - Full multiuser mode
+# 4 - unused
+# 5 - X11
+# 6 - reboot (Do NOT set initdefault to this)
+#
+id:5:initdefault:
+```
+
+### 5) How To Check Your Current Runlevel In Linux Using /etc/systemd/system/default.target File?
+
+The default runlevel for a system is specified in the /etc/systemd/system/default.target file for systemd System.
+
+It doesn’t work on SysVinit system.
+
+```
+$ cat /etc/systemd/system/default.target
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Graphical Interface
+Documentation=man:systemd.special(7)
+Requires=multi-user.target
+Wants=display-manager.service
+Conflicts=rescue.service rescue.target
+After=multi-user.target rescue.service rescue.target display-manager.service
+AllowIsolate=yes
+```
+--------------------------------------------------------------------------------
+
+via: https://www.2daygeek.com/check-current-runlevel-in-linux/
+
+作者:[Magesh Maruthamuthu][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.2daygeek.com/author/magesh/
+[b]: https://github.com/lujun9972
diff --git a/sources/tech/20190505 How To Navigate Directories Faster In Linux.md b/sources/tech/20190505 How To Navigate Directories Faster In Linux.md
new file mode 100644
index 0000000000..e0979b3915
--- /dev/null
+++ b/sources/tech/20190505 How To Navigate Directories Faster In Linux.md
@@ -0,0 +1,350 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (How To Navigate Directories Faster In Linux)
+[#]: via: (https://www.ostechnix.com/navigate-directories-faster-linux/)
+[#]: author: (sk https://www.ostechnix.com/author/sk/)
+
+How To Navigate Directories Faster In Linux
+======
+
+![Navigate Directories Faster In Linux][1]
+
+Today we are going to learn some command line productivity hacks. As you already know, we use “cd” command to move between a stack of directories in Unix-like operating systems. In this guide I am going to teach you how to navigate directories faster without having to use “cd” command often. There could be many ways, but I only know the following five methods right now! I will keep updating this guide when I came across any methods or utilities to achieve this task in the days to come.
+
+### Five Different Methods To Navigate Directories Faster In Linux
+
+##### Method 1: Using “Pushd”, “Popd” And “Dirs” Commands
+
+This is the most frequent method that I use everyday to navigate between a stack of directories. The “Pushd”, “Popd”, and “Dirs” commands comes pre-installed in most Linux distributions, so don’t bother with installation. These trio commands are quite useful when you’re working in a deep directory structure and scripts. For more details, check our guide in the link given below.
+
+ * **[How To Use Pushd, Popd And Dirs Commands For Faster CLI Navigation][2]**
+
+
+
+##### Method 2: Using “bd” utility
+
+The “bd” utility also helps you to quickly go back to a specific parent directory without having to repeatedly typing “cd ../../.” on your Bash.
+
+Bd is also available in the [**Debian extra**][3] and [**Ubuntu universe**][4] repositories. So, you can install it using “apt-get” package manager in Debian, Ubuntu and other DEB based systems as shown below:
+
+```
+$ sudo apt-get update
+
+$ sudo apt-get install bd
+```
+
+For other distributions, you can install as shown below.
+
+```
+$ sudo wget --no-check-certificate -O /usr/local/bin/bd https://raw.github.com/vigneshwaranr/bd/master/bd
+
+$ sudo chmod +rx /usr/local/bin/bd
+
+$ echo 'alias bd=". bd -si"' >> ~/.bashrc
+
+$ source ~/.bashrc
+```
+
+To enable auto completion, run:
+
+```
+$ sudo wget -O /etc/bash_completion.d/bd https://raw.github.com/vigneshwaranr/bd/master/bash_completion.d/bd
+
+$ source /etc/bash_completion.d/bd
+```
+
+The Bd utility has now been installed. Let us see few examples to understand how to quickly move through stack of directories using this tool.
+
+Create some directories.
+
+```
+$ mkdir -p dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dir10
+```
+
+The above command will create a hierarchy of directories. Let us check [**directory structure**][5] using command:
+
+```
+$ tree dir1/
+dir1/
+└── dir2
+ └── dir3
+ └── dir4
+ └── dir5
+ └── dir6
+ └── dir7
+ └── dir8
+ └── dir9
+ └── dir10
+
+9 directories, 0 files
+```
+
+Alright, we have now 10 directories. Let us say you’re currently in 7th directory i.e dir7.
+
+```
+$ pwd
+/home/sk/dir1/dir2/dir3/dir4/dir5/dir6/dir7
+```
+
+You want to move to dir3. Normally you would type:
+
+```
+$ cd /home/sk/dir1/dir2/dir3
+```
+
+Right? yes! But it not necessary though! To go back to dir3, just type:
+
+```
+$ bd dir3
+```
+
+Now you will be in dir3.
+
+![][6]
+
+Navigate Directories Faster In Linux Using “bd” Utility
+
+Easy, isn’t it? It supports auto complete, so you can just type the partial name of a directory and hit the tab key to auto complete the full path.
+
+To check the contents of a specific parent directory, you don’t need to inside that particular directory. Instead, just type:
+
+```
+$ ls `bd dir1`
+```
+
+The above command will display the contents of dir1 from your current working directory.
+
+For more details, check out the following GitHub page.
+
+ * [**bd GitHub repository**][7]
+
+
+
+##### Method 3: Using “Up” Shell script
+
+The “Up” is a shell script allows you to move quickly to your parent directory. It works well on many popular shells such as Bash, Fish, and Zsh etc. Installation is absolutely easy too!
+
+To install “Up” on **Bash** , run the following commands one bye:
+
+```
+$ curl --create-dirs -o ~/.config/up/up.sh https://raw.githubusercontent.com/shannonmoeller/up/master/up.sh
+
+$ echo 'source ~/.config/up/up.sh' >> ~/.bashrc
+```
+
+The up script registers the “up” function and some completion functions via your “.bashrc” file.
+
+Update the changes using command:
+
+```
+$ source ~/.bashrc
+```
+
+On **zsh** :
+
+```
+$ curl --create-dirs -o ~/.config/up/up.sh https://raw.githubusercontent.com/shannonmoeller/up/master/up.sh
+
+$ echo 'source ~/.config/up/up.sh' >> ~/.zshrc
+```
+
+The up script registers the “up” function and some completion functions via your “.zshrc” file.
+
+Update the changes using command:
+
+```
+$ source ~/.zshrc
+```
+
+On **fish** :
+
+```
+$ curl --create-dirs -o ~/.config/up/up.fish https://raw.githubusercontent.com/shannonmoeller/up/master/up.fish
+
+$ source ~/.config/up/up.fish
+```
+
+The up script registers the “up” function and some completion functions via “funcsave”.
+
+Now it is time to see some examples.
+
+Let us create some directories.
+
+```
+$ mkdir -p dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dir10
+```
+
+Let us say you’re in 7th directory i.e dir7.
+
+```
+$ pwd
+/home/sk/dir1/dir2/dir3/dir4/dir5/dir6/dir7
+```
+
+You want to move to dir3. Using “cd” command, we can do this by typing the following command:
+
+```
+$ cd /home/sk/dir1/dir2/dir3
+```
+
+But it is really easy to go back to dir3 using “up” script:
+
+```
+$ up dir3
+```
+
+That’s it. Now you will be in dir3. To go one directory up, just type:
+
+```
+$ up 1
+```
+
+To go back two directory type:
+
+```
+$ up 2
+```
+
+It’s that simple. Did I type the full path? Nope. Also it supports tab completion. So just type the partial directory name and hit the tab to complete the full path.
+
+For more details, check out the GitHub page.
+
+ * [**Up GitHub Repository**][8]
+
+
+
+Please be mindful that “bd” and “up” tools can only help you to go backward i.e to the parent directory of the current working directory. You can’t move forward. If you want to switch to dir10 from dir5, you can’t! Instead, you need to use “cd” command to switch to dir10. These two utilities are meant for quickly moving you to the parent directory!
+
+##### Method 4: Using “Shortcut” tool
+
+This is yet another handy method to switch between different directories quickly and easily. This is somewhat similar to [**alias**][9] command. In this method, we create shortcuts to frequently used directories and use the shortcut name to go to that respective directory without having to type the path. If you’re working in deep directory structure and stack of directories, this method will greatly save some time. You can learn how it works in the guide given below.
+
+ * [**Create Shortcuts To The Frequently Used Directories In Your Shell**][10]
+
+
+
+##### Method 5: Using “CDPATH” Environment variable
+
+This method doesn’t require any installation. **CDPATH** is an environment variable. It is somewhat similar to **PATH** variable which contains many different paths concatenated using **‘:’** (colon). The main difference between PATH and CDPATH variables is the PATH variable is usable with all commands whereas CDPATH works only for **cd** command.
+
+I have the following directory structure.
+
+![][11]
+
+Directory structure
+
+As you see, there are four child directories under a parent directory named “ostechnix”.
+
+Now add this parent directory to CDPATH using command:
+
+```
+$ export CDPATH=~/ostechnix
+```
+
+You now can instantly cd to the sub-directories of the parent directory (i.e **~/ostechnix** in our case) from anywhere in the filesystem.
+
+For instance, currently I am in **/var/mail/** location.
+
+![][12]
+
+To cd into **~/ostechnix/Linux/** directory, we don’t have to use the full path of the directory as shown below:
+
+```
+$ cd ~/ostechnix/Linux
+```
+
+Instead, just mention the name of the sub-directory you want to switch to:
+
+```
+$ cd Linux
+```
+
+It will automatically cd to **~/ostechnix/Linux** directory instantly.
+
+![][13]
+
+As you can see in the above output, I didn’t use “cd ”. Instead, I just used “cd ” command.
+
+Please note that CDPATH will allow you to quickly navigate to only one child directory of the parent directory set in CDPATH variable. It doesn’t much help for navigating a stack of directories (directories inside sub-directories, of course).
+
+To find the values of CDPATH variable, run:
+
+```
+$ echo $CDPATH
+```
+
+Sample output would be:
+
+```
+/home/sk/ostechnix
+```
+
+**Set multiple values to CDPATH**
+
+Similar to PATH variable, we can also set multiple values (more than one directory) to CDPATH separated by colon (:).
+
+```
+$ export CDPATH=.:~/ostechnix:/etc:/var:/opt
+```
+
+**Make the changes persistent**
+
+As you already know, the above command (export) will only keep the values of CDPATH until next reboot. To permanently set the values of CDPATH, just add them to your **~/.bashrc** or **~/.bash_profile** files.
+
+```
+$ vi ~/.bash_profile
+```
+
+Add the values:
+
+```
+export CDPATH=.:~/ostechnix:/etc:/var:/opt
+```
+
+Hit **ESC** key and type **:wq** to save and exit.
+
+Apply the changes using command:
+
+```
+$ source ~/.bash_profile
+```
+
+**Clear CDPATH**
+
+To clear the values of CDPATH, use **export CDPATH=””**. Or, simply delete the entire line from **~/.bashrc** or **~/.bash_profile** files.
+
+In this article, you have learned the different ways to navigate directory stack faster and easier in Linux. As you can see, it’s not that difficult to browse a pile of directories faster. Now stop typing “cd ../../..” endlessly by using these tools. If you know any other worth trying tool or method to navigate directories faster, feel free to let us know in the comment section below. I will review and add them in this guide.
+
+And, that’s all for now. Hope this helps. More good stuffs to come. Stay tuned!
+
+Cheers!
+
+--------------------------------------------------------------------------------
+
+via: https://www.ostechnix.com/navigate-directories-faster-linux/
+
+作者:[sk][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.ostechnix.com/author/sk/
+[b]: https://github.com/lujun9972
+[1]: https://www.ostechnix.com/wp-content/uploads/2017/12/Navigate-Directories-Faster-In-Linux-720x340.png
+[2]: https://www.ostechnix.com/use-pushd-popd-dirs-commands-faster-cli-navigation/
+[3]: https://tracker.debian.org/pkg/bd
+[4]: https://launchpad.net/ubuntu/+source/bd
+[5]: https://www.ostechnix.com/view-directory-tree-structure-linux/
+[6]: http://www.ostechnix.com/wp-content/uploads/2017/12/Navigate-Directories-Faster-1.png
+[7]: https://github.com/vigneshwaranr/bd
+[8]: https://github.com/shannonmoeller/up
+[9]: https://www.ostechnix.com/the-alias-and-unalias-commands-explained-with-examples/
+[10]: https://www.ostechnix.com/create-shortcuts-frequently-used-directories-shell/
+[11]: http://www.ostechnix.com/wp-content/uploads/2018/12/tree-command-output.png
+[12]: http://www.ostechnix.com/wp-content/uploads/2018/12/pwd-command.png
+[13]: http://www.ostechnix.com/wp-content/uploads/2018/12/cdpath.png
diff --git a/sources/tech/20190506 Use udica to build SELinux policy for containers.md b/sources/tech/20190506 Use udica to build SELinux policy for containers.md
new file mode 100644
index 0000000000..4e31288a43
--- /dev/null
+++ b/sources/tech/20190506 Use udica to build SELinux policy for containers.md
@@ -0,0 +1,199 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Use udica to build SELinux policy for containers)
+[#]: via: (https://fedoramagazine.org/use-udica-to-build-selinux-policy-for-containers/)
+[#]: author: (Lukas Vrabec https://fedoramagazine.org/author/lvrabec/)
+
+Use udica to build SELinux policy for containers
+======
+
+![][1]
+
+While modern IT environments move towards Linux containers, the need to secure these environments is as relevant as ever. Containers are a process isolation technology. While containers can be a defense mechanism, they only excel when combined with SELinux.
+
+Fedora SELinux engineering built a new standalone tool, **udica** , to generate SELinux policy profiles for containers by automatically inspecting them. This article focuses on why _udica_ is needed in the container world, and how it makes SELinux and containers work better together. You’ll find examples of SELinux separation for containers that let you avoid turning protection off because the generic SELinux type _container_t_ is too tight. With _udica_ you can easily customize the policy with limited SELinux policy writing skills.
+
+### SELinux technology
+
+SELinux is a security technology that brings proactive security to Linux systems. It’s a labeling system that assigns a label to all _subjects_ (processes and users) and _objects_ (files, directories, sockets, etc.). These labels are then used in a security policy that controls access throughout the system. It’s important to mention that what’s not allowed in an SELinux security policy is denied by default. The policy rules are enforced by the kernel. This security technology has been in use on Fedora for several years. A real example of such a rule is:
+
+```
+allow httpd_t httpd_log_t: file { append create getattr ioctl lock open read setattr };
+```
+
+The rule allows any process labeled as _httpd_t_ ****to create, append, read and lock files labeled as _httpd_log_t_. Using the _ps_ command, you can list all processes with their labels:
+
+```
+$ ps -efZ | grep httpd
+system_u:system_r:httpd_t:s0 root 13911 1 0 Apr14 ? 00:05:14 /usr/sbin/httpd -DFOREGROUND
+...
+```
+
+To see which objects are labeled as httpd_log_t, use _semanage_ :
+
+```
+# semanage fcontext -l | grep httpd_log_t
+/var/log/httpd(/.)? all files system_u:object_r:httpd_log_t:s0
+/var/log/nginx(/.)? all files system_u:object_r:httpd_log_t:s0
+...
+```
+
+The SELinux security policy for Fedora is shipped in the _selinux-policy_ RPM package.
+
+### SELinux vs. containers
+
+In Fedora, the _container-selinux_ RPM package provides a generic SELinux policy for all containers started by engines like _podman_ or _docker_. Its main purposes are to protect the host system against a container process, and to separate containers from each other. For instance, containers confined by SELinux with the process type _container_t_ can only read/execute files in _/usr_ and write to _container_file_t_ ****files type on host file system. To prevent attacks by containers on each other, Multi-Category Security (MCS) is used.
+
+Using only one generic policy for containers is problematic, because of the huge variety of container usage. On one hand, the default container type ( _container_t_ ) is often too strict. For example:
+
+ * [Fedora SilverBlue][2] needs containers to read/write a user’s home directory
+ * [Fluentd][3] project needs containers to be able to read logs in the _/var/log_ directory
+
+
+
+On the other hand, the default container type could be too loose for certain use cases:
+
+ * It has no SELinux network controls — all container processes can bind to any network port
+ * It has no SELinux control on [Linux capabilities][4] — all container processes can use all capabilities
+
+
+
+There is one solution to handle both use cases: write a custom SELinux security policy for the container. This can be tricky, because SELinux expertise is required. For this purpose, the _udica_ tool was created.
+
+### Introducing udica
+
+Udica generates SELinux security profiles for containers. Its concept is based on the “block inheritance” feature inside the [common intermediate language][5] (CIL) supported by SELinux userspace. The tool creates a policy that combines:
+
+ * Rules inherited from specified CIL blocks (templates), and
+ * Rules discovered by inspection of container JSON file, which contains mountpoints and ports definitions
+
+
+
+You can load the final policy immediately, or move it to another system to load into the kernel. Here’s an example, using a container that:
+
+ * Mounts _/home_ as read only
+ * Mounts _/var/spool_ as read/write
+ * Exposes port _tcp/21_
+
+
+
+The container starts with this command:
+
+```
+# podman run -v /home:/home:ro -v /var/spool:/var/spool:rw -p 21:21 -it fedora bash
+```
+
+The default container type ( _container_t_ ) doesn’t allow any of these three actions. To prove it, you could use the _sesearch_ tool to query that the _allow_ rules are present on system:
+
+```
+# sesearch -A -s container_t -t home_root_t -c dir -p read
+```
+
+There’s no _allow_ rule present that lets a process labeled as _container_t_ access a directory labeled _home_root_t_ (like the _/home_ directory). The same situation occurs with _/var/spool_ , which is labeled _var_spool_t:_
+
+```
+# sesearch -A -s container_t -t var_spool_t -c dir -p read
+```
+
+On the other hand, the default policy completely allows network access.
+
+```
+# sesearch -A -s container_t -t port_type -c tcp_socket
+allow container_net_domain port_type:tcp_socket { name_bind name_connect recv_msg send_msg };
+allow sandbox_net_domain port_type:tcp_socket { name_bind name_connect recv_msg send_msg };
+```
+
+### Securing the container
+
+It would be great to restrict this access and allow the container to bind just on TCP port _21_ or with the same label. Imagine you find an example container using _podman ps_ whose ID is _37a3635afb8f_ :
+
+```
+# podman ps -q
+37a3635afb8f
+```
+
+You can now inspect the container and pass the inspection file to the _udica_ tool. The name for the new policy is _my_container_.
+
+```
+# podman inspect 37a3635afb8f > container.json
+# udica -j container.json my_container
+Policy my_container with container id 37a3635afb8f created!
+
+Please load these modules using:
+ # semodule -i my_container.cil /usr/share/udica/templates/{base_container.cil,net_container.cil,home_container.cil}
+
+Restart the container with: "--security-opt label=type:my_container.process" parameter
+```
+
+That’s it! You just created a custom SELinux security policy for the example container. Now you can load this policy into the kernel and make it active. The _udica_ output above even tells you the command to use:
+
+```
+# semodule -i my_container.cil /usr/share/udica/templates/{base_container.cil,net_container.cil,home_container.cil}
+```
+
+Now you must restart the container to allow the container engine to use the new custom policy:
+
+```
+# podman run --security-opt label=type:my_container.process -v /home:/home:ro -v /var/spool:/var/spool:rw -p 21:21 -it fedora bash
+```
+
+The example container is now running in the newly created _my_container.process_ SELinux process type:
+
+```
+# ps -efZ | grep my_container.process
+unconfined_u:system_r:container_runtime_t:s0-s0:c0.c1023 root 2275 434 1 13:49 pts/1 00:00:00 podman run --security-opt label=type:my_container.process -v /home:/home:ro -v /var/spool:/var/spool:rw -p 21:21 -it fedora bash
+system_u:system_r:my_container.process:s0:c270,c963 root 2317 2305 0 13:49 pts/0 00:00:00 bash
+```
+
+### Seeing the results
+
+The command _sesearch_ now shows _allow_ rules for accessing _/home_ and _/var/spool:_
+
+```
+# sesearch -A -s my_container.process -t home_root_t -c dir -p read
+allow my_container.process home_root_t:dir { getattr ioctl lock open read search };
+# sesearch -A -s my_container.process -t var_spool_t -c dir -p read
+allow my_container.process var_spool_t:dir { add_name getattr ioctl lock open read remove_name search write }
+```
+
+The new custom SELinux policy also allows _my_container.process_ to bind only to TCP/UDP ports labeled the same as TCP port 21:
+
+```
+# semanage port -l | grep 21 | grep ftp
+ ftp_port_t tcp 21, 989, 990
+# sesearch -A -s my_container.process -c tcp_socket -p name_bind
+ allow my_container.process ftp_port_t:tcp_socket name_bind;
+```
+
+### Conclusion
+
+The _udica_ tool helps you create SELinux policies for containers based on an inspection file without any SELinux expertise required. Now you can increase the security of containerized environments. Sources are available on [GitHub][6], and an RPM package is available in Fedora repositories for Fedora 28 and later.
+
+* * *
+
+*Photo by _[_Samuel Zeller_][7]_ on *[ _Unsplash_.][8]
+
+--------------------------------------------------------------------------------
+
+via: https://fedoramagazine.org/use-udica-to-build-selinux-policy-for-containers/
+
+作者:[Lukas Vrabec][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://fedoramagazine.org/author/lvrabec/
+[b]: https://github.com/lujun9972
+[1]: https://fedoramagazine.org/wp-content/uploads/2019/05/udica-816x345.jpg
+[2]: https://silverblue.fedoraproject.org
+[3]: https://www.fluentd.org
+[4]: http://man7.org/linux/man-pages/man7/capabilities.7.html
+[5]: https://en.wikipedia.org/wiki/Common_Intermediate_Language
+[6]: https://github.com/containers/udica
+[7]: https://unsplash.com/photos/KVG-XMOs6tw?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText
+[8]: https://unsplash.com/search/photos/lockers?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText
diff --git a/sources/tech/20190508 Innovations on the Linux desktop- A look at Fedora 30-s new features.md b/sources/tech/20190508 Innovations on the Linux desktop- A look at Fedora 30-s new features.md
new file mode 100644
index 0000000000..083a8c9768
--- /dev/null
+++ b/sources/tech/20190508 Innovations on the Linux desktop- A look at Fedora 30-s new features.md
@@ -0,0 +1,140 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Innovations on the Linux desktop: A look at Fedora 30's new features)
+[#]: via: (https://opensource.com/article/19/5/fedora-30-features)
+[#]: author: (Anderson Silva https://opensource.com/users/ansilva/users/marcobravo/users/alanfdoss/users/ansilva)
+
+Innovations on the Linux desktop: A look at Fedora 30's new features
+======
+Learn about some of the highlights in the latest version of Fedora
+Linux.
+![Fedora Linux distro on laptop][1]
+
+The latest version of Fedora Linux was released at the end of April. As a full-time Fedora user since its original release back in 2003 and an active contributor since 2007, I always find it satisfying to see new features and advancements in the community.
+
+If you want a TL;DR version of what's has changed in [Fedora 30][2], feel free to ignore this article and jump straight to Fedora's [ChangeSet][3] wiki page. Otherwise, keep on reading to learn about some of the highlights in the new version.
+
+### Upgrade vs. fresh install
+
+I upgraded my Lenovo ThinkPad T series from Fedora 29 to 30 using the [DNF system upgrade instructions][4], and so far it is working great!
+
+I also had the chance to do a fresh install on another ThinkPad, and it was a nice surprise to see a new boot screen on Fedora 30—it even picked up the Lenovo logo. I did not see this new and improved boot screen on the upgrade above; it was only on the fresh install.
+
+![Fedora 30 boot screen][5]
+
+### Desktop changes
+
+If you are a GNOME user, you'll be happy to know that Fedora 30 comes with the latest version, [GNOME 3.32][6]. It has an improved on-screen keyboard (handy for touch-screen laptops), brand new icons for core applications, and a new "Applications" panel under Settings that allows users to gain a bit more control on GNOME default handlers, access permissions, and notifications. Version 3.32 also improves Google Drive performance so that Google files and calendar appointments will be integrated with GNOME.
+
+![Applications panel in GNOME Settings][7]
+
+The new Applications panel in GNOME Settings
+
+Fedora 30 also introduces two new Desktop environments: Pantheon and Deepin. Pantheon is [ElementaryOS][8]'s default desktop environment and can be installed with a simple:
+
+
+```
+`$ sudo dnf groupinstall "Pantheon Desktop"`
+```
+
+I haven't used Pantheon yet, but I do use [Deepin][9]. Installation is simple; just run:
+
+
+```
+`$ sudo dnf install deepin-desktop`
+```
+
+then log out of GNOME and log back in, choosing "Deepin" by clicking on the gear icon on the login screen.
+
+![Deepin desktop on Fedora 30][10]
+
+Deepin desktop on Fedora 30
+
+Deepin appears as a very polished, user-friendly desktop environment that allows you to control many aspects of your environment with a click of a button. So far, the only issue I've had is that it can take a few extra seconds to complete login and return control to your mouse pointer. Other than that, it is brilliant! It is the first desktop environment I've used that seems to do high dots per inch (HiDPI) properly—or at least close to correctly.
+
+### Command line
+
+Fedora 30 upgrades the Bourne Again Shell (aka Bash) to version 5.0.x. If you want to find out about every change since its last stable version (4.4), read this [description][11]. I do want to mention that three new environments have been introduced in Bash 5:
+
+
+```
+$ echo $EPOCHSECONDS
+1556636959
+$ echo $EPOCHREALTIME
+1556636968.012369
+$ echo $BASH_ARGV0
+bash
+```
+
+Fedora 30 also updates the [Fish shell][12], a colorful shell with auto-suggestion, which can be very helpful for beginners. Fedora 30 comes with [Fish version 3][13], and you can even [try it out in a browser][14] without having to install it on your machine.
+
+(Note that Fish shell is not the same as guestfish for mounting virtual machine images, which comes with the libguestfs-tools package.)
+
+### Development
+
+Fedora 30 brings updates to the following languages: [C][15], [Boost (C++)][16], [Erlang][17], [Go][18], [Haskell][19], [Python][20], [Ruby][21], and [PHP][22].
+
+Regarding these updates, the most important thing to know is that Python 2 is deprecated in Fedora 30. The community and Fedora leadership are requesting that all package maintainers that still depend on Python 2 port their packages to Python 3 as soon as possible, as the plan is to remove virtually all Python 2 packages in Fedora 31.
+
+### Containers
+
+If you would like to run Fedora as an immutable OS for a container, kiosk, or appliance-like environment, check out [Fedora Silverblue][23]. It brings you all of Fedora's technology managed by [rpm-ostree][24], which is a hybrid image/package system that allows automatic updates and easy rollbacks for developers. It is a great option for anyone who wants to learn more and play around with [Flatpak deployments][25].
+
+Fedora Atomic is no longer available under Fedora 30, but you can still [download it][26]. If your jam is containers, don't despair: even though Fedora Atomic is gone, a brand new [Fedora CoreOS][27] is under development and should be going live soon!
+
+### What else is new?
+
+As of Fedora 30, **/usr/bin/gpg** points to [GnuPG][28] v2 by default, and [NFS][29] server configuration is now located at **/etc/nfs.conf** instead of **/etc/sysconfig/nfs**.
+
+There have also been a [few changes][30] for installation and boot time.
+
+Last but not least, check out [Fedora Spins][31] for a spin of Fedora that defaults to your favorite Window manager and [Fedora Labs][32] for functionally curated software bundles built on Fedora 30 (i.e. astronomy, security, and gaming).
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/5/fedora-30-features
+
+作者:[Anderson Silva ][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/ansilva/users/marcobravo/users/alanfdoss/users/ansilva
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/fedora_on_laptop_lead.jpg?itok=XMc5wo_e (Fedora Linux distro on laptop)
+[2]: https://getfedora.org/
+[3]: https://fedoraproject.org/wiki/Releases/30/ChangeSet
+[4]: https://fedoraproject.org/wiki/DNF_system_upgrade#How_do_I_use_it.3F
+[5]: https://opensource.com/sites/default/files/uploads/fedora30_fresh-boot.jpg (Fedora 30 boot screen)
+[6]: https://help.gnome.org/misc/release-notes/3.32/
+[7]: https://opensource.com/sites/default/files/uploads/fedora10_gnome.png (Applications panel in GNOME Settings)
+[8]: https://elementary.io/
+[9]: https://www.deepin.org/en/dde/
+[10]: https://opensource.com/sites/default/files/uploads/fedora10_deepin.png (Deepin desktop on Fedora 30)
+[11]: https://git.savannah.gnu.org/cgit/bash.git/tree/NEWS
+[12]: https://fishshell.com/
+[13]: https://fishshell.com/release_notes.html
+[14]: https://rootnroll.com/d/fish-shell/
+[15]: https://docs.fedoraproject.org/en-US/fedora/f30/release-notes/developers/Development_C/
+[16]: https://docs.fedoraproject.org/en-US/fedora/f30/release-notes/developers/Development_Boost/
+[17]: https://docs.fedoraproject.org/en-US/fedora/f30/release-notes/developers/Development_Erlang/
+[18]: https://docs.fedoraproject.org/en-US/fedora/f30/release-notes/developers/Development_Go/
+[19]: https://docs.fedoraproject.org/en-US/fedora/f30/release-notes/developers/Development_Haskell/
+[20]: https://docs.fedoraproject.org/en-US/fedora/f30/release-notes/developers/Development_Python/
+[21]: https://docs.fedoraproject.org/en-US/fedora/f30/release-notes/developers/Development_Ruby/
+[22]: https://docs.fedoraproject.org/en-US/fedora/f30/release-notes/developers/Development_Web/
+[23]: https://silverblue.fedoraproject.org/
+[24]: https://rpm-ostree.readthedocs.io/en/latest/
+[25]: https://flatpak.org/setup/Fedora/
+[26]: https://getfedora.org/en/atomic/
+[27]: https://coreos.fedoraproject.org/
+[28]: https://gnupg.org/index.html
+[29]: https://en.wikipedia.org/wiki/Network_File_System
+[30]: https://docs.fedoraproject.org/en-US/fedora/f30/release-notes/sysadmin/Installation/
+[31]: https://spins.fedoraproject.org
+[32]: https://labs.fedoraproject.org/
diff --git a/sources/tech/20190508 Why startups should release their code as open source.md b/sources/tech/20190508 Why startups should release their code as open source.md
new file mode 100644
index 0000000000..f877964b5f
--- /dev/null
+++ b/sources/tech/20190508 Why startups should release their code as open source.md
@@ -0,0 +1,79 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Why startups should release their code as open source)
+[#]: via: (https://opensource.com/article/19/5/startups-release-code)
+[#]: author: (Clément Flipo https://opensource.com/users/cl%C3%A9ment-flipo)
+
+Why startups should release their code as open source
+======
+Dokit wondered whether giving away its knowledge as open source was a
+bad business decision, but that choice has been the foundation of its
+success.
+![open source button on keyboard][1]
+
+It's always hard to recall exactly how a project started, but sometimes that can help you understand that project more clearly. When I think about it, our platform for creating user guides and documentation, [Dokit][2], came straight out of my childhood. Growing up in a house where my toys were Meccano and model airplane kits, the idea of making things, taking individual pieces and putting them together to create a new whole, was always a fundamental part of what it meant to play. My father worked for a DIY company, so there were always signs of building, repair, and instruction manuals around the house. When I was young, my parents sent me to join the Boy Scouts, where we made tables, tents and mud ovens, which helped foster my enjoyment of shared learning that I later found in the open source movement.
+
+The art of repairing things and recycling products that I learned in childhood became part of what I did for a job. Then it became my ambition to take the reassuring feel of learning how to make and do and repair at home or in a group—but put it online. That inspired Dokit's creation.
+
+### The first months
+
+It hasn't always been easy, but since founding our company in 2017, I've realized that the biggest and most worthwhile goals are generally always difficult. If we were to achieve our plan to revolutionize the way [old-fashioned manuals and user guides are created and published][3], and maximize our impact in what we knew all along would be a niche market, we knew that a guiding mission was crucial to how we organized everything else. It was from there that we reached our first big decision: to [quickly launch a proof of concept using an existing open source framework][4], MediaWiki, and from there to release all of our code as open source.
+
+In retrospect, this decision was made easier by the fact that [MediaWiki][5] was already up and running. With 15,000 developers already active around the world and on a platform that included 90% of the features we needed to meet our minimum viable product (MVP), things would have no doubt been harder without support from the engine that made its name by powering Wikipedia. Confluence, a documentation platform in use by many enterprises, offers some good features, but in the end, it was an easy choice between the two.
+
+Placing our faith in the community, we put the first version of our platform straight onto GitHub. The excitement of watching the world's makers start using our platform, even before we'd done any real advertising, felt like an early indication that we were on the right track. Although the [maker and Fablab movements][6] encourage users to share instructions, and even sets out this expectation in the [Fablab charter][7] (as stated by MIT), in reality, there is a lack of real documentation.
+
+The first and most significant reason people like using our platform is that it responds to the very real problem of poor documentation inside an otherwise great movement—one that we knew could be even better. To us, it felt a bit like we were repairing a gap in the community of makers and DIY. Within a year of our launch, Fablabs, [Wikifab][8], [Open Source Ecology][9], [Les Petits Debrouillards][10], [Ademe][11], and [Low-Tech Lab][12] had installed our tool on their servers for creating step-by-step tutorials.
+
+Before even putting out a press release, one of our users, Wikifab, began to get praise in national media as "[the Wikipedia of DIY][13]." In just two years, we've seen hundreds of communities launched on their own Dokits, ranging from the fun to the funny to the more formal product guides. Again, the power of the community is the force we want to harness, and it's constantly amazing to see projects—ranging from wind turbines to pet feeders—develop engaging product manuals using the platform we started.
+
+### Opening up open source
+
+Looking back at such a successful first two years, it's clear to us that our choice to use open source was fundamental to how we got where we are as fast as we did. The ability to gather feedback in open source is second-to-none. If a piece of code didn't work, [someone could tell us right away][14]. Why wait on appointments with consultants if you can learn along with those who are already using the service you created?
+
+The level of engagement from the community also revealed the potential (including the potential interest) in our market. [Paris has a good and growing community of developers][15], but open source took us from a pool of a few thousand locally, and brought us to millions of developers all around the world who could become a part of what we were trying to make happen. The open availability of our code also proved reassuring to our users and customers who felt safe that, even if our company went away, the code wouldn't.
+
+If that was most of what we thought might happen as a result of using open source, there were also surprises along the way. By adopting an open method, we found ourselves gaining customers, reputation, and perfectly targeted advertising that we didn't have to pay for out of our limited startup budget. We found that the availability of our code helped improve our recruitment process because we were able to test candidates using our code before we made hires, and this also helped simplify the onboarding journey for those we did hire.
+
+In what we see as a mixture of embarrassment and solidarity, the totally public nature of developers creating code in an open setting also helped drive up quality. People can share feedback with one another, but the public nature of the work also seems to encourage people to do their best. In the spirit of constant improvement and of continually building and rebuilding how Dokit works, supporting the community is something that we know we'd like to do more of and get better at in future.
+
+### Where to next?
+
+Even with the faith we've always had in what we were doing, and seeing the great product manuals that have been developed using our software, it never stops being exciting to see our project grow, and we're certain that the future has good things in store.
+
+In the early days, we found ourselves living a lot under the fear of distributing our knowledge for free. In reality, it was the opposite—open source gave us the ability to very rapidly build a startup that was sustainable from the beginning. Dokit is a platform designed to give its users the confidence to build, assemble, repair, and create entirely new inventions with the support of a community. In hindsight, we found we were doing the same thing by using open source to build a platform.
+
+Just like when doing a repair or assembling a physical product, it's only when you have confidence in your methods that things truly begin to feel right. Now, at the beginning of our third year, we're starting to see growing global interest as the industry responds to [new generations of customers who want to use, reuse, and assemble products][16] that respond to changing homes and lifestyles. By providing the support of an online community, we think we're helping to create circumstances in which people feel more confident in doing things for themselves.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/5/startups-release-code
+
+作者:[Clément Flipo][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/cl%C3%A9ment-flipo
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/button_push_open_keyboard_file_organize.png?itok=KlAsk1gx (open source button on keyboard)
+[2]: https://dokit.io/
+[3]: https://dokit.io/9-reasons-to-stop-writing-your-user-manuals-or-work-instructions-with-word-processors/
+[4]: https://medium.com/@gofloaters/5-cheap-ways-to-build-your-mvp-71d6170d5250
+[5]: https://en.wikipedia.org/wiki/MediaWiki
+[6]: https://en.wikipedia.org/wiki/Maker_culture
+[7]: http://fab.cba.mit.edu/about/charter/
+[8]: https://wikifab.org/
+[9]: https://www.opensourceecology.org/
+[10]: http://www.lespetitsdebrouillards.org/
+[11]: https://www.ademe.fr/en
+[12]: http://lowtechlab.org/
+[13]: https://www.20minutes.fr/magazine/economie-collaborative-mag/2428995-20160919-pour-construire-leurs-meubles-eux-memes-ils-creent-le-wikipedia-du-bricolage
+[14]: https://opensource.guide/how-to-contribute/
+[15]: https://www.rudebaguette.com/2013/03/here-are-the-details-on-the-new-developer-school-that-xavier-niel-is-launching-tomorrow/?lang=en
+[16]: https://www.inc.com/ari-zoldan/why-now-is-the-best-time-to-start-a-diy-home-based.html
diff --git a/sources/tech/20190509 5 essential values for the DevOps mindset.md b/sources/tech/20190509 5 essential values for the DevOps mindset.md
new file mode 100644
index 0000000000..4746d2ffaa
--- /dev/null
+++ b/sources/tech/20190509 5 essential values for the DevOps mindset.md
@@ -0,0 +1,85 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (5 essential values for the DevOps mindset)
+[#]: via: (https://opensource.com/article/19/5/values-devops-mindset)
+[#]: author: (Brent Aaron Reed https://opensource.com/users/brentaaronreed/users/wpschaub/users/wpschaub/users/wpschaub/users/cobiacomm/users/marcobravo/users/brentaaronreed)
+
+5 essential values for the DevOps mindset
+======
+People and process take more time but are more important than any
+technology "silver bullet" in solving business problems.
+![human head, brain outlined with computer hardware background][1]
+
+Many IT professionals today struggle with adapting to change and disruption. Are you struggling with just trying to keep the lights on, so to speak? Do you feel overwhelmed? This is not uncommon. Today, the status quo is not enough, so IT constantly tries to re-invent itself.
+
+With over 30 years of combined IT experience, we have witnessed how important people and relationships are to IT's ability to be effective and help the business thrive. However, most of the time, our conversations about IT solutions start with technology rather than people and process. The propensity to look for a "silver bullet" to address business and IT challenges is far too common. But you can't just buy innovation, DevOps, or effective teams and ways of working; they need to be nurtured, supported, and guided.
+
+With disruption so prevalent and there being such a critical demand for speed of change, we need both discipline and guardrails. The five essential values for the DevOps mindset, described below, will support the practices that will get us there. These values are not new ideas; they are refactored as we've learned from our experience. Some of the values may be interchangeable, they are flexible, and they guide overall principles that support (like a pillar) these five values.
+
+![5 essential values for the DevOps mindset][2]
+
+### 1\. Feedback from stakeholders is essential
+
+How do we know if we are creating more value for us than for our stakeholders? We need persistent quality data to analyze, inform, and drive better decisions. Relevant information from trusted sources is vital for any business to thrive. We need to listen to and understand what our stakeholders are saying—and not saying—and we need to implement changes in a way that enables us to adjust our thinking—and our processes and technologies—and adapt them as needed to delight our stakeholders. Too often, we see little change, or lots of change for the wrong reasons, because of incorrect information (data). Therefore, aligning change to our stakeholders' feedback is an essential value and helps us focus on what is most important to making our company successful.
+
+> Focus on our stakeholders and their feedback rather than simply changing for the sake of change.
+
+### 2\. Improve beyond the limits of today's processes
+
+We want our products and services to continuously delight our customers—our most important stakeholders—therefore, we need to improve continually. This is not only about quality; it could also mean costs, availability, relevance, and many other goals and factors. Creating repeatable processes or utilizing a common framework is great—they can improve governance and a host of other issues—however, that should not be our end goal. As we look for ways to improve, we must adjust our processes, complemented by the right tech and tools. There may be reasons to throw out a "so-called" framework because not doing so could add waste—or worse, simply "cargo culting" (doing something with of no value or purpose).
+
+> Strive to always innovate and improve beyond repeatable processes and frameworks.
+
+### 3\. No new silos to break down silos
+
+Silos and DevOps are incompatible. We see this all the time: an IT director brings in so-called "experts" to implement agile and DevOps, and what do they do? These "experts" create a new problem on top of the existing problem, which is another silo added to an IT department and a business riddled with silos. Creating "DevOps" titles goes against the very principles of agile and DevOps, which are based on the concept of breaking down silos. In both agile and DevOps, teamwork is essential, and if you don't work in a self-organizing team, you're doing neither of them.
+
+> Inspire and share collaboratively instead of becoming a hero or creating a silo.
+
+### 4\. Knowing your customer means cross-organization collaboration
+
+No part of the business is an independent entity because they all have stakeholders, and the primary stakeholder is always the customer. "The customer is always right" (or the king, as I like to say). The point is, without the customer, there really is no business, and to stay in business today, we need to "differentiate" from our competitors. We also need to know how our customers feel about us and what they want from us. Knowing what the customer wants is imperative and requires timely feedback to ensure the business addresses these primary stakeholders' needs and concerns quickly and responsibly.
+
+![Minimize time spent with build-measure-learn process][3]
+
+Whether it comes from an idea, a concept, an assumption, or direct stakeholder feedback, we need to identify and measure the feature or service our product delivers by using the explore, build, test, deliver lifecycle. Fundamentally, this means that we need to be "plugged into" our organization across the organization. There are no borders in continuous innovation, learning, and DevOps. Thus when we measure across the enterprise, we can understand the whole and take actionable, meaningful steps to improve.
+
+> Measure performance across the organization, not just in a line of business.
+
+### 5\. Inspire adoption through enthusiasm
+
+Not everyone is driven to learn, adapt, and change; however, just like smiles can be infectious, so can learning and wanting to be part of a culture of change. Adapting and evolving within a culture of learning provides a natural mechanism for a group of people to learn and pass on information (i.e., cultural transmission). Learning styles, attitudes, methods, and processes continually evolve so we can improve upon them. The next step is to apply what was learned and improved and share the information with colleagues. Learning does not happen automatically; it takes effort, evaluation, discipline, awareness, and especially communication; unfortunately these are things that tools and automation alone will not provide. Review your processes, automation, tool strategies, and implementation work, make it transparent, and collaborate with your colleagues on reuse and improvement.
+
+> Promote a culture of learning through lean quality deliverables, not just tools and automation.
+
+### Summary
+
+![Continuous goals of DevOps mindset][4]
+
+As our companies adopt DevOps, we continue to champion these five values over any book, website, or automation software. It takes time to adopt this mindset, and this is very different than what we used to do as sysadmins. It's a wholly new way of working that will take many years to mature. Do these principles align with your own? Share them in the comments or on our website, [Agents of chaos][5].
+
+* * *
+
+Can you really do DevOps without sharing scripts or code? DevOps manifesto proponents value cross-...
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/5/values-devops-mindset
+
+作者:[Brent Aaron Reed][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/brentaaronreed/users/wpschaub/users/wpschaub/users/wpschaub/users/cobiacomm/users/marcobravo/users/brentaaronreed
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/brain_data.png?itok=RH6NA32X (human head, brain outlined with computer hardware background)
+[2]: https://opensource.com/sites/default/files/uploads/devops_mindset_values.png (5 essential values for the DevOps mindset)
+[3]: https://opensource.com/sites/default/files/uploads/devops_mindset_minimze-time.jpg (Minimize time spent with build-measure-learn process)
+[4]: https://opensource.com/sites/default/files/uploads/devops_mindset_continuous.png (Continuous goals of DevOps mindset)
+[5]: http://agents-of-chaos.org
diff --git a/sources/tech/20190509 A day in the life of an open source performance engineering team.md b/sources/tech/20190509 A day in the life of an open source performance engineering team.md
new file mode 100644
index 0000000000..373983e8bc
--- /dev/null
+++ b/sources/tech/20190509 A day in the life of an open source performance engineering team.md
@@ -0,0 +1,138 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (A day in the life of an open source performance engineering team)
+[#]: via: (https://opensource.com/article/19/5/life-performance-engineer)
+[#]: author: (Aakarsh Gopi https://opensource.com/users/aakarsh/users/portante/users/anaga/users/gameloid)
+
+A day in the life of an open source performance engineering team
+======
+Collaborating with the community enables performance engineering to
+address the confusion and complexity that come with working on a broad
+spectrum of products.
+![Team checklist and to dos][1]
+
+In today's world, open source software solutions are a collaborative effort of the community. Can a performance engineering team operate the same way, by collaborating with the community to address the confusion and complexity that come with working on a broad spectrum of products?
+
+To answer that question, we need to explore some basic questions:
+
+ * What does a performance engineering team do?
+ * How does a performance engineering team fulfill its responsibilities?
+ * How are open source tools developed or leveraged for performance analysis?
+
+
+
+The term "performance engineering" has different meanings, which causes difficulty in figuring out a performance engineering team's responsibilities. Adding to the confusion, a team may be charged with working on a broad spectrum of products, ranging from an operating system like RHEL, whose performance can be significantly impacted by hardware components (CPU caches, network interface controllers, disk technologies, etc.), to something much higher up in the stack like Kubernetes, which comes with the added challenges of operating at scale without compromising on performance.
+
+Performance engineering has progressed a lot since the days of running manual A/B testing and single-system benchmarks. Now, these teams test cloud infrastructures and add machine learning classifiers as a component in the CI/CD pipeline for identifying performance regression in releases of products.
+
+### What does a performance engineering team do?
+
+A performance engineering team is generally responsible for the following (among other things):
+
+ * Identifying potential performance issues
+ * Identifying any scale issues that could occur
+ * Developing tuning guides and/or tools that would enable the user to achieve the most out of a product
+ * Developing guides and/or working with customers to help with capacity planning
+ * Providing customers with performance expectations for different use cases of the product
+
+
+
+The mission of our specific team is to:
+
+ * Establish performance and scale leadership of the Red Hat portfolio; the scope includes component level, system, and solution analysis
+ * Collaborate with engineering, product management, product marketing, and Customer Experience and Engagement (CEE), as well as hardware and software partners
+ * Deliver public-facing guidance, internal enablement, and continuous integration tests
+
+
+
+Our team fulfills our mission in the following ways:
+
+ * We work with product teams to set performance goals and develop performance tests to run against those products deployed to see how they measure up to those goals.
+ * We also work to re-run performance tests to ensure there are no regressions in behaviors.
+ * We develop open source tooling to achieve our product performance goals, making them available to the communities where the products are derived to re-create what we do.
+ * We work to be transparent and open about how we do performance engineering; sharing these methods and approaches benefits communities, allowing them to reuse our work, and benefits us by leveraging the work they contribute with these tools.
+
+
+
+### How does a performance engineering team fulfill its responsibilities?
+
+Meeting these responsibilities requires collaboration with other teams, such as product management, development, QA/QE, documentation, and consulting, and with the communities.
+
+_Collaboration_ allows a team to be successful by pulling together team members' diverse knowledge and experience. A performance engineering team builds tools to share their knowledge both within the team and with the community, furthering the value of collaboration.
+
+Our performance engineering team achieves success through:
+
+ * **Collaboration:** _Intra_ -team collaboration is as important as _inter_ -team collaboration for our performance engineering team
+ * Most performance engineers tend to create a niche for themselves in one or more sub-disciplines of performance engineering via tooling, performance analysis, systems knowledge, systems configuration, and such. Our team is composed of engineers with knowledge of setting up/configuring systems across the product stack, those who know how a configuration option would affect the system's performance, and so on. Our team's success is heavily reliant on effective collaboration between performance engineers on the team.
+ * Our team works closely with other organizations at various levels within Red Hat and the communities where our products are derived.
+ * **Knowledge:** To understand the performance implications of configuration and/or system changes, deep knowledge of the product alone is not sufficient.
+ * Our team has the knowledge to cover performance across all levels of the stack:
+ * Hardware setup and configuration
+ * Networking and scale considerations
+ * Operating system setup and configuration (Linux kernel, userspace stack)
+ * Storage sub-systems (Ceph)
+ * Cloud infrastructure (OpenStack, RHV)
+ * Cloud deployments (OpenShift/Kubernetes)
+ * Product architectures
+ * Software technologies (databases like Postgres; software-defined networking and storage)
+ * Product interactions with the underlying hardware
+ * Tooling to monitor and accomplish repeatable benchmarking
+ * **Tooling:** The differentiator for our performance engineering team is the data collected through its tools to help tackle performance analysis complexity in the environments where our products are deployed.
+
+
+
+### How are open source tools developed or leveraged for performance analysis?
+
+Tooling is no longer a luxury but a need for today's performance engineering teams. With today's product solutions being so complex (and increasing in complexity as more solutions are composed to solve ever-larger problems), we need tools to help us run performance test suites in a repeatable manner, collect data about those runs, and help us distill that data so it becomes understandable and usable.
+
+Yet, no performance engineering team is judged on how performance analysis is done, but rather on the results achieved from this analysis.
+
+This tension can be resolved by collaboratively developing tools. A performance engineering team can't spend all its time developing tools, since that would prevent it from effectively collecting data. By developing its tools in a collaborative manner, a team can leverage work from the community to make further progress while still generating the result by which they will be measured.
+
+Tooling is the backbone of our performance engineering team, and we strive to use the tools already available upstream. When no tools are available in the community that fit our needs, we've built tools that help us achieve our goals and made them available to the community. Open sourcing our tools has helped us immensely because we receive contributions from our competitors and partners, allowing us to solve problems collectively through collaboration.
+
+![Performance Engineering Tools][2]
+
+Following are some of the tools our team has contributed to and rely upon for our work:
+
+ * **[Perf-c2c][3]:** Is your performance impacted by false sharing in CPU caches? The perf-c2c tool can help you tackle this problem by helping you inspect the cache lines where false sharing is detected and understand the readers/writers accessing those cache lines along with the offsets where those accesses occurred. You can read more about this tool on [Joe Mario's blog][4].
+ * **[Pbench][5]:** Do you repeat the same steps when collecting data about performance, but fail to do it consistently? Or do you find it difficult to compare results with others because you're collecting different configuration data? Pbench is a tool that attempts to standardize the way data is collected for performance so comparisons and historical reviews are much easier. Pbench is at the heart of our tooling efforts, as most of the other tools consume it in some form. Pbench is a Swiss Army Knife, as it allows the user to run benchmarks such as fio, uperf, or custom, user-defined tests while gathering metrics through tools such as sar, iostat, and pidstat, standardizing the methods of collecting configuration data about the environment. Pbench provides a dashboard UI to help review and analyze the data collected.
+ * **[Browbeat][6]:** Do you want to monitor a complex environment such as an OpenStack cluster while running tests? Browbeat is the solution, and its power lies in its ability to collect comprehensive data, ranging from logs to system metrics, about an OpenStack cluster while it orchestrates workloads. Browbeat can also monitor the OpenStack cluster while users run test/workloads of their choice either manually or through their own automation.
+ * **[Ripsaw][7]:** Do you want to compare the performance of different Kubernetes distros against the same platform? Do you want to compare the performance of the same Kubernetes distros deployed on different platforms? Ripsaw is a relatively new tool created to run workloads through Kubernetes native calls using the Ansible operator framework to provide solutions to the above questions. Ripsaw's unique selling point is that it can run against any kind of Kubernetes distribution, thus it would run the same against a Kubernetes cluster, on Minikube, or on an OpenShift cluster deployed on OpenStack or bare metal.
+ * **[ClusterLoader][8]:** Ever wondered how an OpenShift component would perform under different cluster states? If you are looking for an answer that can stress the cluster, ClusterLoader will help. The team has generalized the tool so it can be used with any Kubernetes distro. It is currently hosted in the [perf-tests repository][9].
+
+
+
+### Bottom line
+
+Given the scale at which products are evolving rapidly, performance engineering teams need to build tooling to help them keep up with products' evolution and diversification.
+
+Open source-based software solutions are a collaborative effort of the community. Our performance engineering team operates in the same way, collaborating with the community to address the confusion and complexity that comes with working on a broad spectrum of products. By developing our tools in a collaborative manner and using tools from the community, we are leveraging the community's work to make progress, while still generating the results we are measured on.
+
+_Collaboration_ is our key to accomplish our goals and ensure the success of our team.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/5/life-performance-engineer
+
+作者:[Aakarsh Gopi ][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/aakarsh/users/portante/users/anaga/users/gameloid
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/todo_checklist_team_metrics_report.png?itok=oB5uQbzf (Team checklist and to dos)
+[2]: https://opensource.com/sites/default/files/uploads/performanceengineeringtools.png (Performance Engineering Tools)
+[3]: http://man7.org/linux/man-pages/man1/perf-c2c.1.html
+[4]: https://joemario.github.io/blog/2016/09/01/c2c-blog/
+[5]: https://github.com/distributed-system-analysis/pbench
+[6]: https://github.com/openstack/browbeat
+[7]: https://github.com/cloud-bulldozer/ripsaw
+[8]: https://github.com/openshift/origin/tree/master/test/extended/cluster
+[9]: https://github.com/kubernetes/perf-tests/tree/master/clusterloader
diff --git a/sources/tech/20190509 Query freely available exchange rate data with ExchangeRate-API.md b/sources/tech/20190509 Query freely available exchange rate data with ExchangeRate-API.md
new file mode 100644
index 0000000000..3db9708c81
--- /dev/null
+++ b/sources/tech/20190509 Query freely available exchange rate data with ExchangeRate-API.md
@@ -0,0 +1,162 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Query freely available exchange rate data with ExchangeRate-API)
+[#]: via: (https://opensource.com/article/19/5/exchange-rate-data)
+[#]: author: (Chris Hermansen https://opensource.com/users/clhermansen)
+
+Query freely available exchange rate data with ExchangeRate-API
+======
+In this interview, ExchangeRate-API's founder explains why exchange rate
+data should be freely accessible to developers who want to build useful
+stuff.
+![scientific calculator][1]
+
+Last year, [I wrote about][2] using the Groovy programming language to access foreign exchange rate data from an API to simplify my expense records. I showed how two exchange rate sites, [fixer.io][3] and apilayer.net (now [apilayer.com][4]), could provide the data I needed, allowing me to convert between Indian rupees (INR) and Canadian dollars (CAD) using the former, and Chilean pesos (CLP) and Canadian dollars using the latter.
+
+Recently, David over at [ExchangeRate-API.com][5] reached out to me to say, "the free API you mentioned (Fixer) has been bought by CurrencyLayer and had its no-signup/unlimited access deprecated." He also told me, "I run a free API called ExchangeRate-API.com that has the same JSON format as the original Fixer, doesn't require any signup, and allows unlimited requests."
+
+After exchanging a few emails, we decided to turn our conversation into an interview. Below the interview, you can find scripts and usage instructions. (The interview has been edited slightly for clarity.)
+
+### About ExchangeRate-API
+
+_**Chris:** How is ExchangeRate-API different from other online exchange-rate services? What motivates you to provide this service?_
+
+**David:** When I started ExchangeRate-API with a friend in 2010, we built and released it for free because we really needed this service for another project and couldn't find one despite extensive googling. There are now around 20 such APIs offering quite a few different approaches. Over the years, I've tried a number of different approaches, but offering quality data for free has always proven the most popular. I'm also motivated by the thought that this data should be freely accessible to developers who want to build useful stuff even if they don't have a budget.
+
+Thus, the main difference with our currency conversion API is that it's unlimited and requires no signup. This also makes starting to use it really fast—you literally just copy the endpoint URL and you're good to go.
+
+There are one or two other free and unlimited APIs, but these typically just serve the daily reference rates provided by the European Central Bank. ExchangeRate-API collects the public reference rates from a number of central banks and then blends them to reduce the risk of outlying values. It also does acceptance checking to ensure the rates aren't wildly wrong (for instance an inverted data capture recording US dollars to CLP instead of CLP to USD) and weights different sources based on their historical accuracy. This makes the service quite reliable. I'm currently working on a transparency project to compare and show the accuracy of this public reference rate blend against a proprietary data source so potential users can make more informed decisions on what type of currency data service is right for them.
+
+_**Chris:** I'm delighted that you've included Canadian dollars and Indian rupees, as that is one problem I need to solve. I'm sad to see that you don't have Chilean pesos (another problem I need to solve). Can you tell us how you select the list of currencies? Do you anticipate adding other currencies to your list?_
+
+**David:** Since my main aim for this service is to offer stable and reliable exchange rate data, I only include currencies when there is more than one data source for that currency code. For instance, after you mentioned that you're looking for CLP data, I added the daily reference rates published by the Central Bank of Chile to our system. If I can find another source that includes CLP, it would be included in our list of supported currencies, but until then, unfortunately not. The goal is to support as many currencies as possible.
+
+One thing to note is that, for some currencies, the service has the minimum two sources, but a few currency pairs (for instance USD/EUR) are included in almost every set of public reference rates. The transparent accuracy project I mentioned will hopefully make this difference clear so that users can understand why our USD/EUR rate might be more accurate than less common pairs like CLP/INR and also the degree of variance in accuracy between the pairs. It will take some work to make showing this information quick and easy to understand.
+
+### The API's architecture
+
+_**Chris:** Can you tell us a bit about your API's architecture? Do you use open source components to deliver your service?_
+
+**David:** I exclusively use open source software to run ExchangeRate-API. I'm definitely an open source enthusiast and am always getting friends to switch to open source, explaining licenses, and donating when I can to the projects I use most. I also try to email maintainers of projects I use to say thanks, but I don't do this enough.
+
+The stack is currently Ubuntu LTS, MariaDB, Nginx, PHP 7, and Memcached. I also use Bootstrap and Picnic open source CSS frameworks. I use Let's Encrypt for HTTPS certificates via the Electronic Frontier Foundation's open source ACME client, [Certbot][6]. The service makes extensive use of classic tools like UFW/iptables, cURL, OpenSSH, and Git.
+
+My approach is typically to keep everything as simple as possible while using the tried-and-tested open source building blocks. For a project that aims to _always_ be available for users to convert currencies, this feels like the best route to reliability. I love reading about innovative new projects that could be useful for a project like this (for example, CockroachDB), but I wouldn't use them until they are considered really bulletproof. Obviously, things like [Heartbleed][7] show that there are risks with "boring" projects too—but I think these are easier to manage than the potential for unknown risks with newer, cutting-edge projects.
+
+In terms of the infrastructure setup, I've steadily built and improved the system over the last nine years, and it now comprises roughly three tiers. The main cluster runs on Amazon Web Services (AWS) and consists of Ubuntu EC2 servers and a high-availability MariaDB relational database service (RDS) instance. The EC2 instances are spread across multiple AWS Availability Zones and fronted by the managed AWS Elastic Load Balancing (ELB) service. Between the RDS database instance with automated cross-zone failover and the ELB-fronted EC2 instances spread across availability zones, this setup is exceptionally available. It is, however, only in one locale. So I've set up a second tier of virtual private server (VPS) instances in different geographic locations to reduce latency and distribute the load away from the more expensive AWS infrastructure. These are currently with Linode, but I have also used DigitalOcean and Vultr recently.
+
+Finally, this is all protected behind Cloudflare. With a free service, it's inevitable that some users will choose to abuse the system, and Cloudflare is an amazing product that's vital to ExchangeRate-API. Our servers can be protected and our users get low-latency, in-region caches. Cloudflare is set up with both the load balancing and traffic steering products to reduce latency and instantly shift traffic from unhealthy parts of the infrastructure to available origins.
+
+With this very redundant approach, there hasn't been downtime as a result of infrastructure problems or user load for around three years. The few periods of degraded service experienced in this time are all due to issues with code, deployment strategy, or config mistakes. The setup currently handles hundreds of millions of requests per month with low load levels and manageable costs, so there's plenty of room for growth.
+
+The actual application code is PHP with heavy use of Memcached. Memcached is an amazing open source project started by Brad Fitzpatrick in 2003. It's not particularly glamorous, but it is an incredibly reliable and performant distributed in-memory key value store.
+
+### Engaging with the open source community
+
+_**Chris:** There is an impressive amount of open source in your configuration. How do you engage with the broader community of users in these projects?_
+
+**David:** I really struggle with the best way to be a good open source citizen while running a side project SaaS. I've considered building an open source library of some sort and releasing it, but I haven't thought of something that hasn't already been done and that I would be able to make the time commitment to reliably maintain. I'd only start a project like this if I could be confident I'd have the time to ensure users who choose the project wouldn't suddenly find themselves depending on abandonware. I've also looked into contributing to the projects that ExchangeRate-API depends on, but since I only use the biggest, most established options, I lack the expertise to make a meaningful contribution to such serious projects.
+
+I'm currently working on a new "Pro" plan for the service and I'm going to set a percentage of this income to donate to my open source dependencies. This still feels like a bandage though—answering this question makes me realize I need to put more time into starting an open source project that calls ExchangeRate-API home!
+
+### Looking ahead
+
+_**Chris:** We can only query the latest exchange rate, but it appears that you may be offering historical rates sometime later this year. Can you tell us more about the technical challenges with serving up historical data?_
+
+**David:** There is a dataset of historical rates blended using our same algorithm from multiple central bank reference sets. However, I stopped new signups for it due to some issues with the data quality. The dataset reaches back to 1990, and there were a few earlier periods that need better data validation. As such, I'm building a better system for checking and comparing the data as it's ingested as well as adding an additional data source. The plan is to have a clean and more comprehensively verified-as-accurate dataset available later this year.
+
+In terms of the technical side of things, historical data is slightly more complex than live data. Compared to the live dataset (which is just a few bytes) the historical data is millions of database rows. This data was originally served from the database infrastructure with a long time-to-live (TTL) intermediary-caching layer. This was largely performant but struggled in situations where users wanted to dump the entire dataset as fast as the network could handle it. If the cache was sufficiently warm, this was fine, but if reboots, new server deployments, etc. had taken place recently, these big request sets would "miss" enough on the cache that the database would have problematic load spikes.
+
+Obviously, the goal is an infrastructure that can handle even aggressive use cases with normal performance, so the new historical rates dataset will be accompanied by a preemptive in-memory cache rather than a request-driven one. Thankfully, RAM is cheap these days, and putting a couple hundred megabytes of data entirely into RAM is a plausible approach even for a small project like ExchangeRate-API.com.
+
+_**Chris:** It sounds like you've been through quite a few iterations of this service to get to where it is today! Where do you see it going in the next few years?_
+
+**David:** I'd aim for it to have reached coverage of every world currency so that anyone looking for this sort of software can easily and programmatically get the exchange rates they need for free.
+
+I'd also definitely like to have an affordable Pro plan that really resonates with users. Getting this right would mean better infrastructure and lower latency for free users as well.
+
+Finally, I'd like to have some sort of useful open source library under the ExchangeRate-API banner. Starting a small project that finds an enthusiastic community would be really rewarding. It's great to run something that's free-as-in-beer, but it would be even better if part of it was free-as-in-speech, as well.
+
+### How to use the service
+
+It's easy enough to test out the service using **wget** , as follows:
+
+
+```
+clh@marseille:~$ wget -O -
+\--2019-04-26 13:48:23--
+Resolving api.exchangerate-api.com (api.exchangerate-api.com)... 2606:4700:20::681a:c80, 2606:4700:20::681a:d80, 104.26.13.128, ...
+Connecting to api.exchangerate-api.com (api.exchangerate-api.com)|2606:4700:20::681a:c80|:443... connected.
+HTTP request sent, awaiting response... 200 OK
+Length: unspecified [application/json]
+Saving to: ‘STDOUT’
+
+\- [<=>
+] 0 --.-KB/s {"base":"INR","date":"2019-04-26","time_last_updated":1556236800,"rates":{"INR":1,"AUD":0.020343,"BRL":0.056786,"CAD":0.019248,"CHF":0.014554,"CNY":0.096099,"CZK":0.329222,"DKK":0.095497,"EUR":0.012789,"GBP":0.011052,"HKD":0.111898,"HUF":4.118615,"IDR":199.61769,"ILS":0.051749,"ISK":1.741659,"JPY":1.595527,"KRW":16.553091,"MXN":0.272383,"MYR":0.058964,"NOK":0.123365,"NZD":0.02161,"PEN":0.047497,"PHP":0.744974,"PLN":0.054927,"RON":0.060923,"RUB":0.921808,"SAR":0.053562,"SEK":0.135226,"SGD":0.019442,"THB":0.457501,"TRY":0- [ <=> ] 579 --.-KB/s in 0s
+
+2019-04-26 13:48:23 (15.5 MB/s) - written to stdout [579]
+
+clh@marseille:~$
+```
+
+The result is returned as a JSON payload, giving conversion rates from Indian rupees (the currency I requested in the URL) to all the currencies handled by ExchangeRate-API.
+
+The Groovy shell can access the API:
+
+
+```
+clh@marseille:~$ groovysh
+Groovy Shell (2.5.3, JVM: 1.8.0_212)
+Type ':help' or ':h' for help.
+\----------------------------------------------------------------------------------------------------------------------------------
+groovy:000> import groovy.json.JsonSlurper
+===> groovy.json.JsonSlurper
+groovy:000> result = (new JsonSlurper()).parse(
+groovy:001> new InputStreamReader((new URL('))
+groovy:002> )
+===> [base:INR, date:2019-04-26, time_last_updated:1556236800, rates:[INR:1, AUD:0.020343, BRL:0.056786, CAD:0.019248, CHF:0.014554, CNY:0.096099, CZK:0.329222, DKK:0.095497, EUR:0.012789, GBP:0.011052, HKD:0.111898, HUF:4.118615, IDR:199.61769, ILS:0.051749, ISK:1.741659, JPY:1.595527, KRW:16.553091, MXN:0.272383, MYR:0.058964, NOK:0.123365, NZD:0.02161, PEN:0.047497, PHP:0.744974, PLN:0.054927, RON:0.060923, RUB:0.921808, SAR:0.053562, SEK:0.135226, SGD:0.019442, THB:0.457501, TRY:0.084362, TWD:0.441385, USD:0.014255, ZAR:0.206271]]
+groovy:000>
+```
+
+The same JSON payload is returned as a result of the Groovy JSON slurper operating on the URL. Of course, since this is Groovy, the JSON is converted into a Map, so you can do stuff like this:
+
+
+```
+groovy:000> println result.base
+INR
+===> null
+groovy:000> println result.date
+2019-04-26
+===> null
+groovy:000> println result.rates.CAD
+0.019248
+===> null
+```
+
+And that's it!
+
+Do you use ExchangeRate-API or a similar service? Share how you use exchange rate data in the comments.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/5/exchange-rate-data
+
+作者:[Chris Hermansen ][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/clhermansen
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/calculator_money_currency_financial_tool.jpg?itok=2QMa1y8c (scientific calculator)
+[2]: https://opensource.com/article/18/3/groovy-calculate-foreign-exchange
+[3]: https://fixer.io/
+[4]: https://apilayer.com/
+[5]: https://www.exchangerate-api.com/
+[6]: https://certbot.eff.org/
+[7]: https://en.wikipedia.org/wiki/Heartbleed
diff --git a/sources/tech/20190510 5 open source hardware products for the great outdoors.md b/sources/tech/20190510 5 open source hardware products for the great outdoors.md
new file mode 100644
index 0000000000..357fbfdcb8
--- /dev/null
+++ b/sources/tech/20190510 5 open source hardware products for the great outdoors.md
@@ -0,0 +1,96 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (5 open source hardware products for the great outdoors)
+[#]: via: (https://opensource.com/article/19/5/hardware-outdoors)
+[#]: author: (Michael Weinberg https://opensource.com/users/mweinberg/users/aliciagibb)
+
+5 open source hardware products for the great outdoors
+======
+Here's some equipment you can buy or make yourself for hitting the great
+outdoors, no generators or batteries required.
+![Tree clouds][1]
+
+When people think about open source hardware, they often think about the general category of electronics that can be soldered and needs batteries. While there are [many][2] fantastic open source pieces of electronics, the overall category of open source hardware is much broader. This month we take a look at open source hardware that you can take out into the world, no power outlet or batteries required.
+
+### Hummingbird Hammocks
+
+[Hummingbird Hammocks][3] offers an entire line of open source camping gear. You can set up an open source [rain tarp][4]...
+
+![An open source rain tarp from Hummingbird Hammocks][5]
+
+...with open source [friction adjusters][6]
+
+![Open source friction adjusters from Hummingbird Hammocks.][7]
+
+Open source friction adjusters from Hummingbird Hammocks.
+
+...over your open source [hammock][8]
+
+![An open source hammock from Hummingbird Hammocks.][9]
+
+An open source hammock from Hummingbird Hammocks.
+
+...hung with open source [tree straps][10].
+
+![Open source tree straps from Hummingbird Hammocks.][11]
+
+Open source tree straps from Hummingbird Hammocks.
+
+The design for each of these items is fully documented, so you can even use them as a starting point for making your own outdoor gear (if you are willing to trust friction adjusters you design yourself).
+
+### Openfoil
+
+[Openfoil][12] is an open source hydrofoil for kitesurfing. Hydrofoils are attached to the bottom of kiteboards and allow the rider to rise out of the water. This aspect of the design makes riding in low wind situations and with smaller kites easier. It can also reduce the amount of noise the board makes on the water, making for a quieter experience. Because this hydrofoil is open source you can customize it to your needs and adventure tolerance.
+
+![Openfoil, an open source hydrofoil for kitesurfing.][13]
+
+Openfoil, an open source hydrofoil for kitesurfing.
+
+### Solar water heater
+
+If you prefer your outdoors-ing a bit closer to home, you could build this open source [solar water heater][14] created by the [Anisa Foundation][15]. This appliance focuses energy from the sun to heat water that can then be used in your home, letting you reduce your carbon footprint without having to give up long, hot showers. Of course, you can also [monitor its temperature ][16]over the internet if you need to feel connected.
+
+![An open source solar water heater from the Anisa Foundation.][17]
+
+An open source solar water heater from the Anisa Foundation.
+
+## Wrapping up
+
+As these projects make clear, open source hardware is more than just electronics. You can take it with you to the woods, to the beach, or just to your roof. Next month we’ll talk about open source instruments and musical gear. Until then, [certify][18] your open source hardware!
+
+Learn how and why you may want to start using the Open Source Hardware Certification logo on an...
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/5/hardware-outdoors
+
+作者:[Michael Weinberg][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/mweinberg/users/aliciagibb
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/life_tree_clouds.png?itok=b_ftihhP (Tree clouds)
+[2]: https://certification.oshwa.org/list.html
+[3]: https://hummingbirdhammocks.com/
+[4]: https://certification.oshwa.org/us000102.html
+[5]: https://opensource.com/sites/default/files/uploads/01-hummingbird_hammocks_rain_tarp.png (An open source rain tarp from Hummingbird Hammocks)
+[6]: https://certification.oshwa.org/us000105.html
+[7]: https://opensource.com/sites/default/files/uploads/02-hummingbird_hammocks_friction_adjusters_400_px.png (Open source friction adjusters from Hummingbird Hammocks.)
+[8]: https://certification.oshwa.org/us000095.html
+[9]: https://opensource.com/sites/default/files/uploads/03-hummingbird_hammocks_hammock_400_px.png (An open source hammock from Hummingbird Hammocks.)
+[10]: https://certification.oshwa.org/us000098.html
+[11]: https://opensource.com/sites/default/files/uploads/04-hummingbird_hammocks_tree_straps_400_px_0.png (Open source tree straps from Hummingbird Hammocks.)
+[12]: https://certification.oshwa.org/fr000004.html
+[13]: https://opensource.com/sites/default/files/uploads/05-openfoil-original_size.png (Openfoil, an open source hydrofoil for kitesurfing.)
+[14]: https://certification.oshwa.org/mx000002.html
+[15]: http://www.fundacionanisa.org/index.php?lang=en
+[16]: https://thingspeak.com/channels/72565
+[17]: https://opensource.com/sites/default/files/uploads/06-solar_water_heater_500_px.png (An open source solar water heater from the Anisa Foundation.)
+[18]: https://certification.oshwa.org/
diff --git a/sources/tech/20190510 Check storage performance with dd.md b/sources/tech/20190510 Check storage performance with dd.md
new file mode 100644
index 0000000000..8cdea81f69
--- /dev/null
+++ b/sources/tech/20190510 Check storage performance with dd.md
@@ -0,0 +1,432 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Check storage performance with dd)
+[#]: via: (https://fedoramagazine.org/check-storage-performance-with-dd/)
+[#]: author: (Gregory Bartholomew https://fedoramagazine.org/author/glb/)
+
+Check storage performance with dd
+======
+
+![][1]
+
+This article includes some example commands to show you how to get a _rough_ estimate of hard drive and RAID array performance using the _dd_ command. Accurate measurements would have to take into account things like [write amplification][2] and [system call overhead][3], which this guide does not. For a tool that might give more accurate results, you might want to consider using [hdparm][4].
+
+To factor out performance issues related to the file system, these examples show how to test the performance of your drives and arrays at the block level by reading and writing directly to/from their block devices. **WARNING** : The _write_ tests will destroy any data on the block devices against which they are run. **Do not run them against any device that contains data you want to keep!**
+
+### Four tests
+
+Below are four example dd commands that can be used to test the performance of a block device:
+
+ 1. One process reading from $MY_DISK:
+
+```
+# dd if=$MY_DISK of=/dev/null bs=1MiB count=200 iflag=nocache
+```
+
+ 2. One process writing to $MY_DISK:
+
+```
+# dd if=/dev/zero of=$MY_DISK bs=1MiB count=200 oflag=direct
+```
+
+ 3. Two processes reading concurrently from $MY_DISK:
+
+```
+# (dd if=$MY_DISK of=/dev/null bs=1MiB count=200 iflag=nocache &); (dd if=$MY_DISK of=/dev/null bs=1MiB count=200 iflag=nocache skip=200 &)
+```
+
+ 4. Two processes writing concurrently to $MY_DISK:
+
+```
+# (dd if=/dev/zero of=$MY_DISK bs=1MiB count=200 oflag=direct &); (dd if=/dev/zero of=$MY_DISK bs=1MiB count=200 oflag=direct skip=200 &)
+```
+
+
+
+
+– The _iflag=nocache_ and _oflag=direct_ parameters are important when performing the read and write tests (respectively) because without them the dd command will sometimes show the resulting speed of transferring the data to/from [RAM][5] rather than the hard drive.
+
+– The values for the _bs_ and _count_ parameters are somewhat arbitrary and what I have chosen should be large enough to provide a decent average in most cases for current hardware.
+
+– The _null_ and _zero_ devices are used for the destination and source (respectively) in the read and write tests because they are fast enough that they will not be the limiting factor in the performance tests.
+
+– The _skip=200_ parameter on the second dd command in the concurrent read and write tests is to ensure that the two copies of dd are operating on different areas of the hard drive.
+
+### 16 examples
+
+Below are demonstrations showing the results of running each of the above four tests against each of the following four block devices:
+
+ 1. MY_DISK=/dev/sda2 (used in examples 1-X)
+ 2. MY_DISK=/dev/sdb2 (used in examples 2-X)
+ 3. MY_DISK=/dev/md/stripped (used in examples 3-X)
+ 4. MY_DISK=/dev/md/mirrored (used in examples 4-X)
+
+
+
+A video demonstration of the these tests being run on a PC is provided at the end of this guide.
+
+Begin by putting your computer into _rescue_ mode to reduce the chances that disk I/O from background services might randomly affect your test results. **WARNING** : This will shutdown all non-essential programs and services. Be sure to save your work before running these commands. You will need to know your _root_ password to get into rescue mode. The _passwd_ command, when run as the root user, will prompt you to (re)set your root account password.
+
+```
+$ sudo -i
+# passwd
+# setenforce 0
+# systemctl rescue
+```
+
+You might also want to temporarily disable logging to disk:
+
+```
+# sed -r -i.bak 's/^#?Storage=.*/Storage=none/' /etc/systemd/journald.conf
+# systemctl restart systemd-journald.service
+```
+
+If you have a swap device, it can be temporarily disabled and used to perform the following tests:
+
+```
+# swapoff -a
+# MY_DEVS=$(mdadm --detail /dev/md/swap | grep active | grep -o "/dev/sd.*")
+# mdadm --stop /dev/md/swap
+# mdadm --zero-superblock $MY_DEVS
+```
+
+#### Example 1-1 (reading from sda)
+
+```
+# MY_DISK=$(echo $MY_DEVS | cut -d ' ' -f 1)
+# dd if=$MY_DISK of=/dev/null bs=1MiB count=200 iflag=nocache
+```
+
+```
+200+0 records in
+200+0 records out
+209715200 bytes (210 MB, 200 MiB) copied, 1.7003 s, 123 MB/s
+```
+
+#### Example 1-2 (writing to sda)
+
+```
+# MY_DISK=$(echo $MY_DEVS | cut -d ' ' -f 1)
+# dd if=/dev/zero of=$MY_DISK bs=1MiB count=200 oflag=direct
+```
+
+```
+200+0 records in
+200+0 records out
+209715200 bytes (210 MB, 200 MiB) copied, 1.67117 s, 125 MB/s
+```
+
+#### Example 1-3 (reading concurrently from sda)
+
+```
+# MY_DISK=$(echo $MY_DEVS | cut -d ' ' -f 1)
+# (dd if=$MY_DISK of=/dev/null bs=1MiB count=200 iflag=nocache &); (dd if=$MY_DISK of=/dev/null bs=1MiB count=200 iflag=nocache skip=200 &)
+```
+
+```
+200+0 records in
+200+0 records out
+209715200 bytes (210 MB, 200 MiB) copied, 3.42875 s, 61.2 MB/s
+200+0 records in
+200+0 records out
+209715200 bytes (210 MB, 200 MiB) copied, 3.52614 s, 59.5 MB/s
+```
+
+#### Example 1-4 (writing concurrently to sda)
+
+```
+# MY_DISK=$(echo $MY_DEVS | cut -d ' ' -f 1)
+# (dd if=/dev/zero of=$MY_DISK bs=1MiB count=200 oflag=direct &); (dd if=/dev/zero of=$MY_DISK bs=1MiB count=200 oflag=direct skip=200 &)
+```
+
+```
+200+0 records out
+209715200 bytes (210 MB, 200 MiB) copied, 3.2435 s, 64.7 MB/s
+200+0 records in
+200+0 records out
+209715200 bytes (210 MB, 200 MiB) copied, 3.60872 s, 58.1 MB/s
+```
+
+#### Example 2-1 (reading from sdb)
+
+```
+# MY_DISK=$(echo $MY_DEVS | cut -d ' ' -f 2)
+# dd if=$MY_DISK of=/dev/null bs=1MiB count=200 iflag=nocache
+```
+
+```
+200+0 records in
+200+0 records out
+209715200 bytes (210 MB, 200 MiB) copied, 1.67285 s, 125 MB/s
+```
+
+#### Example 2-2 (writing to sdb)
+
+```
+# MY_DISK=$(echo $MY_DEVS | cut -d ' ' -f 2)
+# dd if=/dev/zero of=$MY_DISK bs=1MiB count=200 oflag=direct
+```
+
+```
+200+0 records in
+200+0 records out
+209715200 bytes (210 MB, 200 MiB) copied, 1.67198 s, 125 MB/s
+```
+
+#### Example 2-3 (reading concurrently from sdb)
+
+```
+# MY_DISK=$(echo $MY_DEVS | cut -d ' ' -f 2)
+# (dd if=$MY_DISK of=/dev/null bs=1MiB count=200 iflag=nocache &); (dd if=$MY_DISK of=/dev/null bs=1MiB count=200 iflag=nocache skip=200 &)
+```
+
+```
+200+0 records in
+200+0 records out
+209715200 bytes (210 MB, 200 MiB) copied, 3.52808 s, 59.4 MB/s
+200+0 records in
+200+0 records out
+209715200 bytes (210 MB, 200 MiB) copied, 3.57736 s, 58.6 MB/s
+```
+
+#### Example 2-4 (writing concurrently to sdb)
+
+```
+# MY_DISK=$(echo $MY_DEVS | cut -d ' ' -f 2)
+# (dd if=/dev/zero of=$MY_DISK bs=1MiB count=200 oflag=direct &); (dd if=/dev/zero of=$MY_DISK bs=1MiB count=200 oflag=direct skip=200 &)
+```
+
+```
+200+0 records in
+200+0 records out
+209715200 bytes (210 MB, 200 MiB) copied, 3.7841 s, 55.4 MB/s
+200+0 records in
+200+0 records out
+209715200 bytes (210 MB, 200 MiB) copied, 3.81475 s, 55.0 MB/s
+```
+
+#### Example 3-1 (reading from RAID0)
+
+```
+# mdadm --create /dev/md/stripped --homehost=any --metadata=1.0 --level=0 --raid-devices=2 $MY_DEVS
+# MY_DISK=/dev/md/stripped
+# dd if=$MY_DISK of=/dev/null bs=1MiB count=200 iflag=nocache
+```
+
+```
+200+0 records in
+200+0 records out
+209715200 bytes (210 MB, 200 MiB) copied, 0.837419 s, 250 MB/s
+```
+
+#### Example 3-2 (writing to RAID0)
+
+```
+# MY_DISK=/dev/md/stripped
+# dd if=/dev/zero of=$MY_DISK bs=1MiB count=200 oflag=direct
+```
+
+```
+200+0 records in
+200+0 records out
+209715200 bytes (210 MB, 200 MiB) copied, 0.823648 s, 255 MB/s
+```
+
+#### Example 3-3 (reading concurrently from RAID0)
+
+```
+# MY_DISK=/dev/md/stripped
+# (dd if=$MY_DISK of=/dev/null bs=1MiB count=200 iflag=nocache &); (dd if=$MY_DISK of=/dev/null bs=1MiB count=200 iflag=nocache skip=200 &)
+```
+
+```
+200+0 records in
+200+0 records out
+209715200 bytes (210 MB, 200 MiB) copied, 1.31025 s, 160 MB/s
+200+0 records in
+200+0 records out
+209715200 bytes (210 MB, 200 MiB) copied, 1.80016 s, 116 MB/s
+```
+
+#### Example 3-4 (writing concurrently to RAID0)
+
+```
+# MY_DISK=/dev/md/stripped
+# (dd if=/dev/zero of=$MY_DISK bs=1MiB count=200 oflag=direct &); (dd if=/dev/zero of=$MY_DISK bs=1MiB count=200 oflag=direct skip=200 &)
+```
+
+```
+200+0 records in
+200+0 records out
+209715200 bytes (210 MB, 200 MiB) copied, 1.65026 s, 127 MB/s
+200+0 records in
+200+0 records out
+209715200 bytes (210 MB, 200 MiB) copied, 1.81323 s, 116 MB/s
+```
+
+#### Example 4-1 (reading from RAID1)
+
+```
+# mdadm --stop /dev/md/stripped
+# mdadm --create /dev/md/mirrored --homehost=any --metadata=1.0 --level=1 --raid-devices=2 --assume-clean $MY_DEVS
+# MY_DISK=/dev/md/mirrored
+# dd if=$MY_DISK of=/dev/null bs=1MiB count=200 iflag=nocache
+```
+
+```
+200+0 records in
+200+0 records out
+209715200 bytes (210 MB, 200 MiB) copied, 1.74963 s, 120 MB/s
+```
+
+#### Example 4-2 (writing to RAID1)
+
+```
+# MY_DISK=/dev/md/mirrored
+# dd if=/dev/zero of=$MY_DISK bs=1MiB count=200 oflag=direct
+```
+
+```
+200+0 records in
+200+0 records out
+209715200 bytes (210 MB, 200 MiB) copied, 1.74625 s, 120 MB/s
+```
+
+#### Example 4-3 (reading concurrently from RAID1)
+
+```
+# MY_DISK=/dev/md/mirrored
+# (dd if=$MY_DISK of=/dev/null bs=1MiB count=200 iflag=nocache &); (dd if=$MY_DISK of=/dev/null bs=1MiB count=200 iflag=nocache skip=200 &)
+```
+
+```
+200+0 records in
+200+0 records out
+209715200 bytes (210 MB, 200 MiB) copied, 1.67171 s, 125 MB/s
+200+0 records in
+200+0 records out
+209715200 bytes (210 MB, 200 MiB) copied, 1.67685 s, 125 MB/s
+```
+
+#### Example 4-4 (writing concurrently to RAID1)
+
+```
+# MY_DISK=/dev/md/mirrored
+# (dd if=/dev/zero of=$MY_DISK bs=1MiB count=200 oflag=direct &); (dd if=/dev/zero of=$MY_DISK bs=1MiB count=200 oflag=direct skip=200 &)
+```
+
+```
+200+0 records in
+200+0 records out
+209715200 bytes (210 MB, 200 MiB) copied, 4.09666 s, 51.2 MB/s
+200+0 records in
+200+0 records out
+209715200 bytes (210 MB, 200 MiB) copied, 4.1067 s, 51.1 MB/s
+```
+
+#### Restore your swap device and journald configuration
+
+```
+# mdadm --stop /dev/md/stripped /dev/md/mirrored
+# mdadm --create /dev/md/swap --homehost=any --metadata=1.0 --level=1 --raid-devices=2 $MY_DEVS
+# mkswap /dev/md/swap
+# swapon -a
+# mv /etc/systemd/journald.conf.bak /etc/systemd/journald.conf
+# systemctl restart systemd-journald.service
+# reboot
+```
+
+### Interpreting the results
+
+Examples 1-1, 1-2, 2-1, and 2-2 show that each of my drives read and write at about 125 MB/s.
+
+Examples 1-3, 1-4, 2-3, and 2-4 show that when two reads or two writes are done in parallel on the same drive, each process gets at about half the drive’s bandwidth (60 MB/s).
+
+The 3-x examples show the performance benefit of putting the two drives together in a RAID0 (data stripping) array. The numbers, in all cases, show that the RAID0 array performs about twice as fast as either drive is able to perform on its own. The trade-off is that you are twice as likely to lose everything because each drive only contains half the data. A three-drive array would perform three times as fast as a single drive (all drives being equal) but it would be thrice as likely to suffer a [catastrophic failure][6].
+
+The 4-x examples show that the performance of the RAID1 (data mirroring) array is similar to that of a single disk except for the case where multiple processes are concurrently reading (example 4-3). In the case of multiple processes reading, the performance of the RAID1 array is similar to that of the RAID0 array. This means that you will see a performance benefit with RAID1, but only when processes are reading concurrently. For example, if a process tries to access a large number of files in the background while you are trying to use a web browser or email client in the foreground. The main benefit of RAID1 is that your data is unlikely to be lost [if a drive fails][7].
+
+### Video demo
+
+Testing storage throughput using dd
+
+### Troubleshooting
+
+If the above tests aren’t performing as you expect, you might have a bad or failing drive. Most modern hard drives have built-in Self-Monitoring, Analysis and Reporting Technology ([SMART][8]). If your drive supports it, the _smartctl_ command can be used to query your hard drive for its internal statistics:
+
+```
+# smartctl --health /dev/sda
+# smartctl --log=error /dev/sda
+# smartctl -x /dev/sda
+```
+
+Another way that you might be able to tune your PC for better performance is by changing your [I/O scheduler][9]. Linux systems support several I/O schedulers and the current default for Fedora systems is the [multiqueue][10] variant of the [deadline][11] scheduler. The default performs very well overall and scales extremely well for large servers with many processors and large disk arrays. There are, however, a few more specialized schedulers that might perform better under certain conditions.
+
+To view which I/O scheduler your drives are using, issue the following command:
+
+```
+$ for i in /sys/block/sd?/queue/scheduler; do echo "$i: $(<$i)"; done
+```
+
+You can change the scheduler for a drive by writing the name of the desired scheduler to the /sys/block//queue/scheduler file:
+
+```
+# echo bfq > /sys/block/sda/queue/scheduler
+```
+
+You can make your changes permanent by creating a [udev rule][12] for your drive. The following example shows how to create a udev rule that will set all [rotational drives][13] to use the [BFQ][14] I/O scheduler:
+
+```
+# cat << END > /etc/udev/rules.d/60-ioscheduler-rotational.rules
+ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="bfq"
+END
+```
+
+Here is another example that sets all [solid-state drives][15] to use the [NOOP][16] I/O scheduler:
+
+```
+# cat << END > /etc/udev/rules.d/60-ioscheduler-solid-state.rules
+ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="none"
+END
+```
+
+Changing your I/O scheduler won’t affect the raw throughput of your devices, but it might make your PC seem more responsive by prioritizing the bandwidth for the foreground tasks over the background tasks or by eliminating unnecessary block reordering.
+
+* * *
+
+_Photo by _[ _James Donovan_][17]_ on _[_Unsplash_][18]_._
+
+--------------------------------------------------------------------------------
+
+via: https://fedoramagazine.org/check-storage-performance-with-dd/
+
+作者:[Gregory Bartholomew][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://fedoramagazine.org/author/glb/
+[b]: https://github.com/lujun9972
+[1]: https://fedoramagazine.org/wp-content/uploads/2019/04/dd-performance-816x345.jpg
+[2]: https://www.ibm.com/developerworks/community/blogs/ibmnas/entry/misalignment_can_be_twice_the_cost1?lang=en
+[3]: https://eklitzke.org/efficient-file-copying-on-linux
+[4]: https://en.wikipedia.org/wiki/Hdparm
+[5]: https://en.wikipedia.org/wiki/Random-access_memory
+[6]: https://blog.elcomsoft.com/2019/01/why-ssds-die-a-sudden-death-and-how-to-deal-with-it/
+[7]: https://www.computerworld.com/article/2484998/ssds-do-die--as-linus-torvalds-just-discovered.html
+[8]: https://en.wikipedia.org/wiki/S.M.A.R.T.
+[9]: https://en.wikipedia.org/wiki/I/O_scheduling
+[10]: https://lwn.net/Articles/552904/
+[11]: https://en.wikipedia.org/wiki/Deadline_scheduler
+[12]: http://www.reactivated.net/writing_udev_rules.html
+[13]: https://en.wikipedia.org/wiki/Hard_disk_drive_performance_characteristics
+[14]: http://algo.ing.unimo.it/people/paolo/disk_sched/
+[15]: https://en.wikipedia.org/wiki/Solid-state_drive
+[16]: https://en.wikipedia.org/wiki/Noop_scheduler
+[17]: https://unsplash.com/photos/0ZBRKEG_5no?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText
+[18]: https://unsplash.com/search/photos/speed?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText
diff --git a/sources/tech/20190510 Keeping an open source project alive when people leave.md b/sources/tech/20190510 Keeping an open source project alive when people leave.md
new file mode 100644
index 0000000000..31a0ab7412
--- /dev/null
+++ b/sources/tech/20190510 Keeping an open source project alive when people leave.md
@@ -0,0 +1,180 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Keeping an open source project alive when people leave)
+[#]: via: (https://opensource.com/article/19/5/code-missing-community-management)
+[#]: author: (Rodrigo Duarte Sousa https://opensource.com/users/rodrigods/users/tellesnobrega)
+
+Keeping an open source project alive when people leave
+======
+How to find out what's done, what's not, and what's missing.
+![][1]
+
+Suppose you wake up one day and decide to finally use that recipe video you keep watching all over social media. You get the ingredients, organize the necessary utensils, and start to follow the recipe steps. You cut this, cut that, then start heating the oven at the same time you put butter and onions in a pan. Then, your phone reminds you: you have a dinner appointment with your boss, and you're already late! You turn off everything and leave immediately, stopping the cooking process somewhere near the end.
+
+Some minutes later, your roommate arrives at home ready to have dinner and finds only the _ongoing work_ in the kitchen. They have the following options:
+
+ 1. Clean up the mess and start cooking something from scratch.
+ 2. Order dinner and don’t bother to cook and/or fix the mess you left.
+ 3. Start cooking “around” the mess you left, which will probably take more time since most of the utensils are dirty and there isn’t much space left in the kitchen.
+
+
+
+If you left the printed version of the recipe somewhere, your roommate also has a fourth option. They could finish what you started! The problem is that they have no idea what's missing. It is not like you crossed out each completed step. Their best bet is either to call you or to examine all of your _changes_ to infer what is missing.
+
+In this example, the kitchen is like a software project, the utensils are the code, and the recipe is a new feature being implemented. Leaving something behind is not usually doable in a company's private project since you're accountable for your work and—in a scenario where you need to leave—it's almost certain that there is someone tracking/following the project, so they avoid having a "single point of failure." With open source projects, though, this continuity rarely happens. So how can we in the open source community deal with legacy, unfinished code, or code that is completed but no one dares touch it?
+
+### Knowledge legacy in open source projects
+
+We have always felt that open source is one of the best ways for an inexperienced software engineer to improve her skills. For many, open source projects offer their first hands-on experience with particular tools. [Version control systems][2], [unit][3] and [integration][4] tests, [continuous delivery][5], [code reviews][6], [features planning][7], [bug reporting/fixing][8], and more.
+
+In addition to learning opportunities, we can also view open source projects as a career opportunity—many senior engineers in the community get paid to be there, and you can add your contributions to your resume. That’s pretty cool. There's nothing like learning while improving your resume and getting potential employers' attention so you can pay your rent.
+
+Is this whole situation an infinite loop where everyone wins? The answer is obviously no. This post focuses on one of the main issues that arise in any project: the [bus/truck factor][9]. In the open source context, specifically, when people experience major changes such as a new job or other more personal factors, they tend to leave the community. We will first describe the problems that can arise from people leaving their _recipes_ unfinished by using [OpenStack][10] as an example. Then, we'll try to discuss some ideas to try to mitigate the issues.
+
+### Common problems
+
+In the past few years, we've seen a lot of changes in the [OpenStack][11] community, where some projects lost some portion of their active contributors team. These losses led to incomplete work and even finished modules without clear maintainers. Below are other examples of what happens when people suddenly leave. While this article uses OpenStack terms, such as “specs,” these issues easily apply to software development in general:
+
+ * **Broken documentation:** A new API or setting either wasn't documented, or it was documented but not implemented.
+ * **Hard to resolve knowledge deficits:** For example, a new requirement and/or feature requires part of the code to be refactored but no one has the necessary expertise.
+ * **Incomplete features:** What are the missing tasks required for each feature? Which tasks were completed?
+ * **Debugging drama:** If the person who wrote the code isn't there, meaning that it takes a lot of engineering hours just to decrypt—so to speak—the code path that needs to be fixed.
+
+
+
+To illustrate, we will use the [Project Tree Deletion][12] feature. Project Tree Deletion is a tiny feature that one of us proposed more than three years ago and couldn’t complete. Basically, the main goal was to enable an OpenStack user/operator to erase a whole branch of projects without having to manually disable/delete every single of them starting from the leaves. Very straightforward, right? The PTD spec has been merged and has the following _work items_ :
+
+ * Update API spec documentation.
+ * Add new rules to the file **policy.json**.
+ * Add new endpoints to mirror the new features.
+ * Implement the new deletion/disabling behavior for the project’s hierarchy.
+
+
+
+What about the sequence of steps (roadmap) to get these work items done? How do we know where to start and when what to tackle next? Are there any logical dependencies between the work items? How do we know where to start, and with what?
+
+Also, how do we know which work has been completed (if any)? One of the things that we do is look in the [blueprint][13] and/or the new [bug tracker][14], for example:
+
+ * Recursive deletion and project disabling: (merged)
+ * API changes for Reseller: (merged)
+ * Add parent_id to GET /projects: (merged)
+ * Manager support for project cascade update: (merged)
+ * API support for cascade update: (abandoned)
+ * Manager support for project delete cascade: (merged)
+ * API support for project cascade delete: (abandoned)
+ * Add backend support for deleting a projects list: (merged)
+ * Test list project hierarchy is correct for a large tree: (merged)
+ * Fix cascade operations documentation: (merged)
+ * Revert “Fix cascade operations documentation”: (merged)
+ * Remove the APIs from the doc that aren't supported yet: (merged)
+
+
+
+Here we can see a lot of merged patches, but also that some were abandoned, and that some include the words Revert and Remove in their titles. Now we have strong evidence that this work is not completed, but at least some work was started to clean it up and avoid exposing something incomplete in the service API. Let’s dig a little bit deeper and look at the [_current_ delete project code][15].
+
+There, we can see an added **cascade** argument (“cascade” resembles deleting related things together, so this argument must be somehow related to the proposed feature), and that it has a special block to treat the cases for the possible values of **cascade** :
+
+
+```
+`def _delete_project(self, project, initiator=None, cascade=False):`[/code] [code]
+
+if cascade:
+# Getting reversed project's subtrees list, i.e. from the leaves
+# to the root, so we do not break parent_id FK.
+subtree_list = self.list_projects_in_subtree(project_id)
+subtree_list.reverse()
+if not self._check_whole_subtree_is_disabled(
+project_id, subtree_list=subtree_list):
+raise exception.ForbiddenNotSecurity(
+_('Cannot delete project %(project_id)s since its subtree '
+'contains enabled projects.')
+% {'project_id': project_id})
+
+project_list = subtree_list + [project]
+projects_ids = [x['id'] for x in project_list]
+
+ret = self.driver.delete_projects_from_ids(projects_ids)
+for prj in project_list:
+self._post_delete_cleanup_project(prj['id'], prj, initiator)
+else:
+ret = self.driver.delete_project(project_id)
+self._post_delete_cleanup_project(project_id, project, initiator)
+```
+
+What about the callers of this function? Do they use **cascade** at all? If we search for it, we only find occurrences in the backend tests:
+
+
+```
+$ git grep "delete_project" | grep "cascade" | grep -v "def"
+keystone/tests/unit/resource/test_backends.py: PROVIDERS.resource_api.delete_project(root_project['id'], cascade=True)
+keystone/tests/unit/resource/test_backends.py: PROVIDERS.resource_api.delete_project(p1['id'], cascade=True)
+```
+
+We can also confirm this finding by looking at the [delete projects API implementation][16].
+
+So it seems that we have a problem here, something simple that I started was left behind a very long time ago. How could the community or I have prevented this from happening?
+
+From the example above, one of the most apparent problems is the lack of a clear roadmap and list of completed tasks somewhere. To follow the actual implementation status, we had to dig into the blueprint/bug comments and the code.
+
+Based on this issue, we can sketch an idea: for each new feature, we need a roadmap stored somewhere to reflect the implementation status. Once the roadmap is defined within a spec, we can track each step as a [Launchpad][17] entry, for example, and have a better view of the progress status of that spec.
+
+Of course, these steps won’t prevent unfinished projects and they add a little bit of process, but following them can give a better view of what's missing so someone else from the community could finish or even revert what's there.
+
+### That’s not all
+
+What about other aspects of the project besides feature completion? We shouldn’t expect that every person on the core team is an expert in every single project module. This issue highlights another very important aspect of any open source community: mentoring.
+
+New people come to the community all the time and many have an incentive to continuing coming back as we discussed earlier. However, are our current community members willing to mentor them? How many times have you participated as a mentor in a program such as [Outreachy ][18]or [Google Summer of Code][19], or taken time to answer questions in the project’s chat?
+
+We also know that people eventually move on to other open source communities, so we have the chance of not leaving what we learned behind. We can always transmit that knowledge directly to those who are currently interested and actively asking questions, or indirectly, by writing documentation, blog posts, giving talks, and so forth.
+
+In order to have a healthy open source community, knowledge can’t be dominated by few people. We need to make an effort to have as many people capable of moving the project forward as possible. Also, a key aspect of mentoring is not only related to coding, but also to leadership skills. Preparing people to take roles like Project Team Lead, joining the Technical Committee, and so on is crucial if we intend to see the community grow even when we're not around anymore.
+
+Needless to say, mentoring is also an important skill for climbing the engineering ladder in most companies. Consider that another motivation.
+
+### To conclude
+
+Open source should not be treated as only the means to an end. Collaboration is a crucial part of these projects, and alongside mentoring, should always be treated as a first citizen in any open source community. And, of course, we will fix the unfinished spec used as this article's example.
+
+If you are part of an open source community, it is your responsibility to be focusing on sharing your knowledge while you are still around. Chances are that no one is going to tell you to do so, it should be part of the routine of any open source collaborator.
+
+What are other ways of sharing knowledge? What are your thoughts and ideas about the issue?
+
+_This original article was posted on[rodrigods][20]._
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/5/code-missing-community-management
+
+作者:[Rodrigo Duarte Sousa][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/rodrigods/users/tellesnobrega
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/BIZ_question_B.png?itok=f88cyt00
+[2]: https://en.wikipedia.org/wiki/Version_control
+[3]: https://en.wikipedia.org/wiki/Unit_testing
+[4]: https://en.wikipedia.org/wiki/Integration_testing
+[5]: https://en.wikipedia.org/wiki/Continuous_delivery
+[6]: https://en.wikipedia.org/wiki/Code_review
+[7]: https://www.agilealliance.org/glossary/sprint-planning/
+[8]: https://www.softwaretestinghelp.com/how-to-write-good-bug-report/
+[9]: https://en.wikipedia.org/wiki/Bus_factor
+[10]: https://www.openstack.org/
+[11]: /resources/what-is-openstack
+[12]: https://review.opendev.org/#/c/148730/35
+[13]: https://blueprints.launchpad.net/keystone/+spec/project-tree-deletion
+[14]: https://bugs.launchpad.net/keystone/+bug/1816105
+[15]: https://github.com/openstack/keystone/blob/master/keystone/resource/core.py#L475-L519
+[16]: https://github.com/openstack/keystone/blob/master/keystone/api/projects.py#L202-L214
+[17]: https://launchpad.net
+[18]: https://www.outreachy.org/
+[19]: https://summerofcode.withgoogle.com/
+[20]: https://blog.rodrigods.com/knowledge-legacy-the-issue-of-passing-the-baton/
diff --git a/sources/tech/20190510 Learn to change history with git rebase.md b/sources/tech/20190510 Learn to change history with git rebase.md
new file mode 100644
index 0000000000..cf8f9351d9
--- /dev/null
+++ b/sources/tech/20190510 Learn to change history with git rebase.md
@@ -0,0 +1,594 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Learn to change history with git rebase!)
+[#]: via: (https://git-rebase.io/)
+[#]: author: (git-rebase https://git-rebase.io/)
+
+Learn to change history with git rebase!
+======
+One of Git 's core value-adds is the ability to edit history. Unlike version control systems that treat the history as a sacred record, in git we can change history to suit our needs. This gives us a lot of powerful tools and allows us to curate a good commit history in the same way we use refactoring to uphold good software design practices. These tools can be a little bit intimidating to the novice or even intermediate git user, but this guide will help to demystify the powerful git-rebase .
+
+```
+A word of caution : changing the history of public, shared, or stable branches is generally advised against. Editing the history of feature branches and personal forks is fine, and editing commits that you haven't pushed yet is always okay. Use git push -f to force push your changes to a personal fork or feature branch after editing your commits.
+```
+
+Despite the scary warning, it's worth mentioning that everything mentioned in this guide is a non-destructive operation. It's actually pretty difficult to permanently lose data in git. Fixing things when you make mistakes is covered at the end of this guide.
+
+### Setting up a sandbox
+
+We don't want to mess up any of your actual repositories, so throughout this guide we'll be working with a sandbox repo. Run these commands to get started:
+
+```
+git init /tmp/rebase-sandbox
+cd /tmp/rebase-sandbox
+git commit --allow-empty -m"Initial commit"
+```
+
+If you run into trouble, just run rm -rf /tmp/rebase-sandbox and run these steps again to start over. Each step of this guide can be run on a fresh sandbox, so it's not necessary to re-do every task.
+
+
+### Amending your last commit
+
+Let's start with something simple: fixing your most recent commit. Let's add a file to our sandbox - and make a mistake:
+
+```
+echo "Hello wrold!" >greeting.txt
+ git add greeting.txt
+ git commit -m"Add greeting.txt"
+```
+
+Fixing this mistake is pretty easy. We can just edit the file and commit with `--amend`, like so:
+
+```
+echo "Hello world!" >greeting.txt
+ git commit -a --amend
+```
+
+Specifying `-a` automatically stages (i.e. `git add`'s) all files that git already knows about, and `--amend` will squash the changes into the most recent commit. Save and quit your editor (you have a chance to change the commit message now if you'd like). You can see the fixed commit by running `git show`:
+
+```
+commit f5f19fbf6d35b2db37dcac3a55289ff9602e4d00 (HEAD -> master)
+Author: Drew DeVault
+Date: Sun Apr 28 11:09:47 2019 -0400
+
+ Add greeting.txt
+
+diff --git a/greeting.txt b/greeting.txt
+new file mode 100644
+index 0000000..cd08755
+--- /dev/null
++++ b/greeting.txt
+@@ -0,0 +1 @@
++Hello world!
+```
+
+### Fixing up older commits
+
+Amending only works for the most recent commit. What happens if you need to correct an older commit? Let's start by setting up our sandbox accordingly:
+
+```
+echo "Hello!" >greeting.txt
+git add greeting.txt
+git commit -m"Add greeting.txt"
+
+echo "Goodbye world!" >farewell.txt
+git add farewell.txt
+git commit -m"Add farewell.txt"
+```
+
+Looks like `greeting.txt` is missing "world". Let's write a commit normally which fixes that:
+
+```
+echo "Hello world!" >greeting.txt
+git commit -a -m"fixup greeting.txt"
+```
+
+So now the files look correct, but our history could be better - let's use the new commit to "fixup" the last one. For this, we need to introduce a new tool: the interactive rebase. We're going to edit the last three commits this way, so we'll run `git rebase -i HEAD~3` (`-i` for interactive). This'll open your text editor with something like this:
+
+```
+pick 8d3fc77 Add greeting.txt
+pick 2a73a77 Add farewell.txt
+pick 0b9d0bb fixup greeting.txt
+
+# Rebase f5f19fb..0b9d0bb onto f5f19fb (3 commands)
+#
+# Commands:
+# p, pick = use commit
+# f, fixup = like "squash", but discard this commit's log message
+```
+
+This is the rebase plan, and by editing this file you can instruct git on how to edit history. I've trimmed the summary to just the details relevant to this part of the rebase guide, but feel free to skim the full summary in your text editor.
+
+When we save and close our editor, git is going to remove all of these commits from its history, then execute each line one at a time. By default, it's going to pick each commit, summoning it from the heap and adding it to the branch. If we don't edit this file at all, we'll end up right back where we started, picking every commit as-is. We're going to use one of my favorite features now: fixup. Edit the third line to change the operation from "pick" to "fixup" and move it to immediately after the commit we want to "fix up":
+
+```
+pick 8d3fc77 Add greeting.txt
+fixup 0b9d0bb fixup greeting.txt
+pick 2a73a77 Add farewell.txt
+```
+
+**Tip** : We can also abbreviate this with just "f" to speed things up next time.
+
+Save and quit your editor - git will run these commands. We can check the log to verify the result:
+
+```
+$ git log -2 --oneline
+fcff6ae (HEAD -> master) Add farewell.txt
+a479e94 Add greeting.txt
+```
+
+### Squashing several commits into one
+
+As you work, you may find it useful to write lots of commits as you reach small milestones or fix bugs in previous commits. However, it may be useful to "squash" these commits together, to make a cleaner history before merging your work into master. For this, we'll use the "squash" operation. Let's start by writing a bunch of commits - just copy and paste this if you want to speed it up:
+
+```
+git checkout -b squash
+for c in H e l l o , ' ' w o r l d; do
+ echo "$c" >>squash.txt
+ git add squash.txt
+ git commit -m"Add '$c' to squash.txt"
+done
+```
+
+That's a lot of commits to make a file that says "Hello, world"! Let's start another interactive rebase to squash them together. Note that we checked out a branch to try this on, first. Because of that, we can quickly rebase all of the commits since we branched by using `git rebase -i master`. The result:
+
+```
+pick 1e85199 Add 'H' to squash.txt
+pick fff6631 Add 'e' to squash.txt
+pick b354c74 Add 'l' to squash.txt
+pick 04aaf74 Add 'l' to squash.txt
+pick 9b0f720 Add 'o' to squash.txt
+pick 66b114d Add ',' to squash.txt
+pick dc158cd Add ' ' to squash.txt
+pick dfcf9d6 Add 'w' to squash.txt
+pick 7a85f34 Add 'o' to squash.txt
+pick c275c27 Add 'r' to squash.txt
+pick a513fd1 Add 'l' to squash.txt
+pick 6b608ae Add 'd' to squash.txt
+
+# Rebase 1af1b46..6b608ae onto 1af1b46 (12 commands)
+#
+# Commands:
+# p, pick = use commit
+# s, squash = use commit, but meld into previous commit
+```
+
+**Tip** : your local master branch evolves independently of the remote master branch, and git stores the remote branch as `origin/master`. Combined with this trick, `git rebase -i origin/master` is often a very convenient way to rebase all of the commits which haven't been merged upstream yet!
+
+We're going to squash all of these changes into the first commit. To do this, change every "pick" operation to "squash", except for the first line, like so:
+
+```
+pick 1e85199 Add 'H' to squash.txt
+squash fff6631 Add 'e' to squash.txt
+squash b354c74 Add 'l' to squash.txt
+squash 04aaf74 Add 'l' to squash.txt
+squash 9b0f720 Add 'o' to squash.txt
+squash 66b114d Add ',' to squash.txt
+squash dc158cd Add ' ' to squash.txt
+squash dfcf9d6 Add 'w' to squash.txt
+squash 7a85f34 Add 'o' to squash.txt
+squash c275c27 Add 'r' to squash.txt
+squash a513fd1 Add 'l' to squash.txt
+squash 6b608ae Add 'd' to squash.txt
+```
+
+When you save and close your editor, git will think about this for a moment, then open your editor again to revise the final commit message. You'll see something like this:
+
+```
+# This is a combination of 12 commits.
+# This is the 1st commit message:
+
+Add 'H' to squash.txt
+
+# This is the commit message #2:
+
+Add 'e' to squash.txt
+
+# This is the commit message #3:
+
+Add 'l' to squash.txt
+
+# This is the commit message #4:
+
+Add 'l' to squash.txt
+
+# This is the commit message #5:
+
+Add 'o' to squash.txt
+
+# This is the commit message #6:
+
+Add ',' to squash.txt
+
+# This is the commit message #7:
+
+Add ' ' to squash.txt
+
+# This is the commit message #8:
+
+Add 'w' to squash.txt
+
+# This is the commit message #9:
+
+Add 'o' to squash.txt
+
+# This is the commit message #10:
+
+Add 'r' to squash.txt
+
+# This is the commit message #11:
+
+Add 'l' to squash.txt
+
+# This is the commit message #12:
+
+Add 'd' to squash.txt
+
+# Please enter the commit message for your changes. Lines starting
+# with '#' will be ignored, and an empty message aborts the commit.
+#
+# Date: Sun Apr 28 14:21:56 2019 -0400
+#
+# interactive rebase in progress; onto 1af1b46
+# Last commands done (12 commands done):
+# squash a513fd1 Add 'l' to squash.txt
+# squash 6b608ae Add 'd' to squash.txt
+# No commands remaining.
+# You are currently rebasing branch 'squash' on '1af1b46'.
+#
+# Changes to be committed:
+# new file: squash.txt
+#
+```
+
+This defaults to a combination of all of the commit messages which were squashed, but leaving it like this is almost always not what you want. The old commit messages may be useful for reference when writing the new one, though.
+
+**Tip** : the "fixup" command you learned about in the previous section can be used for this purpose, too - but it discards the messages of the squashed commits.
+
+Let's delete everything and replace it with a better commit message, like this:
+
+```
+Add squash.txt with contents "Hello, world"
+
+# Please enter the commit message for your changes. Lines starting
+# with '#' will be ignored, and an empty message aborts the commit.
+#
+# Date: Sun Apr 28 14:21:56 2019 -0400
+#
+# interactive rebase in progress; onto 1af1b46
+# Last commands done (12 commands done):
+# squash a513fd1 Add 'l' to squash.txt
+# squash 6b608ae Add 'd' to squash.txt
+# No commands remaining.
+# You are currently rebasing branch 'squash' on '1af1b46'.
+#
+# Changes to be committed:
+# new file: squash.txt
+#
+```
+
+Save and quit your editor, then examine your git log - success!
+
+```
+commit c785f476c7dff76f21ce2cad7c51cf2af00a44b6 (HEAD -> squash)
+Author: Drew DeVault
+Date: Sun Apr 28 14:21:56 2019 -0400
+
+ Add squash.txt with contents "Hello, world"
+```
+
+Before we move on, let's pull our changes into the master branch and get rid of this scratch one. We can use `git rebase` like we use `git merge`, but it avoids making a merge commit:
+
+```
+git checkout master
+git rebase squash
+git branch -D squash
+```
+
+We generally prefer to avoid using git merge unless we're actually merging unrelated histories. If you have two divergent branches, a git merge is useful to have a record of when they were... merged. In the course of your normal work, rebase is often more appropriate.
+
+### Splitting one commit into several
+
+Sometimes the opposite problem happens - one commit is just too big. Let's look into splitting it up. This time, let's write some actual code. Start with a simple C program2 (you can still copy+paste this snippet into your shell to do this quickly):
+
+```
+cat <main.c
+int main(int argc, char *argv[]) {
+ return 0;
+}
+EOF
+```
+
+We'll commit this first.
+
+```
+git add main.c
+git commit -m"Add C program skeleton"
+```
+
+Next, let's extend the program a bit:
+
+```
+cat <main.c
+#include <stdio.h>
+
+const char *get_name() {
+ static char buf[128];
+ scanf("%s", buf);
+ return buf;
+}
+
+int main(int argc, char *argv[]) {
+ printf("What's your name? ");
+ const char *name = get_name();
+ printf("Hello, %s!\n", name);
+ return 0;
+}
+EOF
+```
+
+After we commit this, we'll be ready to learn how to split it up.
+
+```
+git commit -a -m"Flesh out C program"
+```
+
+The first step is to start an interactive rebase. Let's rebase both commits with `git rebase -i HEAD~2`, giving us this rebase plan:
+
+```
+pick 237b246 Add C program skeleton
+pick b3f188b Flesh out C program
+
+# Rebase c785f47..b3f188b onto c785f47 (2 commands)
+#
+# Commands:
+# p, pick = use commit
+# e, edit = use commit, but stop for amending
+```
+
+Change the second commit's command from "pick" to "edit", then save and close your editor. Git will think about this for a second, then present you with this:
+
+```
+Stopped at b3f188b... Flesh out C program
+You can amend the commit now, with
+
+ git commit --amend
+
+Once you are satisfied with your changes, run
+
+ git rebase --continue
+```
+
+We could follow these instructions to add new changes to the commit, but instead let's do a "soft reset"3 by running `git reset HEAD^`. If you run `git status` after this, you'll see that it un-commits the latest commit and adds its changes to the working tree:
+
+```
+Last commands done (2 commands done):
+ pick 237b246 Add C program skeleton
+ edit b3f188b Flesh out C program
+No commands remaining.
+You are currently splitting a commit while rebasing branch 'master' on 'c785f47'.
+ (Once your working directory is clean, run "git rebase --continue")
+
+Changes not staged for commit:
+ (use "git add ..." to update what will be committed)
+ (use "git checkout -- ..." to discard changes in working directory)
+
+ modified: main.c
+
+no changes added to commit (use "git add" and/or "git commit -a")
+```
+
+To split this up, we're going to do an interactive commit. This allows us to selectively commit only specific changes from the working tree. Run `git commit -p` to start this process, and you'll be presented with the following prompt:
+
+```
+diff --git a/main.c b/main.c
+index b1d9c2c..3463610 100644
+--- a/main.c
++++ b/main.c
+@@ -1,3 +1,14 @@
++#include <stdio.h>
++
++const char *get_name() {
++ static char buf[128];
++ scanf("%s", buf);
++ return buf;
++}
++
+ int main(int argc, char *argv[]) {
++ printf("What's your name? ");
++ const char *name = get_name();
++ printf("Hello, %s!\n", name);
+ return 0;
+ }
+Stage this hunk [y,n,q,a,d,s,e,?]?
+```
+
+Git has presented you with just one "hunk" (i.e. a single change) to consider committing. This one is too big, though - let's use the "s" command to "split" up the hunk into smaller parts.
+
+```
+Split into 2 hunks.
+@@ -1 +1,9 @@
++#include
++
++const char *get_name() {
++ static char buf[128];
++ scanf("%s", buf);
++ return buf;
++}
++
+ int main(int argc, char *argv[]) {
+Stage this hunk [y,n,q,a,d,j,J,g,/,e,?]?
+```
+
+**Tip** : If you're curious about the other options, press "?" to summarize them.
+
+This hunk looks better - a single, self-contained change. Let's hit "y" to answer the question (and stage that "hunk"), then "q" to "quit" the interactive session and proceed with the commit. Your editor will pop up to ask you to enter a suitable commit message.
+
+```
+Add get_name function to C program
+
+# Please enter the commit message for your changes. Lines starting
+# with '#' will be ignored, and an empty message aborts the commit.
+#
+# interactive rebase in progress; onto c785f47
+# Last commands done (2 commands done):
+# pick 237b246 Add C program skeleton
+# edit b3f188b Flesh out C program
+# No commands remaining.
+# You are currently splitting a commit while rebasing branch 'master' on 'c785f47'.
+#
+# Changes to be committed:
+# modified: main.c
+#
+# Changes not staged for commit:
+# modified: main.c
+#
+```
+
+Save and close your editor, then we'll make the second commit. We could do another interactive commit, but since we just want to include the rest of the changes in this commit we'll just do this:
+
+```
+git commit -a -m"Prompt user for their name"
+git rebase --continue
+```
+
+That last command tells git that we're done editing this commit, and to continue to the next rebase command. That's it! Run `git log` to see the fruits of your labor:
+
+```
+$ git log -3 --oneline
+fe19cc3 (HEAD -> master) Prompt user for their name
+659a489 Add get_name function to C program
+237b246 Add C program skeleton
+```
+
+### Reordering commits
+
+This one is pretty easy. Let's start by setting up our sandbox:
+
+```
+echo "Goodbye now!" >farewell.txt
+git add farewell.txt
+git commit -m"Add farewell.txt"
+
+echo "Hello there!" >greeting.txt
+git add greeting.txt
+git commit -m"Add greeting.txt"
+
+echo "How're you doing?" >inquiry.txt
+git add inquiry.txt
+git commit -m"Add inquiry.txt"
+```
+
+The git log should now look like this:
+
+```
+f03baa5 (HEAD -> master) Add inquiry.txt
+a4cebf7 Add greeting.txt
+90bb015 Add farewell.txt
+```
+
+Clearly, this is all out of order. Let's do an interactive rebase of the past 3 commits to resolve this. Run `git rebase -i HEAD~3` and this rebase plan will appear:
+
+```
+pick 90bb015 Add farewell.txt
+pick a4cebf7 Add greeting.txt
+pick f03baa5 Add inquiry.txt
+
+# Rebase fe19cc3..f03baa5 onto fe19cc3 (3 commands)
+#
+# Commands:
+# p, pick = use commit
+#
+# These lines can be re-ordered; they are executed from top to bottom.
+```
+
+The fix is now straightforward: just reorder these lines in the order you wish for the commits to appear. Should look something like this:
+
+```
+pick a4cebf7 Add greeting.txt
+pick f03baa5 Add inquiry.txt
+pick 90bb015 Add farewell.txt
+```
+
+Save and close your editor and git will do the rest for you. Note that it's possible to end up with conflicts when you do this in practice - click here for help resolving conflicts.
+
+### git pull --rebase
+
+If you've been writing some commits on a branch which has been updated upstream, normally `git pull` will create a merge commit. In this respect, `git pull`'s behavior by default is equivalent to:
+
+```
+git fetch origin
+git merge origin/master
+```
+
+There's another option, which is often more useful and leads to a much cleaner history: `git pull --rebase`. Unlike the merge approach, this is equivalent to the following:
+
+```
+git fetch origin
+git rebase origin/master
+```
+
+The merge approach is simpler and easier to understand, but the rebase approach is almost always what you want to do if you understand how to use git rebase. If you like, you can set it as the default behavior like so:
+
+```
+git config --global pull.rebase true
+```
+
+When you do this, technically you're applying the procedure we discuss in the next section... so let's explain what it means to do that deliberately, too.
+
+### Using git rebase to... rebase
+
+Ironically, the feature of git rebase that I use the least is the one it's named for: rebasing branches. Say you have the following branches:
+
+```
+o--o--o--o--> master
+ \--o--o--> feature-1
+ \--o--> feature-2
+```
+
+It turns out feature-2 doesn't depend on any of the changes in feature-1, so you can just base it off of master. The fix is thus:
+
+```
+git checkout feature-2
+git rebase master
+```
+
+The non-interactive rebase does the default operation for all implicated commits ("pick")4, which simply rolls your history back to the last common anscestor and replays the commits from both branches. Your history now looks like this:
+
+```
+o--o--o--o--> master
+ | \--o--> feature-2
+ \--o--o--> feature-1
+```
+
+### Resolving conflicts
+
+The details on resolving merge conflicts are beyond the scope of this guide - keep your eye out for another guide for this in the future. Assuming you're familiar with resolving conflicts in general, here are the specifics that apply to rebasing.
+
+The details on resolving merge conflicts are beyond the scope of this guide - keep your eye out for another guide for this in the future. Assuming you're familiar with resolving conflicts in general, here are the specifics that apply to rebasing.
+
+Sometimes you'll get a merge conflict when doing a rebase, which you can handle just like any other merge conflict. Git will set up the conflict markers in the affected files, `git status` will show you what you need to resolve, and you can mark files as resolved with `git add` or `git rm`. However, in the context of a git rebase, there are two options you should be aware of.
+
+The first is how you complete the conflict resolution. Rather than `git commit` like you'll use when addressing conflicts that arise from `git merge`, the appropriate command for rebasing is `git rebase --continue`. However, there's another option available to you: `git rebase --skip`. This will skip the commit you're working on, and it won't be included in the rebase. This is most common when doing a non-interactive rebase, when git doesn't realize that a commit it's pulled from the "other" branch is an updated version of the commit that it conflicts with on "our" branch.
+
+### Help! I broke it!
+
+No doubt about it - rebasing can be hard sometimes. If you've made a mistake and in so doing lost commits which you needed, then `git reflog` is here to save the day. Running this command will show you every operation which changed a ref, or reference - that is, branches and tags. Each line shows you what the old reference pointed to, and you can `git cherry-pick`, `git checkout`, `git show`, or use any other operation on git commits once thought lost.
+
+
+--------------------------------------------------------------------------------
+
+via: https://git-rebase.io/
+
+作者:[git-rebase][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://git-rebase.io/
+[b]: https://github.com/lujun9972
diff --git a/sources/tech/20190513 Blockchain 2.0 - Introduction To Hyperledger Fabric -Part 10.md b/sources/tech/20190513 Blockchain 2.0 - Introduction To Hyperledger Fabric -Part 10.md
new file mode 100644
index 0000000000..c685af487c
--- /dev/null
+++ b/sources/tech/20190513 Blockchain 2.0 - Introduction To Hyperledger Fabric -Part 10.md
@@ -0,0 +1,81 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Blockchain 2.0 – Introduction To Hyperledger Fabric [Part 10])
+[#]: via: (https://www.ostechnix.com/blockchain-2-0-introduction-to-hyperledger-fabric/)
+[#]: author: (sk https://www.ostechnix.com/author/sk/)
+
+Blockchain 2.0 – Introduction To Hyperledger Fabric [Part 10]
+======
+
+![Hyperledger Fabric][1]
+
+### Hyperledger Fabric
+
+The [**Hyperledger project**][2] is an umbrella organization of sorts featuring many different modules and systems under development. Among the most popular among these individual sub-projects is the **Hyperledger Fabric**. This post will explore the features that would make the Fabric almost indispensable in the near future once blockchain systems start proliferating into main stream use. Towards the end we will also take a quick look at what developers and enthusiasts need to know regarding the technicalities of the Hyperledger Fabric.
+
+### Inception
+
+In the usual fashion for the Hyperledger project, Fabric was “donated” to the organization by one of its core members, **IBM** , who was previously the principle developer of the same. The technology platform shared by IBM was put to joint development at the Hyperledger project with contributions from over a 100 member companies and institutions.
+
+Currently running on **v1.4** of the LTS version, Fabric has come a long way and is currently seen as the go to enterprise solution for managing business data. The core vision that surrounds the Hyperledger project inevitably permeates into the Fabric as well. The Hyperledger Fabric system carries forward all the enterprise ready and scalable features that are hard coded into all projects under the Hyperledger organization.
+
+### Highlights Of Hyperledger Fabric
+
+Hyperledger Fabric offers a wide variety of features and standards that are built around the mission of supporting fast development and modular architectures. Furthermore, compared to its competitors (primarily **Ripple** and [**Ethereum**][3]), Fabric takes an explicit stance toward closed and [**permissioned blockchains**][4]. Their core objective here is to develop a set of tools which will aid blockchain developers in creating customized solutions and not to create a standalone ecosystem or a product.
+
+Some of the highlights of the Hyperledger Fabric are given below:
+
+ * **Permissioned blockchain systems**
+
+
+
+This is a category where other platforms such as Ethereum and Ripple differ quite a lot with Hyperledger Fabric. The Fabric by default is a tool designed to implement a private permissioned blockchain. Such blockchains cannot be accessed by everyone and the nodes working to offer consensus or to verify transactions are chosen by a central authority. This might be important for some applications such as banking and insurance, where transactions have to be verified by the central authority rather than participants.
+
+ * **Confidential and controlled information flow**
+
+
+
+The Fabric has built in permission systems that will restrict information flow within a specific group or certain individuals as the case may be. Unlike a public blockchain where anyone and everyone who runs a node will have a copy and selective access to data stored in the blockchain, the admin of the system can choose how to and who to share access to the information. There are also subsystems which will encrypt the stored data at better security standards compared to existing competition.
+
+ * **Plug and play architecture**
+
+
+
+Hyperledger Fabric has a plug and play type architecture. Individual components of the system may be chosen to be implemented and components of the system that developers don’t see a use for maybe discarded. The Fabric takes a highly modular and customizable route to development rather than a one size fits all approach taken by its competitors. This is especially attractive for firms and companies looking to build a lean system fast. This combined with the interoperability of the Fabric with other Hyperledger components implies that developers and designers now have access to a diverse set of standardized tools instead of having to pull code from different sources and integrate them afterwards. It also presents a rather fail-safe way to build robust modular systems.
+
+ * **Smart contracts and chaincode**
+
+
+
+A distributed application running on a blockchain is called a [**Smart contract**][5]. While the smart contract term is more or less associated with the Ethereum platform, chaincode is the name given to the same in the Hyperledger camp. Apart from possessing all the benefits of **DApps** being present in chaincode applications, what sets Hyperledger apart is the fact that the code for the same may be written in multiple high-level programming language. It supports [**Go**][6] and **JavaScript** out of the box and supports many other after integration with appropriate compiler modules as well. Though this fact might not mean much at this point, the fact remains that if existing talent can be used for ongoing projects involving blockchain that has the potential to save companies billions of dollars in personnel training and management in the long run. Developers can code in languages they’re comfortable in to start building applications on the Hyperledger Fabric and need not learn nor train in platform specific languages and syntax. This presents flexibility which current competitors of the Hyperledger Fabric do not offer.
+
+ * The Hyperledger Fabric is a back-end driver platform and is mainly aimed at integration projects where a blockchain or another distributed ledger technology is required. As such it does not provide any user facing services except for minor scripting capabilities. (Think of it to be more like a scripting language.)
+ * Hyperledger Fabric supports building sidechains for specific use-cases. In case, the developer wishes to isolate a set of users or participants to a specific part or functionality of the application, they may do so by implementing side-chains. Side-chains are blockchains that derive from a main parent, but form a different chain after their initial block. This block which gives rise to the new chain will stay immune to further changes in the new chain and the new chain remains immutable even if new information is added to the original chain. This functionality will aid in scaling the platform being developed and usher in user specific and case specific processing capabilities.
+ * The previous feature also means that not all users will have an “exact” copy of all the data in the blockchain as is expected usually from public chains. Participating nodes will have a copy of data that is only relevant to them. For instance, consider an application similar to PayTM in India. The app has wallet functionality as well as an e-commerce end. However, not all its wallet users use PayTM to shop online. In this scenario, only active shoppers will have the corresponding chain of transactions on the PayTM e-commerce site, whereas the wallet users will just have a copy of the chain that stores wallet transactions. This flexible architecture for data storage and retrieval is important while scaling, since massive singular blockchains have been shown to increase lead times for processing transactions. The chain can be kept lean and well categorised this way.
+
+
+
+We will look at other modules under the Hyperledger Project in detail in upcoming posts.
+
+--------------------------------------------------------------------------------
+
+via: https://www.ostechnix.com/blockchain-2-0-introduction-to-hyperledger-fabric/
+
+作者:[sk][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.ostechnix.com/author/sk/
+[b]: https://github.com/lujun9972
+[1]: data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7
+[2]: https://www.ostechnix.com/blockchain-2-0-an-introduction-to-hyperledger-project-hlp/
+[3]: https://www.ostechnix.com/blockchain-2-0-what-is-ethereum/
+[4]: https://www.ostechnix.com/blockchain-2-0-public-vs-private-blockchain-comparison/
+[5]: https://www.ostechnix.com/blockchain-2-0-explaining-smart-contracts-and-its-types/
+[6]: https://www.ostechnix.com/install-go-language-linux/
diff --git a/sources/tech/20190513 How To Check Whether The Given Package Is Installed Or Not On Debian-Ubuntu System.md b/sources/tech/20190513 How To Check Whether The Given Package Is Installed Or Not On Debian-Ubuntu System.md
new file mode 100644
index 0000000000..dfc3e62dce
--- /dev/null
+++ b/sources/tech/20190513 How To Check Whether The Given Package Is Installed Or Not On Debian-Ubuntu System.md
@@ -0,0 +1,141 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (How To Check Whether The Given Package Is Installed Or Not On Debian/Ubuntu System?)
+[#]: via: (https://www.2daygeek.com/how-to-check-whether-the-given-package-is-installed-or-not-on-ubuntu-debian-system/)
+[#]: author: (Magesh Maruthamuthu https://www.2daygeek.com/author/magesh/)
+
+How To Check Whether The Given Package Is Installed Or Not On Debian/Ubuntu System?
+======
+
+We have recently published an article about bulk package installation.
+
+While doing that, i was struggled to get the installed package information and did a small google search and found few methods about it.
+
+I would like to share it in our website so, that it will be helpful for others too.
+
+There are numerous ways we can achieve this.
+
+I have add seven ways to achieve this. However, you can choose the preferred method for you.
+
+Those methods are listed below.
+
+ * **`apt-cache Command:`** apt-cache command is used to query the APT cache or package metadata.
+ * **`apt Command:`** APT is a powerful command-line tool for installing, downloading, removing, searching and managing packages on Debian based systems.
+ * **`dpkg-query Command:`** dpkg-query is a tool to query the dpkg database.
+ * **`dpkg Command:`** dpkg is a package manager for Debian based systems.
+ * **`which Command:`** The which command returns the full path of the executable that would have been executed when the command had been entered in terminal.
+ * **`whereis Command:`** The whereis command used to search the binary, source, and man page files for a given command.
+ * **`locate Command:`** locate command works faster than the find command because it uses updatedb database, whereas the find command searches in the real system.
+
+
+
+### Method-1 : How To Check Whether The Given Package Is Installed Or Not On Ubuntu System Using apt-cache Command?
+
+apt-cache command is used to query the APT cache or package metadata from APT’s internal database.
+
+It will search and display an information about the given package. It shows whether the package is installed or not, installed package version, source repository information.
+
+The below output clearly showing that `nano` package has already installed in the system. Since installed part is showing the installed version of nano package.
+
+```
+# apt-cache policy nano
+nano:
+ Installed: 2.9.3-2
+ Candidate: 2.9.3-2
+ Version table:
+ *** 2.9.3-2 500
+ 500 http://in.archive.ubuntu.com/ubuntu bionic/main amd64 Packages
+ 100 /var/lib/dpkg/status
+```
+
+### Method-2 : How To Check Whether The Given Package Is Installed Or Not On Ubuntu System Using apt Command?
+
+APT is a powerful command-line tool for installing, downloading, removing, searching and managing as well as querying information about packages as a low-level access to all features of the libapt-pkg library. It’s contains some less used command-line utilities related to package management.
+
+```
+# apt -qq list nano
+nano/bionic,now 2.9.3-2 amd64 [installed]
+```
+
+### Method-3 : How To Check Whether The Given Package Is Installed Or Not On Ubuntu System Using dpkg-query Command?
+
+dpkg-query is a tool to show information about packages listed in the dpkg database.
+
+In the below output first column showing `ii`. It means, the given package has already installed in the system.
+
+```
+# dpkg-query --list | grep -i nano
+ii nano 2.9.3-2 amd64 small, friendly text editor inspired by Pico
+```
+
+### Method-4 : How To Check Whether The Given Package Is Installed Or Not On Ubuntu System Using dpkg Command?
+
+DPKG stands for Debian Package is a tool to install, build, remove and manage Debian packages, but unlike other package management systems, it cannot automatically download and install packages or their dependencies.
+
+In the below output first column showing `ii`. It means, the given package has already installed in the system.
+
+```
+# dpkg -l | grep -i nano
+ii nano 2.9.3-2 amd64 small, friendly text editor inspired by Pico
+```
+
+### Method-5 : How To Check Whether The Given Package Is Installed Or Not On Ubuntu System Using which Command?
+
+The which command returns the full path of the executable that would have been executed when the command had been entered in terminal.
+
+It’s very useful when you want to create a desktop shortcut or symbolic link for executable files.
+
+Which command searches the directories listed in the current user’s PATH environment variable not for all the users. I mean, when you are logged in your own account and you can’t able to search for root user file or directory.
+
+If the following output shows the given package binary or executable file location then the given package has already installed in the system. If not, the package is not installed in system.
+
+```
+# which nano
+/bin/nano
+```
+
+### Method-6 : How To Check Whether The Given Package Is Installed Or Not On Ubuntu System Using whereis Command?
+
+The whereis command used to search the binary, source, and man page files for a given command.
+
+If the following output shows the given package binary or executable file location then the given package has already installed in the system. If not, the package is not installed in system.
+
+```
+# whereis nano
+nano: /bin/nano /usr/share/nano /usr/share/man/man1/nano.1.gz /usr/share/info/nano.info.gz
+```
+
+### Method-7 : How To Check Whether The Given Package Is Installed Or Not On Ubuntu System Using locate Command?
+
+locate command works faster than the find command because it uses updatedb database, whereas the find command searches in the real system.
+
+It uses a database rather than hunting individual directory paths to get a given file.
+
+locate command doesn’t pre-installed in most of the distributions so, use your distribution package manager to install it.
+
+The database is updated regularly through cron. Even, we can update it manually.
+
+If the following output shows the given package binary or executable file location then the given package has already installed in the system. If not, the package is not installed in system.
+
+```
+# locate --basename '\nano'
+/usr/bin/nano
+/usr/share/nano
+/usr/share/doc/nano
+```
+--------------------------------------------------------------------------------
+
+via: https://www.2daygeek.com/how-to-check-whether-the-given-package-is-installed-or-not-on-ubuntu-debian-system/
+
+作者:[Magesh Maruthamuthu][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.2daygeek.com/author/magesh/
+[b]: https://github.com/lujun9972
diff --git a/sources/tech/20190513 How To Set Password Complexity On Linux.md b/sources/tech/20190513 How To Set Password Complexity On Linux.md
new file mode 100644
index 0000000000..e9a3171c6b
--- /dev/null
+++ b/sources/tech/20190513 How To Set Password Complexity On Linux.md
@@ -0,0 +1,243 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (How To Set Password Complexity On Linux?)
+[#]: via: (https://www.2daygeek.com/how-to-set-password-complexity-policy-on-linux/)
+[#]: author: (Magesh Maruthamuthu https://www.2daygeek.com/author/magesh/)
+
+How To Set Password Complexity On Linux?
+======
+
+User management is one of the important task of Linux system administration.
+
+There are many aspect is involved in this and implementing the strong password policy is one of them.
+
+Navigate to the following URL, if you would like to **[generate a strong password on Linux][1]**.
+
+It will Restrict unauthorized access to systems.
+
+By default Linux is secure that everybody know. however, we need to make necessary tweak on this to make it more secure.
+
+Insecure password will leads to breach security. So, take additional care on this.
+
+Navigate to the following URL, if you would like to see the **[password strength and score][2]** of the generated strong password.
+
+In this article, we will teach you, how to implement the best security policy on Linux.
+
+We can use PAM (the “pluggable authentication module”) to enforce password policy On most Linux systems.
+
+The file can be found in the following location.
+
+For Redhat based systems @ `/etc/pam.d/system-auth` and Debian based systems @ `/etc/pam.d/common-password`.
+
+The default password aging details can be found in the `/etc/login.defs` file.
+
+I have trimmed this file for better understanding.
+
+```
+# vi /etc/login.defs
+
+PASS_MAX_DAYS 99999
+PASS_MIN_DAYS 0
+PASS_MIN_LEN 5
+PASS_WARN_AGE 7
+```
+
+**Details:**
+
+ * **`PASS_MAX_DAYS:`**` ` Maximum number of days a password may be used.
+ * **`PASS_MIN_DAYS:`**` ` Minimum number of days allowed between password changes.
+ * **`PASS_MIN_LEN:`**` ` Minimum acceptable password length.
+ * **`PASS_WARN_AGE:`**` ` Number of days warning given before a password expires.
+
+
+
+We will show you, how to implement the below eleven password policies in Linux.
+
+ * Password Max days
+ * Password Min days
+ * Password warning days
+ * Password history or Deny Re-Used Passwords
+ * Password minimum length
+ * Minimum upper case characters
+ * Minimum lower case characters
+ * Minimum digits in password
+ * Minimum other characters (Symbols)
+ * Account lock – retries
+ * Account unlock time
+
+
+
+### What Is Password Max days?
+
+This parameter limits the maximum number of days a password can be used. It’s mandatory for user to change his/her account password before expiry.
+
+If they forget to change, they are not allowed to login into the system. They need to work with admin team to get rid of it.
+
+It can be set in `/etc/login.defs` file. I’m going to set `90 days`.
+
+```
+# vi /etc/login.defs
+
+PASS_MAX_DAYS 90
+```
+
+### What Is Password Min days?
+
+This parameter limits the minimum number of days after password can be changed.
+
+Say for example, if this parameter is set to 15 and user changed password today. Then he won’t be able to change the password again before 15 days from now.
+
+It can be set in `/etc/login.defs` file. I’m going to set `15 days`.
+
+```
+# vi /etc/login.defs
+
+PASS_MIN_DAYS 15
+```
+
+### What Is Password Warning Days?
+
+This parameter controls the password warning days and it will warn the user when the password is going to expires.
+
+A warning will be given to the user regularly until the warning days ends. This can helps user to change their password before expiry. Otherwise we need to work with admin team for unlock the password.
+
+It can be set in `/etc/login.defs` file. I’m going to set `10 days`.
+
+```
+# vi /etc/login.defs
+
+PASS_WARN_AGE 10
+```
+
+**Note:** All the above parameters only applicable for new accounts and not for existing accounts.
+
+### What Is Password History Or Deny Re-Used Passwords?
+
+This parameter keep controls of the password history. Keep history of passwords used (the number of previous passwords which cannot be reused).
+
+When the users try to set a new password, it will check the password history and warn the user when they set the same old password.
+
+It can be set in `/etc/pam.d/system-auth` file. I’m going to set `5` for history of password.
+
+```
+# vi /etc/pam.d/system-auth
+
+password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok remember=5
+```
+
+### What Is Password Minimum Length?
+
+This parameter keeps the minimum password length. When the users set a new password, it will check against this parameter and warn the user if they try to set the password length less than that.
+
+It can be set in `/etc/pam.d/system-auth` file. I’m going to set `12` character for minimum password length.
+
+```
+# vi /etc/pam.d/system-auth
+
+password requisite pam_cracklib.so try_first_pass retry=3 minlen=12
+```
+
+**try_first_pass retry=3** : Allow users to set a good password before the passwd command aborts.
+
+### Set Minimum Upper Case Characters?
+
+This parameter keeps, how many upper case characters should be added in the password. These are password strengthening parameters ,which increase the password strength.
+
+When the users set a new password, it will check against this parameter and warn the user if they are not including any upper case characters in the password.
+
+It can be set in `/etc/pam.d/system-auth` file. I’m going to set `1` character for minimum password length.
+
+```
+# vi /etc/pam.d/system-auth
+
+password requisite pam_cracklib.so try_first_pass retry=3 minlen=12 ucredit=-1
+```
+
+### Set Minimum Lower Case Characters?
+
+This parameter keeps, how many lower case characters should be added in the password. These are password strengthening parameters ,which increase the password strength.
+
+When the users set a new password, it will check against this parameter and warn the user if they are not including any lower case characters in the password.
+
+It can be set in `/etc/pam.d/system-auth` file. I’m going to set `1` character.
+
+```
+# vi /etc/pam.d/system-auth
+
+password requisite pam_cracklib.so try_first_pass retry=3 minlen=12 lcredit=-1
+```
+
+### Set Minimum Digits In Password?
+
+This parameter keeps, how many digits should be added in the password. These are password strengthening parameters ,which increase the password strength.
+
+When the users set a new password, it will check against this parameter and warn the user if they are not including any digits in the password.
+
+It can be set in `/etc/pam.d/system-auth` file. I’m going to set `1` character.
+
+```
+# vi /etc/pam.d/system-auth
+
+password requisite pam_cracklib.so try_first_pass retry=3 minlen=12 dcredit=-1
+```
+
+### Set Minimum Other Characters (Symbols) In Password?
+
+This parameter keeps, how many Symbols should be added in the password. These are password strengthening parameters ,which increase the password strength.
+
+When the users set a new password, it will check against this parameter and warn the user if they are not including any Symbol in the password.
+
+It can be set in `/etc/pam.d/system-auth` file. I’m going to set `1` character.
+
+```
+# vi /etc/pam.d/system-auth
+
+password requisite pam_cracklib.so try_first_pass retry=3 minlen=12 ocredit=-1
+```
+
+### Set Account Lock?
+
+This parameter controls users failed attempts. It locks user account after reaches the given number of failed login attempts.
+
+It can be set in `/etc/pam.d/system-auth` file.
+
+```
+# vi /etc/pam.d/system-auth
+
+auth required pam_tally2.so onerr=fail audit silent deny=5
+account required pam_tally2.so
+```
+
+### Set Account Unlock Time?
+
+This parameter keeps users unlock time. If the user account is locked after consecutive failed authentications.
+
+It’s unlock the locked user account after reaches the given time. Sets the time (900 seconds = 15 minutes) for which the account should remain locked.
+
+It can be set in `/etc/pam.d/system-auth` file.
+
+```
+# vi /etc/pam.d/system-auth
+
+auth required pam_tally2.so onerr=fail audit silent deny=5 unlock_time=900
+account required pam_tally2.so
+```
+
+--------------------------------------------------------------------------------
+
+via: https://www.2daygeek.com/how-to-set-password-complexity-policy-on-linux/
+
+作者:[Magesh Maruthamuthu][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.2daygeek.com/author/magesh/
+[b]: https://github.com/lujun9972
+[1]: https://www.2daygeek.com/5-ways-to-generate-a-random-strong-password-in-linux-terminal/
+[2]: https://www.2daygeek.com/how-to-check-password-complexity-strength-and-score-in-linux/
diff --git a/sources/tech/20190513 Manage business documents with OpenAS2 on Fedora.md b/sources/tech/20190513 Manage business documents with OpenAS2 on Fedora.md
new file mode 100644
index 0000000000..c8e82151ef
--- /dev/null
+++ b/sources/tech/20190513 Manage business documents with OpenAS2 on Fedora.md
@@ -0,0 +1,153 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Manage business documents with OpenAS2 on Fedora)
+[#]: via: (https://fedoramagazine.org/manage-business-documents-with-openas2-on-fedora/)
+[#]: author: (Stuart D Gathman https://fedoramagazine.org/author/sdgathman/)
+
+Manage business documents with OpenAS2 on Fedora
+======
+
+![][1]
+
+Business documents often require special handling. Enter Electronic Document Interchange, or **EDI**. EDI is more than simply transferring files using email or http (or ftp), because these are documents like orders and invoices. When you send an invoice, you want to be sure that:
+
+1\. It goes to the right destination, and is not intercepted by competitors.
+2\. Your invoice cannot be forged by a 3rd party.
+3\. Your customer can’t claim in court that they never got the invoice.
+
+The first two goals can be accomplished by HTTPS or email with S/MIME, and in some situations, a simple HTTPS POST to a web API is sufficient. What EDI adds is the last part.
+
+This article does not cover the messy topic of formats for the files exchanged. Even when using a standardized format like ANSI or EDIFACT, it is ultimately up to the business partners. It is not uncommon for business partners to use an ad-hoc CSV file format. This article shows you how to configure Fedora to send and receive in an EDI setup.
+
+### Centralized EDI
+
+The traditional solution is to use a Value Added Network, or **VAN**. The VAN is a central hub that transfers documents between their customers. Most importantly, it keeps a secure record of the documents exchanged that can be used as evidence in disputes. The VAN can use different transfer protocols for each of its customers
+
+### AS Protocols and MDN
+
+The AS protocols are a specification for adding a digital signature with optional encryption to an electronic document. What it adds over HTTPS or S/MIME is the Message Disposition Notification, or **MDN**. The MDN is a signed and dated response that says, in essence, “We got your invoice.” It uses a secure hash to identify the specific document received. This addresses point #3 without involving a third party.
+
+The [AS2 protocol][2] uses HTTP or HTTPS for transport. Other AS protocols target [FTP][3] and [SMTP][4]. AS2 is used by companies big and small to avoid depending on (and paying) a VAN.
+
+### OpenAS2
+
+OpenAS2 is an open source Java implemention of the AS2 protocol. It is available in Fedora since 28, and installed with:
+
+```
+$ sudo dnf install openas2
+$ cd /etc/openas2
+```
+
+Configuration is done with a text editor, and the config files are in XML. The first order of business before starting OpenAS2 is to change the factory passwords.
+
+Edit _/etc/openas2/config.xml_ and search for _ChangeMe_. Change those passwords. The default password on the certificate store is _testas2_ , but that doesn’t matter much as anyone who can read the certificate store can read _config.xml_ and get the password.
+
+### What to share with AS2 partners
+
+There are 3 things you will exchange with an AS2 peer.
+
+#### AS2 ID
+
+Don’t bother looking up the official AS2 standard for legal AS2 IDs. While OpenAS2 implements the standard, your partners will likely be using a proprietary product which doesn’t. While AS2 allows much longer IDs, many implementations break with more than 16 characters. Using otherwise legal AS2 ID chars like ‘:’ that can appear as path separators on a proprietary OS is also a problem. Restrict your AS2 ID to upper and lower case alpha, digits, and ‘_’ with no more than 16 characters.
+
+#### SSL certificate
+
+For real use, you will want to generate a certificate with SHA256 and RSA. OpenAS2 ships with two factory certs to play with. Don’t use these for anything real, obviously. The certificate file is in PKCS12 format. Java ships with _keytool_ which can maintain your PKCS12 “keystore,” as Java calls it. This article skips using _openssl_ to generate keys and certificates. Simply note that _sudo keytool -list -keystore as2_certs.p12_ will list the two factory practice certs.
+
+#### AS2 URL
+
+This is an HTTP URL that will access your OpenAS2 instance. HTTPS is also supported, but is redundant. To use it you have to uncomment the https module configuration in _config.xml_ , and supply a certificate signed by a public CA. This requires another article and is entirely unnecessary here.
+
+By default, OpenAS2 listens on 10080 for HTTP and 10443 for HTTPS. OpenAS2 can talk to itself, so it ships with two partnerships using __ as the AS2 URL. If you don’t find this a convincing demo, and can install a second instance (on a VM, for instance), you can use private IPs for the AS2 URLs. Or install [Cjdns][5] to get IPv6 mesh addresses that can be used anywhere, resulting in AS2 URLs like _http://[fcbf:fc54:e597:7354:8250:2b2e:95e6:d6ba]:10080_.
+
+Most businesses will also want a list of IPs to add to their firewall. This is actually [bad practice][6]. An AS2 server has the same security risk as a web server, meaning you should isolate it in a VM or container. Also, the difficulty of keeping mutual lists of IPs up to date grows with the list of partners. The AS2 server rejects requests not signed by a configured partner.
+
+### OpenAS2 Partners
+
+With that in mind, open _partnerships.xml_ in your editor. At the top is a list of “partners.” Each partner has a name (referenced by the partnerships below as “sender” or “receiver”), AS2 ID, certificate, and email. You need a partner definition for yourself and those you exchange documents with. You can define multiple partners for yourself. OpenAS2 ships with two partners, OpenAS2A and OpenAS2B, which you’ll use to send a test document.
+
+### OpenAS2 Partnerships
+
+Next is a list of “partnerships,” one for each direction. Each partnership configuration includes the sender, receiver, and the AS2 URL used to send the documents. By default, partnerships use synchronous MDN. The MDN is returned on the same HTTP transaction. You could uncomment the _as2_receipt_option_ for asynchronous MDN, which is sent some time later. Use synchronous MDN whenever possible, as tracking pending MDNs adds complexity to your application.
+
+The other partnership options select encryption, signature hash, and other protocol options. A fully implemented AS2 receiver can handle any combination of options, but AS2 partners may have incomplete implementations or policy requirements. For example, DES3 is a comparatively weak encryption algorithm, and may not be acceptable. It is the default because it is almost universally implemented.
+
+If you went to the trouble to set up a second physical or virtual machine for this test, designate one as OpenAS2A and the other as OpenAS2B. Modify the _as2_url_ on the OpenAS2A-to-OpenAS2B partnership to use the IP (or hostname) of OpenAS2B, and vice versa for the OpenAS2B-to-OpenAS2A partnership. Unless they are using the FedoraWorkstation firewall profile, on both machines you’ll need:
+
+```
+# sudo firewall-cmd --zone=public --add-port=10080/tcp
+```
+
+Now start the _openas2_ service (on both machines if needed):
+
+```
+# sudo systemctl start openas2
+```
+
+### Resetting the MDN password
+
+This initializes the MDN log database with the factory password, not the one you changed it to. This is a packaging bug to be fixed in the next release. To avoid frustration, here’s how to change the h2 database password:
+
+```
+$ sudo systemctl stop openas2
+$ cat >h2passwd <<'DONE'
+#!/bin/bash
+AS2DIR="/var/lib/openas2"
+java -cp "$AS2DIR"/lib/h2* org.h2.tools.Shell \
+ -url jdbc:h2:"$AS2DIR"/db/openas2 \
+ -user sa -password "$1" <testdoc <<'DONE'
+This is not a real EDI format, but is nevertheless a document.
+DONE
+$ sudo chown openas2 testdoc
+$ sudo mv testdoc /var/spool/openas2/toOpenAS2B
+$ sudo journalctl -f -u openas2
+... log output of sending file, Control-C to stop following log
+^C
+```
+
+OpenAS2 does not send a document until it is writable by the _openas2_ user or group. As a consequence, your actual business application will copy, or generate in place, the document. Then it changes the group or permissions to send it on its way, to avoid sending a partial document.
+
+Now, on the OpenAS2B machine, _/var/spool/openas2/OpenAS2A_OID-OpenAS2B_OID/inbox_ shows the message received. That should get you started!
+
+* * *
+
+_Photo by _[ _Beatriz Pérez Moya_][7]_ on _[_Unsplash_][8]_._
+
+--------------------------------------------------------------------------------
+
+via: https://fedoramagazine.org/manage-business-documents-with-openas2-on-fedora/
+
+作者:[Stuart D Gathman][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://fedoramagazine.org/author/sdgathman/
+[b]: https://github.com/lujun9972
+[1]: https://fedoramagazine.org/wp-content/uploads/2019/05/openas2-816x345.jpg
+[2]: https://en.wikipedia.org/wiki/AS2
+[3]: https://en.wikipedia.org/wiki/AS3_(networking)
+[4]: https://en.wikipedia.org/wiki/AS1_(networking)
+[5]: https://fedoramagazine.org/decentralize-common-fedora-apps-cjdns/
+[6]: https://www.ld.com/as2-part-2-best-practices/
+[7]: https://unsplash.com/photos/XN4T2PVUUgk?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText
+[8]: https://unsplash.com/search/photos/documents?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText
diff --git a/sources/tech/20190513 When to be concerned about memory levels on Linux.md b/sources/tech/20190513 When to be concerned about memory levels on Linux.md
new file mode 100644
index 0000000000..3306793c9f
--- /dev/null
+++ b/sources/tech/20190513 When to be concerned about memory levels on Linux.md
@@ -0,0 +1,121 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (When to be concerned about memory levels on Linux)
+[#]: via: (https://www.networkworld.com/article/3394603/when-to-be-concerned-about-memory-levels-on-linux.html)
+[#]: author: (Sandra Henry-Stocker https://www.networkworld.com/author/Sandra-Henry_Stocker/)
+
+When to be concerned about memory levels on Linux
+======
+Memory management on Linux systems is complicated. Seeing high usage doesn’t necessarily mean there’s a problem. There are other things you should also consider.
+![Qfamily \(CC BY 2.0\)][1]
+
+Running out of memory on a Linux system is generally _not_ a sign that there's a serious problem. Why? Because a healthy Linux system will cache disk activity in memory, basically gobbling memory that isn't being used, which is a very good thing.
+
+In other words, it doesn't allow memory to go to waste. It uses the spare memory to increase disk access speed, and it does this _without_ taking memory away from running applications. This memory caching, as you might well imagine, is hundreds of times faster than working directly with the hard-disk drives (HDD) and significantly faster than solid-state drives. Full or near full memory normally means that a system is running as efficiently as it can — not that it's running into problems.
+
+**[ Also see:[Must-know Linux Commands][2] ]**
+
+### How caching works
+
+Disk caching simply means that a system is taking advantage of unused resources (free memory) to speed up disk reads and writes. Applications don't lose anything and most of the time can acquire more memory whenever they need it. In addition, disk caching does not cause applications to resort to using swap. Instead, memory used for disk caching is always returned immediately when needed and disk content updated.
+
+### Major and minor page faults
+
+Linux systems allocate memory to processes by breaking physical memory into chunks called "pages" and then mapping those pages into process virtual memory. Pages that appear to no longer be used may be removed from memory — even if the related process is still running. When a process needs a page that is no longer mapped or no longer in memory, a fault is generated. So, "fault" does not mean "error" but instead means "unavailable," and faults play an important role in memory management.
+
+A minor fault means the page is in memory but not allocated to the requesting process or not marked as present in the memory management unit. A major fault means the page in no longer in memory.
+
+If you'd like to get a feel for how often minor and major page faults occur, try a **ps** command like this one. Note that we're asking for the fields related to page faults and the commands to be listed. Numerous lines were omitted from the output. The MINFL displays the number of minor faults, while MAJFL represents the number of major faults.
+
+```
+$ ps -eo min_flt,maj_flt,cmd
+ MINFL MAJFL CMD
+230760 150 /usr/lib/systemd/systemd --switched-root --system --deserialize 18
+ 0 0 [kthreadd]
+ 0 0 [rcu_gp]
+ 0 0 [rcu_par_gp]
+ 0 0 [kworker/0:0H-kblockd]
+ ...
+ 166 20 gpg-agent --homedir /var/lib/fwupd/gnupg --use-standard-socket --daemon
+ 525 1 /usr/libexec/gvfsd-trash --spawner :1.16 /org/gtk/gvfs/exec_spaw/0
+ 4966 4 /usr/libexec/gnome-terminal-server
+ 3617 0 bash
+ 0 0 [kworker/1:0H-kblockd]
+ 927 0 gdm-session-worker [pam/gdm-password]
+```
+
+To report on a single process, you might try a command like this:
+
+```
+$ ps -o min_flt,maj_flt 1
+ MINFL MAJFL
+230064 150
+```
+
+You can also add other fields such as the process owner's UID and GID.
+
+```
+$ ps -o min_flt,maj_flt,cmd,args,uid,gid 1
+ MINFL MAJFL CMD COMMAND UID GID
+230064 150 /usr/lib/systemd/systemd -- /usr/lib/systemd/systemd -- 0 0
+```
+
+### How full is full?
+
+One way to get a better handle on how memory is being used is with the **free -m** command. The **-m** option reports the numbers in mebibytes (MiBs) instead of bytes.
+
+```
+$ free -m
+ total used free shared buff/cache available
+Mem: 3244 3069 35 49 140 667
+Swap: 3535 0 3535
+```
+
+Note that "free" (unused) memory can be running low while "available" (available for starting new applications) might report a larger number. The distinction between these two fields is well worth paying attention to. Available means that it can be recovered and used when needed, while free means that it's available now.
+
+### When to worry
+
+If performance on a Linux systems appears to be good — applications are responsive, the command line shows no indications of a problem — chances are the system's in good shape. Keep in mind that some application might be slowed down for some reason that doesn't affect the overall system.
+
+An excessive number of hard faults may indeed indicate a problem, but balance this with observed performance.
+
+A good rule of thumb is to worry when available memory is close to zero or when the "swap used" field grows or fluctuates noticeably. Don't worry if the "available" figure is a reasonable percentage of the total memory available as it is in the example from above repeated here:
+
+```
+$ free -m
+ total used free shared buff/cache available
+Mem: 3244 3069 35 49 140 667
+Swap: 3535 0 3535
+```
+
+### Linux performance is complicated
+
+All that aside, memory on a Linux system can fill up and performance can slow down. Just don't take one report on memory usage as an indication that your system's in trouble.
+
+Memory management on Linux systems is complicated because of the measures taken to ensure the best use of system resources. Don't let the initial appearance of full memory trick you into believing that your system is in trouble when it isn't.
+
+**[ Two-Minute Linux Tips:[Learn how to master a host of Linux commands in these 2-minute video tutorials][3] ]**
+
+Join the Network World communities on [Facebook][4] and [LinkedIn][5] to comment on topics that are top of mind.
+
+--------------------------------------------------------------------------------
+
+via: https://www.networkworld.com/article/3394603/when-to-be-concerned-about-memory-levels-on-linux.html
+
+作者:[Sandra Henry-Stocker][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.networkworld.com/author/Sandra-Henry_Stocker/
+[b]: https://github.com/lujun9972
+[1]: https://images.idgesg.net/images/article/2019/05/full-swimming-pool-100796221-large.jpg
+[2]: https://www.networkworld.com/article/3391029/must-know-linux-commands.html
+[3]: https://www.youtube.com/playlist?list=PL7D2RMSmRO9J8OTpjFECi8DJiTQdd4hua
+[4]: https://www.facebook.com/NetworkWorld/
+[5]: https://www.linkedin.com/company/network-world
diff --git a/sources/tech/20190515 How to manage access control lists with Ansible.md b/sources/tech/20190515 How to manage access control lists with Ansible.md
new file mode 100644
index 0000000000..692dd70599
--- /dev/null
+++ b/sources/tech/20190515 How to manage access control lists with Ansible.md
@@ -0,0 +1,139 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (How to manage access control lists with Ansible)
+[#]: via: (https://opensource.com/article/19/5/manage-access-control-lists-ansible)
+[#]: author: (Taz Brown https://opensource.com/users/heronthecli)
+
+How to manage access control lists with Ansible
+======
+Automating ACL management with Ansible's ACL module is a smart way to
+strengthen your security strategy.
+![Data container block with hexagons][1]
+
+Imagine you're a new DevOps engineer in a growing agile environment, and recently your company has experienced phenomenal growth. To support expansion, the company increased hiring by 25% over the last quarter and added 5,000 more servers and network devices to its infrastructure. The company now has over 13,000 users, and you need a tool to scale the existing infrastructure and manage your large number of users and their thousands of files and directories. The company decided to adopt [Ansible][2] company-wide to manage [access control lists (ACLs)][3] and answer the call of effectively managing files and directories and permissions.
+
+Ansible can be used for a multitude of administration and maintenance tasks and, as a DevOps engineer or administrator, it's likely you've been tasked with using it to manage ACLs.
+
+### About managing ACLs
+
+ACLs allow regular users to share their files and directories selectively with other users and groups. With ACLs, a user can grant others the ability to read, write, and execute files and directories without leaving those filesystem elements open.
+
+ACLs are set and removed at the command line using the **setfacl** utility. The command is usually followed by the name of a file or directory. To set permissions, you would use the Linux command **setfacl -m d ⭕rx ** (e.g., **setfacl -m d ⭕rx Music/**). To view the current permissions on a directory, you would use the command **getfacl ** (e.g., **getfacl Music/** ). To remove an ACL from a file or directory, you would type the command, **# setfacl -x ** (to remove only the specified ACL from the file/directory) or **# setfacl -b ** (to remove all ACLs from the file/directory).
+
+Only the owner assigned to the file or directory can set ACLs. (It's important to understand this before you, as the admin, take on Ansible to manage your ACLs.) There are also default ACLs, which control directory access; if a file inside a directory has no ACL, then the default ACL is applied.
+
+
+```
+sudo setfacl -m d⭕rx Music
+getfacl Music/
+# file: Music/
+# owner: root
+# group: root
+user::rwx
+group::---
+other::---
+default:user::rwx
+default:group::---
+default:other::r-x
+```
+
+### Enter Ansible
+
+So how can Ansible, in all its wisdom, tackle the task of applying permissions to users, files, directories, and more? Ansible can play nicely with ACLs, just as it does with a lot of features, utilities, APIs, etc. Ansible has an out-of-the-box [ACL module][3] that allows you to create playbooks/roles around granting a user access to a file, removing ACLs for users on a specific file, setting default ACLs for users on files, or obtaining ACLs on particular files.
+
+Anytime you are administering ACLs, you should use the best practice of "least privilege," meaning you should give a user access only to what they need to perform their role or execute a task, and no more. Restraint and minimizing the attack surface are critical. The more access extended, the higher the risk of unauthorized access to company assets.
+
+Here's an example Ansible playbook:
+
+![Ansible playbook][4]
+
+As an admin, automating ACL management demands that your Ansible playbooks can scale across your infrastructure to increase speed, improve efficiency, and reduce the time it takes to achieve your goals. There will be times when you need to determine the ACL for a specific file. This is essentially the same as using **getfacl ** in Linux. If you want to determine the ACLs of many, specific files, start with a playbook that looks like this:
+
+
+```
+\---
+\- hosts: all
+tasks:
+\- name: obtain the acl for a specific file
+acl:
+path: /etc/logrotate.d
+user_nfsv4_acls: true
+register: acl_info
+```
+
+You can use the following playbook to set permissions on files/directories:
+
+![Ansible playbook][5]
+
+This playbook grants user access to a file:
+
+
+```
+\- hosts:
+become: yes
+gather_facts: no
+tasks:
+\- name: Grant user Shirley read access to a file
+acl:
+path: /etc/foo.conf
+entity: shirley
+etype: user
+permissions: r
+state: present
+```
+
+And this playbook grants user access to a directory:
+
+
+```
+\---
+\- hosts: all
+become: yes
+gather_facts: no
+tasks:
+\- name: setting permissions on directory and user
+acl:
+path: /path/to/scripts/directory
+entity: "{{ item }}"
+etype: user
+permissions: rwx
+state: present
+loop:
+\- www-data
+\- root
+```
+
+### Security realized?
+
+Applying ACLs to files and users is a practice you should take seriously in your role as a DevOps engineer. Security best practices and formal compliance often get little or no attention. When you allow access to files with sensitive data, you are always risking that the data will be tampered with, stolen, or deleted. Therefore, data protection must be a focal point in your security strategy. Ansible can be part of your security automation strategy, as demonstrated here, and your ACL application is as good a place to start as any.
+
+Automating your security practices will, of course, go beyond just managing ACLs; it might also involve [SELinux][6] configuration, cryptography, security, and compliance. Remember that Ansible also allows you to define your systems for security, whether it's locking down users and groups (e.g., managing ACLs), setting firewall rules, or applying custom security policies.
+
+Your security strategy should start with a baseline plan. As a DevOps engineer or admin, you should examine the current security strategy (or the lack thereof), then chart your plan for automating security in your environment.
+
+### Conclusion
+
+Using Ansible to manage your ACLs as part of your overall security automation strategy depends on the size of both the company you work for and the infrastructure you manage. Permissions, users, and files can quickly get out of control, potentially placing your security in peril and putting the company in a position you definitely don't want to it be.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/5/manage-access-control-lists-ansible
+
+作者:[Taz Brown ][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/heronthecli
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/data_container_block.png?itok=S8MbXEYw (Data container block with hexagons)
+[2]: https://opensource.com/article/19/2/quickstart-guide-ansible
+[3]: https://docs.ansible.com/ansible/latest/modules/acl_module.html
+[4]: https://opensource.com/sites/default/files/images/acl.yml_.png (Ansible playbook)
+[5]: https://opensource.com/sites/default/files/images/set_filedir_permissions.png (Ansible playbook)
+[6]: https://opensource.com/article/18/8/cheat-sheet-selinux
diff --git a/sources/tech/20190516 Create flexible web content with a headless management system.md b/sources/tech/20190516 Create flexible web content with a headless management system.md
new file mode 100644
index 0000000000..df58e96d0d
--- /dev/null
+++ b/sources/tech/20190516 Create flexible web content with a headless management system.md
@@ -0,0 +1,113 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Create flexible web content with a headless management system)
+[#]: via: (https://opensource.com/article/19/5/headless-cms)
+[#]: author: (Sam Bocetta https://opensource.com/users/sambocetta)
+
+Create flexible web content with a headless management system
+======
+Get the versatility and freedom to deliver content however you think is
+best.
+![Browser of things][1]
+
+In recent years, we’ve witnessed an explosion in the number of technological devices that deliver web-based content to users. Smartphones, tablets, smartwatches, and more—all with progressively advancing technical capabilities and support for an ever-widening list of operating systems and web browsers—swarm anew onto the market each year.
+
+What does this trend have to do with web development and headless versus traditional Content Management Systems (CMS)? Quite a lot.
+
+### CMS creates the internet
+
+A CMS is an application or set of computer programs used to manage digital content like images, videos, blog posts—essentially anything you would post on a website. An obvious example of a CMS is [WordPress][2].
+
+The word "manage" is used broadly here. It can refer to creating, editing, or updating any kind of digital content on a website, as well as indexing the site to make it easily searchable.
+
+So, a CMS essentially separates the content displayed on a website from how that content is displayed. It also allows you, the website administrator, to set permissions on who can access, edit, modify, or otherwise manage that content.
+
+Suppose you want to post a new blog entry, update or correct something in an old post, write on your Facebook page, share a social media link to a video or article, or embed a video, music file, or pre-written set of text into a page on your website. If you have ever done anything like this, you have made use of CMS features.
+
+### Traditional CMS architecture: Benefits and flaws
+
+There are two major components that make up a CMS: the Content Management Application (CMA) and the Content Delivery Application (CDA). The CMA pertains to the front-end portion of the website. This is what allows authors or other content managers to edit and create content without help from a web developer. The CDA pertains to the back end portion of a website. By organizing and compiling content to make website content updates possible, it automates the function of a website administrator.
+
+Traditionally, these two pieces are joined into a single unit as a "coupled" CMS architecture. A **coupled CMS** uses a specific front-end delivery system (CMA) built into the application itself. The term "coupled" comes from the fact that the front-end framework—the templates and layout of the pages and how those pages respond to being opened in certain browsers—is coupled to the website’s content. In other words, in a coupled CMS architecture the Content Management Application (CMA) and Content Delivery Application (CDA) are inseparably merged.
+
+#### Benefits of the traditional CMS
+
+Coupled architecture does offer advantages, mainly in simplicity and ease of use for those who are not technically sophisticated. This fact explains why a platform like WordPress, which retains a traditional CMS setup, [remains so popular][3] for those who create websites or blogs.
+
+Further simplifying the web development process [are website builder applications][4], such as [Wix][5] and [Squarespace][6], which allow you to build drag-and-drop websites. The most popular of these builders use open source libraries but are themselves closed source. These sites allow almost anyone who can find the internet to put a website together without wading through the relatively short weeds of a CMS environment. While builder applications were [the object of derision][7] not so long ago amongst many in the open source community—mainly because they tended to give websites a generic and pre-packaged look and feel—they have grown increasingly functional and variegated.
+
+#### Security is an issue
+
+However, for all but the simplest web apps, a traditional CMS architecture results in inflexible technology. Modifying a static website or web app with a traditional CMS requires tremendous time and effort to produce updates, patches, and installations, preventing developers from keeping up with the growing number of devices and browsers.
+
+Furthermore, coupled CMSs have two built-in security flaws:
+
+**Risk #1** : Since content management and delivery are bound together, hackers who breach your website through the front end automatically gain access to the back-end database. This lack of separation between data and its presentation increases the likelihood that data will be stolen. Depending on the kind of user data stored on your website’s servers, a large-scale theft could be catastrophic.
+
+**Risk #2** : The risk of successful [Distributed Denial of Service][8] (DDoS) attacks increases without a separate system for delivering content to your website. DDoS attacks flood content delivery networks with so many traffic requests that they become overwhelmed and go offline. If your content delivery network is separated from your actual web servers, attackers will be less able to bring down your site.
+
+To avoid these problems, developers have introduced headless and decoupled CMSs.
+
+### Comparing headless and decoupled CMSs
+
+The "head" of a CMS is a catch-all term for the Content Delivery Application. Therefore, a CMS without one—and so with no way of delivering content to a user—is called "headless."
+
+This lack of an established delivery method gives headless CMSs enormous versatility. Without a CDA there is no pre-established delivery method, so developers can design separate frameworks as the need arises. The problem of constantly patching your website, web apps, and other code to guarantee compatibility disappears.
+
+Another option, a **decoupled CMS** , includes many of the same features and benefits as a headless CMS, but there is one crucial difference. Where a headless CMS leaves it entirely to the developer to deliver and present content to their users, a decoupled CMS offers pre-established delivery tools that developers can either take or leave. Decoupled CMSs thus offer both the simplicity of the traditional CMS and the versatility of the headless ones.
+
+In short, a decoupled CMS is sometimes called a **hybrid CMS ****since it's a hybrid of the coupled and headless designs. Decoupled CMSs are not a new concept. As far back as 2015, PHP core repository developer David Buchmann was [calling on devs][9] to decouple their CMSs to meet a wider set of challenges.
+
+### Security improvements with a headless CMS
+
+Perhaps the most important point to make about headless versus decoupled content management architectures, and how they both differ from traditional architecture, is the added security benefit. In both the headless and decoupled designs, content and user data are located on a separate back-end system protected by a firewall. The user can’t access the content management application itself.
+
+However, it's important to keep in mind that the major consequence of this change in architectures is that since the architecture is fragmented, developers have to fill in the gaps and design content delivery and presentation mechanisms on their own. This means that whether you opt to go headless or decoupled, your developer needs to understand security. While separating content management and content delivery gives hackers one fewer vector through which to attack, this isn’t a security benefit in itself. The burden will be on your devs to properly secure your resulting CDA.
+
+A firewall protecting the back end provides a [crucial layer of security][10]. Headless and decoupled architectures can distribute your content among multiple databases, so if you take advantage of this possibility you can lower the chance of successful DDoS attacks even further. Open source headless CMS can also benefit from the installation of a [Linux VPN][11] or Linux kernel firewall management tool like [iptables][12]. All of these options combine to provide the added security developers need to create no matter what kind of CDA or back end setup they choose.
+
+Benefits aside, keep in mind that headless CMS platforms are a fairly new tech. Before making the switch to headless or decoupled, consider whether the host you’re using can support your added security so that you can host your application behind network security systems to block attempts at unauthorized access. If they cannot, a host change might be in order. When evaluating new hosts, also consider any existing contracts or security and compliance restrictions in place (GDPR, CCPA, etc.) which could cause migration troubles.
+
+### Open source options
+
+As you can see, headless architecture offers designers the versatility and freedom to deliver content however they think best. This spirit of freedom fits naturally with the open source paradigm in software design, in which all source code is available to public view and may be taken and modified by anyone for any reason.
+
+There are a number of open source headless CMS platforms that allow developers to do just that: [Mura,][13] [dotCMS][14], and [Cockpit CMS][15] to name a few. For a deeper dive into the world of open source headless CMS platforms, [check out this article][16].
+
+### Final thoughts
+
+For web designers and developers, the idea of a headless CMS marks a significant rethinking of how sites are built and delivered. Moving to this architecture is a great way to future-proof your website against changing preferences and whatever tricks future hackers may cook up, while at the same time creating a seamless user experience no matter what device or browser is used. You might also take a look at [this guide][17] for UX tips on designing your website in a way that meshes with headless and decoupled architectures.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/5/headless-cms
+
+作者:[Sam Bocetta][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/sambocetta
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/browser_desktop_website_checklist_metrics.png?itok=OKKbl1UR (Browser of things)
+[2]: https://wordpress.org/
+[3]: https://kinsta.com/wordpress-market-share/
+[4]: https://hostingcanada.org/website-builders/
+[5]: https://www.wix.com/
+[6]: https://www.squarespace.com
+[7]: https://arstechnica.com/information-technology/2016/11/wordpress-and-wix-trade-shots-over-alleged-theft-of-open-source-code/
+[8]: https://www.cloudflare.com/learning/ddos/what-is-a-ddos-attack/
+[9]: https://opensource.com/business/15/3/decoupling-your-cms
+[10]: https://www.hostpapa.com/blog/security/why-your-small-business-needs-a-firewall/
+[11]: https://surfshark.com/download/linux
+[12]: https://www.linode.com/docs/security/firewalls/control-network-traffic-with-iptables/
+[13]: https://www.getmura.com/
+[14]: https://dotcms.com/
+[15]: https://getcockpit.com/
+[16]: https://www.cmswire.com/web-cms/13-headless-cmss-to-put-on-your-radar/
+[17]: https://medium.com/@mat_walker/tips-for-content-modelling-with-the-headless-cms-contentful-7e886a911962
diff --git a/sources/tech/20190516 Querying 10 years of GitHub data with GHTorrent and Libraries.io.md b/sources/tech/20190516 Querying 10 years of GitHub data with GHTorrent and Libraries.io.md
new file mode 100644
index 0000000000..c7ec1de513
--- /dev/null
+++ b/sources/tech/20190516 Querying 10 years of GitHub data with GHTorrent and Libraries.io.md
@@ -0,0 +1,164 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Querying 10 years of GitHub data with GHTorrent and Libraries.io)
+[#]: via: (https://opensource.com/article/19/5/chaossearch-github-ghtorrent)
+[#]: author: (Pete Cheslock https://opensource.com/users/petecheslock/users/ghaff/users/payalsingh/users/davidmstokes)
+
+Querying 10 years of GitHub data with GHTorrent and Libraries.io
+======
+There is a way to explore GitHub data without any local infrastructure
+using open source datasets.
+![magnifying glass on computer screen][1]
+
+I’m always on the lookout for new datasets that we can use to show off the power of my team's work. [**CHAOS** SEARCH][2] turns your [Amazon S3][3] object storage data into a fully searchable [Elasticsearch][4]-like cluster. With the Elasticsearch API or tools like [Kibana][5], you can then query whatever data you find.
+
+I was excited when I found the [GHTorrent][6] project to explore. GHTorrent aims to build an offline version of all data available through the GitHub APIs. If datasets are your thing, this is a project worth checking out or even consider [donating one of your GitHub API keys][7].
+
+### Accessing GHTorrent data
+
+There are many ways to gain access to and use [GHTorrent’s data][8], which is available in [NDJSON][9]** **format. This project does a great job making the data available in multiple forms, including[CSV][10] for restoring into a [MySQL][11] database, [MongoDB][12] dumps of all objects, and Google Big Query** **(free) for exporting data directly into Google’s object storage. There is one caveat: this dataset has a nearly complete dataset from 2008 to 2017 but is not as complete from 2017 to today. That will impact our ability to query with certainty, but it is still an exciting amount of information.
+
+I chose Google Big Query to avoid running any database myself, so I was quickly able to download a full corpus of data including users and projects. **CHAOS** SEARCH can natively analyze the NDJSON format, so after uploading the data to Amazon S3 I was able to index it in just a few minutes. The **CHAOS** SEARCH platform doesn’t require users to set up index schemas or define mappings for their data, so it discovered all of the fields—strings, integers, etc.—itself.
+
+With my data fully indexed and ready for search and aggregation, I wanted to dive in and see what insights we can learn, like which software languages are the most popular for GitHub projects.
+
+(A note on formatting: this is a valid JSON query that we won't format correctly here to avoid scroll fatigue. To properly format it, you can copy it locally and send to a command-line utility like [jq][13].)
+
+
+```
+`{"aggs":{"2":{"date_histogram":{"field":"root.created_at","interval":"1M","time_zone":"America/New_York","min_doc_count":1}}},"size":0,"_source":{"excludes":[]},"stored_fields":["*"],"script_fields":{},"docvalue_fields":["root.created_at","root.updated_at"],"query":{"bool":{"must":[],"filter":[{"match_all":{}}],"should":[],"must_not":[{"match_phrase":{"root.language":{"query":""}}}]}}}`
+```
+
+This result is of little surprise to anyone who’s followed the state of open source languages over recent years.
+
+![Which software languages are the most popular on GitHub.][14]
+
+[JavaScript][15] is still the reigning champion, and while some believe JavaScript is on its way out, it remains the 800-pound gorilla and is likely to remain that way for some time. [Java][16] faces similar rumors and this data shows that it's a major part of the open source ecosystem.
+
+Given the popularity of projects like [Docker][17] and [Kubernetes][18], you might be wondering, “What about Go ([Golang][19])?” This is a good time for a reminder that the GitHub dataset discussed here contains some gaps, most significantly after 2017, which is about when I saw Golang projects popping up everywhere. I hope to repeat this search with a complete GitHub dataset and see if it changes the rankings at all.
+
+Now let's explore the rate of project creation. (Reminder: this is valid JSON consolidated for readability.)
+
+
+```
+`{"aggs":{"2":{"date_histogram":{"field":"root.created_at","interval":"1M","time_zone":"America/New_York","min_doc_count":1}}},"size":0,"_source":{"excludes":[]},"stored_fields":["*"],"script_fields":{},"docvalue_fields":["root.created_at","root.updated_at"],"query":{"bool":{"must":[],"filter":[{"match_all":{}}],"should":[],"must_not":[{"match_phrase":{"root.language":{"query":""}}}]}}}`
+```
+
+Seeing the rate at which new projects are created would be fun impressive as well, with tremendous growth starting around 2012:
+
+![The rate at which new projects are created on GitHub.][20]
+
+Now that I knew the rate of projects created as well as the most popular languages used to create these projects, I wanted to find out what open source licenses these projects chose. Unfortunately, this data doesn’t exist in the GitHub projects dataset, but the fantastic team over at [Tidelift][21] publishes a detailed list of GitHub projects, licenses used, and other details regarding the state of open source software in their [Libraries.io][22][ data][23]. Ingesting this dataset into **CHAOS** SEARCH took just minutes, letting me see which open source software licenses are the most popular on GitHub:
+
+(Reminder: this is valid JSON consolidated for readability.)
+
+
+```
+`{"aggs":{"2":{"terms":{"field":"Repository License","size":10,"order":{"_count":"desc"}}}},"size":0,"_source":{"excludes":[]},"stored_fields":["*"],"script_fields":{},"docvalue_fields":["Created Timestamp","Last synced Timestamp","Latest Release Publish Timestamp","Updated Timestamp"],"query":{"bool":{"must":[],"filter":[{"match_all":{}}],"should":[],"must_not":[{"match_phrase":{"Repository License":{"query":""}}}]}}}`
+```
+
+The results show some significant outliers:
+
+![Which open source software licenses are the most popular on GitHub.][24]
+
+As you can see, the [MIT license][25] and the [Apache 2.0 license][26] by far outweighs most of the other open source licenses used for these projects, while [various BSD and GPL licenses][27] follow far behind. I can’t say that I’m surprised by these results given GitHub’s open model. I would guess that users, not companies, create most projects and that they use the MIT license to make it simple for other people to use, share, and contribute. That Apache 2.0** **licensing is right behind also makes sense, given just how many companies want to ensure their trademarks are respected and have an open source component to their businesses.
+
+Now that I identified the most popular licenses, I was curious to see the least used ones. By adjusting my last query, I reversed the top 10 into the bottom 10 and was able to find just two projects using the [University of Illinois—NCSA Open Source License][28]. I had never heard of this license before, but it’s pretty close to Apache 2.0. It’s interesting to see just how many different software licenses are in use across all GitHub projects.
+
+![The University of Illinois/NCSA open source license.][29]
+
+The University of Illinois/NCSA open source license.
+
+After that, I dove into a specific language (JavaScript) to see the most popular license used there. (Reminder: this is valid JSON consolidated for readability.)
+
+
+```
+`{"aggs":{"2":{"terms":{"field":"Repository License","size":10,"order":{"_count":"desc"}}}},"size":0,"_source":{"excludes":[]},"stored_fields":["*"],"script_fields":{},"docvalue_fields":["Created Timestamp","Last synced Timestamp","Latest Release Publish Timestamp","Updated Timestamp"],"query":{"bool":{"must":[{"match_phrase":{"Repository Language":{"query":"JavaScript"}}}],"filter":[{"match_all":{}}],"should":[],"must_not":[{"match_phrase":{"Repository License":{"query":""}}}]}}}`
+```
+
+There were some surprises in this output.
+
+![The most popular open source licenses used for GitHub JavaScript projects.][30]
+
+Even though the default license for [NPM][31] modules when created with **npm init **is the one from [Internet Systems Consortium (ISC)][32], you can see that a considerable number of these projects use MIT as well as Apache 2.0 for their open source license.
+
+Since the Libraries.io dataset is rich in open source project content, and since the GHTorrent data is missing the last few years’ data (and thus missing any details about Golang projects), I decided to run a similar query to see how Golang projects license their code.
+
+(Reminder: this is valid JSON consolidated for readability.)
+
+
+```
+`{"aggs":{"2":{"terms":{"field":"Repository License","size":10,"order":{"_count":"desc"}}}},"size":0,"_source":{"excludes":[]},"stored_fields":["*"],"script_fields":{},"docvalue_fields":["Created Timestamp","Last synced Timestamp","Latest Release Publish Timestamp","Updated Timestamp"],"query":{"bool":{"must":[{"match_phrase":{"Repository Language":{"query":"Go"}}}],"filter":[{"match_all":{}}],"should":[],"must_not":[{"match_phrase":{"Repository License":{"query":""}}}]}}}`
+```
+
+The results were quite different than Javascript.
+
+![How Golang projects license their GitHub code.][33]
+
+Golang offers a stunning reversal from JavaScript—nearly three times as many Golang projects are licensed with Apache 2.0 over MIT. While it’s hard precisely explain why this is the case, over the last few years there’s been massive growth in Golang, especially among companies building projects and software offerings, both open source and commercially.
+
+As we learned above, many of these companies want to enforce their trademarks, thus the move to the Apache 2.0 license makes sense.
+
+#### Conclusion
+
+In the end, I found some interesting results by diving into the GitHub users and projects data dump. Some of these I definitely would have guessed, but a few results were surprises to me as well, especially the outliers like the rarely-used NCSA license.
+
+All in all, you can see how quickly and easily the **CHAOS** SEARCH platform lets us find complicated answers to interesting questions. I dove into this dataset and received deep analytics without having to run any databases myself, and even stored the data inexpensively on Amazon S3—so there’s little maintenance involved. Now I can ask any other questions regarding the data anytime I want.
+
+What other questions are you asking your data, and what data sets do you use? Let me know in the comments or on Twitter [@petecheslock][34].
+
+_A version of this article was originally posted on[ **CHAOS** SEARCH][35]._
+
+* * *
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/5/chaossearch-github-ghtorrent
+
+作者:[Pete Cheslock][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/petecheslock/users/ghaff/users/payalsingh/users/davidmstokes
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/search_find_code_issue_bug_programming.png?itok=XPrh7fa0 (magnifying glass on computer screen)
+[2]: https://chaossearch.io/
+[3]: https://aws.amazon.com/s3/
+[4]: https://www.elastic.co/
+[5]: https://www.elastic.co/products/kibana
+[6]: http://ghtorrent.org
+[7]: http://ghtorrent.org/services.html
+[8]: http://ghtorrent.org/downloads.html
+[9]: http://ndjson.org
+[10]: https://en.wikipedia.org/wiki/Comma-separated_values
+[11]: https://en.wikipedia.org/wiki/MySQL
+[12]: https://www.mongodb.com/
+[13]: https://stedolan.github.io/jq/
+[14]: https://opensource.com/sites/default/files/uploads/github-1_500.png (Which software languages are the most popular on GitHub.)
+[15]: https://en.wikipedia.org/wiki/JavaScript
+[16]: /resources/java
+[17]: /resources/what-docker
+[18]: /resources/what-is-kubernetes
+[19]: https://golang.org/
+[20]: https://opensource.com/sites/default/files/uploads/github-2_500.png (The rate at which new projects are created on GitHub.)
+[21]: https://tidelift.com
+[22]: http://libraries.io/
+[23]: https://libraries.io/data
+[24]: https://opensource.com/sites/default/files/uploads/github-3_500.png (Which open source software licenses are the most popular on GitHub.)
+[25]: https://opensource.org/licenses/MIT
+[26]: https://opensource.org/licenses/Apache-2.0
+[27]: https://opensource.org/licenses
+[28]: https://tldrlegal.com/license/university-of-illinois---ncsa-open-source-license-(ncsa)
+[29]: https://opensource.com/sites/default/files/uploads/github-4_500_0.png (The University of Illinois/NCSA open source license.)
+[30]: https://opensource.com/sites/default/files/uploads/github-5_500_0.png (The most popular open source licenses used for GitHub JavaScript projects.)
+[31]: https://www.npmjs.com/
+[32]: https://en.wikipedia.org/wiki/ISC_license
+[33]: https://opensource.com/sites/default/files/uploads/github-6_500.png (How Golang projects license their GitHub code.)
+[34]: https://twitter.com/petecheslock
+[35]: https://chaossearch.io/blog/where-are-the-github-users-part-1/
diff --git a/sources/tech/20190516 System76-s secret sauce for success.md b/sources/tech/20190516 System76-s secret sauce for success.md
new file mode 100644
index 0000000000..9409de535f
--- /dev/null
+++ b/sources/tech/20190516 System76-s secret sauce for success.md
@@ -0,0 +1,71 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (System76's secret sauce for success)
+[#]: via: (https://opensource.com/article/19/5/system76-secret-sauce)
+[#]: author: (Don Watkins https://opensource.com/users/don-watkins/users/don-watkins)
+
+System76's secret sauce for success
+======
+Linux computer maker's approach to community-informed software and
+hardware development embodies the open source way.
+![][1]
+
+In [_The Open Organization_][2], Jim Whitehurst says, "show passion for the purpose of your organization and constantly drive interest in it. People are drawn to and generally, want to follow passionate people." Carl Richell, the founder and CEO of Linux hardware maker [System76][3], pours that secret sauce to propel his company in the world of open hardware, Linux, and open source.
+
+Carl demonstrates quiet confidence and engages the team at System76 in a way that empowers their creative synergy. During a recent visit to System76's Denver factory, I could immediately tell that the employees love what they do, what they produce, and their interaction with each other and their customers, and Carl sets that example. They are as they [describe themselves][4]: a diverse team of creators, makers, and builders; a small company innovating the next big things; and a group of extremely hard-core nerds.
+
+### A revolutionary approach
+
+In 2005, Carl had a vision, which began as talk over some beers, to produce desktop and laptop computers that come installed with Linux. He's transformed that idea into a highly successful company founded on the [belief][5] that "the computer and operating system are the most powerful and versatile tools ever created." And by producing the best tools, System76 can inspire the curious to make their greatest discovery or complete their greatest project.
+
+![System 76 founder and CEO Carl Richell][6]
+
+Carl Richell's enthusiasm was obvious at System 76's [Thelio launch event][7].
+
+System76 lives up to its name, which was inspired by the American Revolution of 1776. The company views itself as a leader in the open source revolution, granting people freedom and independence from proprietary hardware and software.
+
+But the revolution does not end there; it continues with the company's business practices and diverse environment that aims to close the gender gap in technology leadership. Eight of the company's 28 employees are women, including vice president of marketing Louisa Bisio, creative manager Kate Hazen, purchasing manager May Liu, head of technical support Emma Marshall, and manufacturing control and logistics manager Sarah Zinger.
+
+### Community-informed design
+
+The staff members' passion and ingenuity for making the Linux experience enjoyable for customers creates an outstanding culture. Because the company believes the Linux desktop deserves a dedicated PC manufacturer, in 2018, it brought manufacturing in-house. This allows System76's engineers to make design changes more quickly, based on their frequent interactions with Linux users to learn about their needs and wants. It also opens up its parts and process to the public, including publishing design files under GPL on [GitHub][8], consistent with its commitment to openness and open source.
+
+For example, when System76 decided to create its own version of Linux, [Pop!_OS][9], it hosted online meetings to discuss and learn what features and software its customers wanted. This decision to work closely with the community has been instrumental in making Pop!_OS successful.
+
+System76 again turned to the community when it began developing [Thelio][10], its new line of desktop computers. Marketing VP Louisa Bisio says, "Taking a similar approach to open hardware has been great. We started in-house design in 2016, prototyping different desktop designs. Then we moved from prototyping acrylic to sheet metal. Then the first few prototypes of Thelio were presented to our [Superfan][11] attendees in 2017, and their feedback was really important in adjusting the desktop designs and progressing Thelio iterations forward."
+
+Thelio is the product of research and development focusing on high-quality components and design. It features a unique cabling layout, innovative airflow within the computer case, and the Thelio Io open hardware SATA controller. Many of System76's customers use platforms like [CUDA][12] to do their work; to support them, System76 works backward and pulls out proprietary functionality, piece by piece, until everything is open.
+
+### Open roads ahead
+
+Manufacturing open laptops are on the long-range roadmap, but the company is actively working on an open motherboard and maintaining Pop!_OS and System76 drivers, which are open. This commitment to openness, customer-driven design, and culture give System 76 a unique place in computer manufacturing. All of this stems from founder Carl Richell and his philosophy "that technology should be open and accessible to everyone." [As Carl says][13], "open hardware benefits all of us. It's how we further advance technology and make it more available to everyone."
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/5/system76-secret-sauce
+
+作者:[Don Watkins ][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/don-watkins/users/don-watkins
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/bubblehands_fromRHT_520_0612LL.png?itok=_iQ2dO3S
+[2]: https://www.amazon.com/Open-Organization-Igniting-Passion-Performance/dp/1511392460
+[3]: https://system76.com/
+[4]: https://system76.com/about
+[5]: https://system76.com/pop
+[6]: https://opensource.com/sites/default/files/uploads/carl_richell.jpg (System 76 founder and CEO Carl Richell)
+[7]: https://trevgstudios.smugmug.com/System76/121418-Thelio-Press-Event/i-w6XNmKS
+[8]: https://github.com/system76
+[9]: https://opensource.com/article/18/1/behind-scenes-popos-linux
+[10]: https://system76.com/desktops
+[11]: https://system76.com/superfan
+[12]: https://en.wikipedia.org/wiki/CUDA
+[13]: https://opensource.com/article/19/4/system76-hardware
diff --git a/sources/tech/20190517 10 Places Where You Can Buy Linux Computers.md b/sources/tech/20190517 10 Places Where You Can Buy Linux Computers.md
new file mode 100644
index 0000000000..36e3a0972b
--- /dev/null
+++ b/sources/tech/20190517 10 Places Where You Can Buy Linux Computers.md
@@ -0,0 +1,311 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (10 Places Where You Can Buy Linux Computers)
+[#]: via: (https://itsfoss.com/get-linux-laptops/)
+[#]: author: (Abhishek Prakash https://itsfoss.com/author/abhishek/)
+
+10 Places Where You Can Buy Linux Computers
+======
+
+_**Looking for Linux laptops? Here I list some online shops that either sell Linux computers or specialize only in Linux systems.**_
+
+Almost all the computers (except Apple) sold these days come with Windows preinstalled on it. The standard procedure for Linux users is to buy such a computer and then either remove Windows and install Linux or [dual boot Linux with Windows][1].
+
+But you don’t always have to go through Windows. You can buy Linux computers as well.
+
+But why buy a computer preinstalled with Linux when you can easily install Linux on any computer? Here are some reasons:
+
+ * A computer with Windows always has an extra cost for the Windows license. You can avoid that.
+ * Computers preinstalled with Linux are well-tested for hardware compatibility. You can be sure that your system will have WiFi and Bluetooth working instead of figuring these things on your own.
+ * Buying Linux laptops and desktops supports Linux indirectly. More sale indicates that there is a demand for Linux products and thus more vendors may incline to provide Linux as a choice of operating system.
+
+
+
+If you are looking to get a new Linux laptop, let me suggest you a few manufacturers and vendors that provide ready-to-use Linux systems.
+
+![][2]
+
+### 10 places to buy Linux laptops and computers
+
+A couple of disclaimer/information before you see the list of shops offering computers with Linux preloaded.
+
+Please make a purchase on your own decision. I am simply listing the Linux computer sellers here, I cannot vouch for their product quality, after sale service or other such things.
+
+This is not a ranking list. The items listed here are in no particular order. The numbers are used for the purpose of counting the items, not ranking them.
+
+Let’s see from where you can get desktops and laptops with Linux preinstalled.
+
+#### 1\. Dell
+
+![Dell XPS Ubuntu | Image Credit: Lifehacker][3]
+
+Dell has been offering Ubuntu laptops for several years now. Their flagship product XPS features a Developer Edition series that comes with Ubuntu preinstalled.
+
+If you read my [review of Dell XPS Ubuntu edition][4], you know that I loved this laptop. It’s been more than two years and this laptop is still in great condition and performance has not deteriorated.
+
+Dell XPS is an expensive device with a price tag of over $1000. If that’s out of your budget, Dell also has inexpensive offering in its Inspiron laptop range.
+
+Do note that Dell doesn’t display the Ubuntu/Linux laptops on its website. Unless you already know that Linux laptops are offered by Dell, you wouldn’t be able to find them.
+
+So, go to Dell’s website and enter Ubuntu in its search box to see the products that ship with Ubuntu Linux preinstalled.
+
+**Availability** : Most part of the world.
+
+[Dell][5]
+
+#### 2\. System76
+
+[System76][6] is a prominent name in the Linux computers world. This US-based company specializes in high-end computing devices that run Linux. Their targeted user-base is software developers.
+
+Initially, System76 used to offer Ubuntu on their machines. In 2017, they released their own Linux distribution [Pop!_OS][7] based on Ubuntu. Since then, Pop!_OS is the default OS on their machine with Ubuntu still available as a choice.
+
+Apart from performance, System76 has put a great emphasis on the design of its computer. Their [Thelio desktop series][8] has a handcrafted wooden design.
+
+![System76 Thelio Desktop][9]
+
+You may check their Linux laptops offering [here][10]. They also offer [Linux-based mini PCs][11] and [servers][12].
+
+Did I mention that System76 manufactures its computers in America instead of the obvious choice of China and Taiwan? The products are on the expensive side, perhaps for this reason.
+
+**Availability** : USA and 60 other countries. Extra custom duty may be applicable outside the US. More info [here][13].
+
+[System76][6]
+
+#### 3\. Purism
+
+Purism is a US-based company that takes pride in creating products and services that help you secure your data and privacy. That’s the reason why Purism calls itself a ‘Social Purpose Corporation’.
+
+[][14]
+
+Suggested read How To Use Google Drive In Linux
+
+Purism started with a crowdfunding campaign for creating a high-end open source laptop with (almost) no proprietary software. The [successful $250,000 crowdfunding campaign][15] gave birth to [Librem 15][16] laptop in 2015.
+
+![Purism Librem 13][17]
+
+Later Purism released a 13″ version called [Librem 13][18]. Purism also created a Linux distribution [Pure OS][19] keeping privacy and security in mind.
+
+[Pure OS can run on both desktop and mobile devices][20] and it is the default choice of operating system on its Librem laptops and [Librem 5 Linux phone][21].
+
+Purism gets its components from China, Taiwan, Japan, and the United States and builds/assemble them in the US. All their devices have hardware kill switches to turn off the microphone/camera and wireless/bluetooth.
+
+**Availability** : Worldwide with free international shipping. Custom duty may cost extra.
+
+[Purism][22]
+
+#### 4\. Slimbook
+
+Slimbook is a Linux computer vendor based in Spain. Slimbook came to limelight after launching the [first KDE branded laptop][23].
+
+Their offering is not limited to just KDE Neon. They offer Ubuntu, Kubuntu, Ubuntu MATE, Linux Mint and Spanish distributions like [Lliurex][24] and [Max][25]. You can also choose Windows at an additional cost or opt for no operating system at all.
+
+Slimbook has a wide variety of Linux laptops, desktops and mini PCs available. An iMac like 24″ [curved monitor that has in-built CPU][26] is an awesome addition to their collection.
+
+![Slimbook Kymera Aqua Liquid Cool Linux Computer][27]
+
+Want a liquid cooled Linux computer? Slimbook’s [Kymera Aqua][28] is for you.
+
+**Availability** : Worldwide but may cost extra in shipping and custom duty
+
+[Slimbook][29]
+
+#### 5\. TUXEDO Computers
+
+Another European candidate in this list of Linux computer vendors. [TUXEDO Computers][30] is based out of Germany and mainly focuses on German users and then European users.
+
+TUXEDO Computers only uses Linux and the computers are ‘manufactured in Germany’ and come with 5 years of guarantee and lifetime support.
+
+TUXEDO Computers has put up some real good effort in customizing its hardware to run on Linux. And if you ever run into trouble or want to start afresh, you have the system recovery option to restore factory settings automatically.
+
+![Tuxedo Computers supports a wide variety of distributions][31]
+
+TUXEDO Computers has a number of Linux laptops, desktops, mini-PCs available. They have both Intel and AMD processors. Apart from the computers, TUXEDO Computers also has a range of Linux supported accessories like docking stations, DVD/Blue-Ray burners, power bank and other peripheral devices.
+
+**Availability** : Free shipping in Germany and Europe (for orders above 150 Euro). Extra shipping charges and custom duty for non-EU countries. More info [here][32].
+
+[TUXEDO Computers][33]
+
+#### 6\. Vikings
+
+[Vikings][34] is based in Germany (instead of Scandinavia :D). Certified by [Free Software Foundation][35], Vikings focuses exclusively on Libre-friendly hardware.
+
+![Vikings’s products are certified by Free Software Foundation][36]
+
+The Linux laptops and desktops by Vikings come with [coreboot][37] or [Libreboot][38] instead of proprietary boot systems like BIOS and UEFI. You can also buy [server hardware][39] running no proprietary software.
+
+Vikings also has other accessories like router, docking station etc. The products are assembled in Germany.
+
+**Availability** : Worldwide (except North Korea). Non-EU countries may charge custom duty. More information [here][40].
+
+[Vikings][41]
+
+#### 7\. Ubuntushop.be
+
+No! It’s not the official Ubuntu Shop even though it has Ubuntu in its name. Ubuntushop is based in Belgium and originally started selling computers installed with Ubuntu.
+
+Today, you can get laptops preloaded with Linux distributions like Mint, Manjaro, elementrayOS. You can also request a distribution of your choice to be installed on the system you buy.
+
+![][42]
+
+One unique thing about Ubuntushop is that all of its computers come with default Tails OS live option. So even if it has a Linux distribution installed for regular use, you can always choose to boot into the Tails OS (without live USB). [Tails OS][43] is a Debian based distribution that deletes all traces of its use after logging out and it uses Tor network by default.
+
+[][44]
+
+Suggested read Things to do After Installing Ubuntu 18.04 and 18.10
+
+Unlike many other big players on this list, I feel that Ubuntushop is more of a ‘domestic operation’ where someone manually assembles your computer and installs Linux on it. But they have done quite some job on providing options like easy re-install, own cloud server etc.
+
+Got an old PC, send it to them while buying a new Linux computer and they will send it back to you after installing [lightweight Linux][45] on it so that the old computer is recycled and can still be put to some use.
+
+**Availability** : Belgium and rest of Europe.
+
+[Ubuntushop.be][46]
+
+#### 8\. Minifree
+
+[Minifree][47], short for Ministry of Freedom, is a company registered in England.
+
+You can guess that Minifree focuses on the freedom. It provides secure and privacy-respcting computers that come with [Libreboot][38] instead of BIOS or UEFI.
+
+Minifree devices are certified by [Free Software Foundation][48] which means that you can be sure that your computer adhere to guidelines and principals of Free and Open Source Software.
+
+![][49]
+
+Unlike many other Linux laptops vendors on this list, computers from Minifree are not super-expensive. You can get a Libreboot Linux laptop running [Trisquel GNU/Linux][50] from 200 euro.
+
+Apart from laptops, Minifree also has a range of accessories like a Libre Router, tablet, docking station, batteries, keyboard, mouse etc.
+
+If you care to run only 100% free software like [Richard Stallman][51], Minifree is for you.
+
+**Availability** : Worldwide. Shipping information is available [here][52].
+
+[Minifree][47]
+
+#### 9\. Entroware
+
+[Entroware][53] is another UK-based vendor that specializes in Linux-based laptops, desktop and servers.
+
+Like many others on the list, Entroware also has Ubuntu as its choice of Linux distribution. [Ubuntu MATE is also available as a choice on Entroware Linux laptops][54].
+
+![][55]
+
+Apart from laptops, desktop and servers, Entroware also has their [mini-PC Aura][56] and the iMac style [monitor with built-in CPU Ares][57].
+
+Availability: UK, Ireland France, Germany, Italy, Spain
+
+[Entroware][58]
+
+#### 10\. Juno Computers
+
+This is a new Linux laptop vendor on our list. Juno Computers is also based in UK and offers computers preinstalled with Linux. elementary OS, Ubuntu and Solus OS are the choices of Linux distributions here.
+
+Juno offers a range of laptops and a mini-PC called Olympia. Like almost all the mini-PCs offered by other vendors here, Olympia is also basically [Intel NUC][59].
+
+The main highlight from Juno Computers is a low-cost Chromebook alternative, Juve that costs £299. It runs a dual-booted system with Solus/elementray with an Android-based desktop operating system, [Prime OS][60].
+
+![Juve With Android-based Prime Os][61]
+
+Availability: UK, USA, Canada, Mexico, Most part of South America and Europe, Australia, New Zealand, some part of Asia and Africa. More information [here][62].
+
+[Juno Computers][63]
+
+#### Honorable mentions
+
+I have listed 10 places to get Linux computers but there are several other such shops available. I cannot include all of them in the main list and a couple of them seem to be out of stock for most products. However, I am going to mention them here so that you may check them on your own:
+
+ * [ZaReason][64]
+ * [Libiquity][65]
+ * [StationX][66]
+ * [Linux Certified][67]
+ * [Think Penguin][68]
+
+
+
+Other mainstream computer manufacturers like Acer, Lenovo etc may also have some Linux systems in their catalog so you may check their products as well.
+
+Have you ever bought a Linux computer? Where did you buy it? How’s your experience with it? Is it worth buying a Linux laptop? Do share your thoughts.
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/get-linux-laptops/
+
+作者:[Abhishek Prakash][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/abhishek/
+[b]: https://github.com/lujun9972
+[1]: https://itsfoss.com/guide-install-linux-mint-16-dual-boot-windows/
+[2]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/05/buy-linux-laptops.jpeg?resize=800%2C450&ssl=1
+[3]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/05/dell-xps-ubuntu.jpg?resize=800%2C450&ssl=1
+[4]: https://itsfoss.com/dell-xps-13-ubuntu-review/
+[5]: https://www.dell.com
+[6]: https://system76.com/
+[7]: https://itsfoss.com/pop-os-linux-review/
+[8]: https://system76.com/desktops
+[9]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/05/system76-thelio-desktop.jpg?ssl=1
+[10]: https://system76.com/laptops
+[11]: https://itsfoss.com/4-linux-based-mini-pc-buy-2015/
+[12]: https://system76.com/servers
+[13]: https://system76.com/shipping
+[14]: https://itsfoss.com/use-google-drive-linux/
+[15]: https://www.crowdsupply.com/purism/librem-15
+[16]: https://puri.sm/products/librem-15/
+[17]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/05/purism-librem-13.jpg?resize=800%2C471&ssl=1
+[18]: https://puri.sm/products/librem-13/
+[19]: https://www.pureos.net/
+[20]: https://itsfoss.com/pureos-convergence/
+[21]: https://itsfoss.com/librem-linux-phone/
+[22]: https://puri.sm/
+[23]: https://itsfoss.com/slimbook-kde/
+[24]: https://distrowatch.com/table.php?distribution=lliurex
+[25]: https://en.wikipedia.org/wiki/MAX_(operating_system)
+[26]: https://slimbook.es/en/aio-curve-all-in-one-for-gnu-linux
+[27]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/05/Slimbook-Kymera-Aqua-Liquid-Cool-Linux-Computer.jpg?ssl=1
+[28]: https://slimbook.es/en/kymera-aqua-the-gnu-linux-computer-with-custom-water-cooling
+[29]: https://slimbook.es/en/
+[30]: https://www.tuxedocomputers.com/
+[31]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/05/tuxedo-computers.jpeg?resize=800%2C400&ssl=1
+[32]: https://www.tuxedocomputers.com/en/Shipping-Returns.tuxedo
+[33]: https://www.tuxedocomputers.com/en#
+[34]: https://store.vikings.net/index.php?route=common/home
+[35]: https://www.fsf.org
+[36]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/05/vikings-computer.jpeg?resize=800%2C450&ssl=1
+[37]: https://www.coreboot.org/
+[38]: https://libreboot.org/
+[39]: https://store.vikings.net/libre-friendly-hardware/the-server-1u
+[40]: https://store.vikings.net/index.php?route=information/information&information_id=8
+[41]: https://store.vikings.net/libre-friendly-hardware
+[42]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/05/manjarobook-by-ubuntushop.jpeg?ssl=1
+[43]: https://tails.boum.org/
+[44]: https://itsfoss.com/things-to-do-after-installing-ubuntu-18-04/
+[45]: https://itsfoss.com/lightweight-linux-beginners/
+[46]: https://www.ubuntushop.be/index.php/en/
+[47]: https://minifree.org/
+[48]: https://www.fsf.org/
+[49]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/05/minifree.jpg?resize=800%2C550&ssl=1
+[50]: https://trisquel.info/
+[51]: https://en.wikipedia.org/wiki/Richard_Stallman
+[52]: https://minifree.org/shipping-costs/
+[53]: https://www.entroware.com/
+[54]: https://itsfoss.com/ubuntu-mate-entroware/
+[55]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/05/entroware.jpg?resize=800%2C450&ssl=1
+[56]: https://itsfoss.com/ubuntu-entroware-aura-mini-pc/
+[57]: https://www.entroware.com/store/ares
+[58]: https://www.entroware.com/store/index.php?route=common/home
+[59]: https://www.amazon.com/Intel-NUC-Mainstream-Kit-NUC8i3BEH/dp/B07GX4X4PW?psc=1&SubscriptionId=AKIAJ3N3QBK3ZHDGU54Q&tag=chmod7mediate-20&linkCode=xm2&camp=2025&creative=165953&creativeASIN=B07GX4X4PW (Intel NUC)
+[60]: https://primeos.in/
+[61]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/05/juve-with-prime-os.jpeg?ssl=1
+[62]: https://junocomputers.com/shipping
+[63]: https://junocomputers.com/
+[64]: https://zareason.com/
+[65]: https://libiquity.com/
+[66]: https://stationx.rocks/
+[67]: https://www.linuxcertified.com/linux_laptops.html
+[68]: https://www.thinkpenguin.com/
diff --git a/sources/tech/20190517 Announcing Enarx for running sensitive workloads.md b/sources/tech/20190517 Announcing Enarx for running sensitive workloads.md
new file mode 100644
index 0000000000..81d021f7d7
--- /dev/null
+++ b/sources/tech/20190517 Announcing Enarx for running sensitive workloads.md
@@ -0,0 +1,83 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Announcing Enarx for running sensitive workloads)
+[#]: via: (https://opensource.com/article/19/5/enarx-security)
+[#]: author: (Mike Bursell https://opensource.com/users/mikecamel/users/wgarry155)
+
+Announcing Enarx for running sensitive workloads
+======
+Enarx leverages the capabilities of a TEE to change the trust model for
+your application.
+![cubes coming together to create a larger cube][1]
+
+Running software is something that most of us do without thinking about it. We run in "on premises"—our own machines—or we run it in the cloud - on somebody else's machines. We don't always think about what those differences mean, or about what assumptions we're making about the securtiy of the data that's being processed, or even of the software that's doing that processing. Specifically, when you run software (a "workload") on a system (a "host") on the cloud or on your own premises, there are lots and lots of layers. You often don't see those layers, but they're there.
+
+Here's an example of the layers that you might see in a standard cloud virtualisation architecture. The different colours represent different entities that "own" different layers or sets of layers.
+
+![Layers in a standard cloud virtualisation architecture][2]
+
+Here's a similar diagram depicting a standard cloud container architecture. As before, each different colour represents a different "owner" of a layer or set of layers.
+
+![Standard cloud container architecture][3]
+
+These owners may be of very different types, from hardware vendors to OEMs to cloud service providers (CSPs) to middleware vendors to operating system vendors to application vendors to you, the workload owner. And for each workload that you run, on each host, the exact list of layers is likely to be different. And even when they're the same, the versions of the layers instances may be different, whether it's a different BIOS version, a different bootloader, a different kernel version, or whatever else.
+
+Now, in many contexts, you might not worry about this, and your CSP goes out of its way to abstract these layers and their version details away from you. But this is a security article, for security people, and that means that anybody who's reading this probably does care.
+
+The reason we care is not just the different versions and the different layers, but the number of different things—and different entities—that we need to trust if we're going to be happy running any sort of sensitive workload on these types of stacks. I need to trust every single layer, and the owner of every single layer, not only to do what they say they will do, but also not to be compromised. This is a _big_ stretch when it comes to running my sensitive workloads.
+
+### What's Enarx?
+
+Enarx is a new project that is trying to address this problem of having to trust all of those layers. A few of us at Red Hat have been working on it for a few months now. My colleague Nathaniel McCallum demoed an early incarnation of it at [Red Hat Summit 2019][4] in Boston, and we're ready to start announcing it to the world. We have code, we have a demo, we have a GitHub repository, we have a logo: what more could a project want? Well, people—but we'll get to that.
+
+![Enarx logo][5]
+
+With Enarx, we made the decision that we wanted to allow people running workloads to be able to reduce the number of layers—and owners—that they need to trust to the absolute minimum. We plan to use trusted execution environments ("TEEs"—see "[Oh, how I love my TEE (or do I?)][6]") to provide an architecture that looks a little more like this:
+
+![Enarx architecture][7]
+
+In a world like this, you have to trust the CPU and firmware, and you need to trust some middleware—of which Enarx is part—but you don't need to trust all of the other layers, because we will leverage the capabilities of the TEE to ensure the integrity and confidentiality of your application. The Enarx project will provide attestation of the TEE, so that you know you're running on a true and trusted TEE, and will provide open source, auditable code to help you trust the layer directly beneath your application.
+
+The initial code is out there—working on AMD's SEV TEE at the momen—and enough of it works now that we're ready to tell you about it.
+
+Making sure that your application meets your own security requirements is down to you. :-)
+
+### How do I find out more?
+
+The easiest way to learn more is to visit the [Enarx GitHub][8].
+
+We'll be adding more information there—it's currently just code—but bear with us: there are only a few of us on the project at the moment. A blog is on the list of things we'd like to have, but we wanted to get things started.
+
+We'd love to have people in the community getting involved in the project. It's currently quite low-level and requires quite a lot of knowledge to get running, but we'll work on that. You will need some specific hardware to make it work, of course. Oh, and if you're an early boot or a low-level KVM hacker, we're _particularly_ interested in hearing from you.
+
+I will, of course, respond to comments on this article.
+
+* * *
+
+_This article was originally published on[Alice, Eve, and Bob][9] and is reprinted with the author's permission._
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/5/enarx-security
+
+作者:[Mike Bursell ][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/mikecamel/users/wgarry155
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/cube_innovation_process_block_container.png?itok=vkPYmSRQ (cubes coming together to create a larger cube)
+[2]: https://opensource.com/sites/default/files/uploads/classic-cloud-virt-arch-1.png (Layers in a standard cloud virtualisation architecture)
+[3]: https://opensource.com/sites/default/files/uploads/cloud-container-arch.png (Standard cloud container architecture)
+[4]: https://www.redhat.com/en/summit/2019
+[5]: https://opensource.com/sites/default/files/uploads/enarx.png (Enarx logo)
+[6]: https://aliceevebob.com/2019/02/26/oh-how-i-love-my-tee-or-do-i/
+[7]: https://opensource.com/sites/default/files/uploads/reduced-arch.png (Enarx architecture)
+[8]: https://github.com/enarx
+[9]: https://aliceevebob.com/2019/05/07/announcing-enarx/
diff --git a/sources/tech/20190517 Using Testinfra with Ansible to verify server state.md b/sources/tech/20190517 Using Testinfra with Ansible to verify server state.md
new file mode 100644
index 0000000000..c14652a7f4
--- /dev/null
+++ b/sources/tech/20190517 Using Testinfra with Ansible to verify server state.md
@@ -0,0 +1,168 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Using Testinfra with Ansible to verify server state)
+[#]: via: (https://opensource.com/article/19/5/using-testinfra-ansible-verify-server-state)
+[#]: author: (Clement Verna https://opensource.com/users/cverna/users/paulbischoff/users/dcritch/users/cobiacomm/users/wgarry155/users/kadinroob/users/koreyhilpert)
+
+Using Testinfra with Ansible to verify server state
+======
+Testinfra is a powerful library for writing tests to verify an
+infrastructure's state. Coupled with Ansible and Nagios, it offers a
+simple solution to enforce infrastructure as code.
+![Terminal command prompt on orange background][1]
+
+By design, [Ansible][2] expresses the desired state of a machine to ensure that the content of an Ansible playbook or role is deployed to the targeted machines. But what if you need to make sure all the infrastructure changes are in Ansible? Or verify the state of a server at any time?
+
+[Testinfra][3] is an infrastructure testing framework that makes it easy to write unit tests to verify the state of a server. It is a Python library and uses the powerful [pytest][4] test engine.
+
+### Getting started with Testinfra
+
+Testinfra can be easily installed using the Python package manager (pip) and a Python virtual environment.
+
+
+```
+$ python3 -m venv venv
+$ source venv/bin/activate
+(venv) $ pip install testinfra
+```
+
+Testinfra is also available in the package repositories of Fedora and CentOS using the EPEL repository. For example, on CentOS 7 you can install it with the following commands:
+
+
+```
+$ yum install -y epel-release
+$ yum install -y python-testinfra
+```
+
+#### A simple test script
+
+Writing tests in Testinfra is easy. Using the code editor of your choice, add the following to a file named **test_simple.py** :
+
+
+```
+import testinfra
+
+def test_os_release(host):
+assert host.file("/etc/os-release").contains("Fedora")
+
+def test_sshd_inactive(host):
+assert host.service("sshd").is_running is False
+```
+
+By default, Testinfra provides a host object to the test case; this object gives access to different helper modules. For example, the first test uses the **file** module to verify the content of the file on the host, and the second test case uses the **service** module to check the state of a systemd service.
+
+To run these tests on your local machine, execute the following command:
+
+
+```
+(venv)$ pytest test_simple.py
+================================ test session starts ================================
+platform linux -- Python 3.7.3, pytest-4.4.1, py-1.8.0, pluggy-0.9.0
+rootdir: /home/cverna/Documents/Python/testinfra
+plugins: testinfra-3.0.0
+collected 2 items
+test_simple.py ..
+
+================================ 2 passed in 0.05 seconds ================================
+```
+
+For a full list of Testinfra's APIs, you can consult the [documentation][5].
+
+### Testinfra and Ansible
+
+One of Testinfra's supported backends is Ansible, which means Testinfra can directly use Ansible's inventory file and a group of machines defined in the inventory to run tests against them.
+
+Let's use the following inventory file as an example:
+
+
+```
+[web]
+app-frontend01
+app-frontend02
+
+[database]
+db-backend01
+```
+
+We want to make sure that our Apache web server service is running on **app-frontend01** and **app-frontend02**. Let's write the test in a file called **test_web.py** :
+
+
+```
+def check_httpd_service(host):
+"""Check that the httpd service is running on the host"""
+assert host.service("httpd").is_running
+```
+
+To run this test using Testinfra and Ansible, use the following command:
+
+
+```
+(venv) $ pip install ansible
+(venv) $ py.test --hosts=web --ansible-inventory=inventory --connection=ansible test_web.py
+```
+
+When invoking the tests, we use the Ansible inventory **[web]** group as the targeted machines and also specify that we want to use Ansible as the connection backend.
+
+#### Using the Ansible module
+
+Testinfra also provides a nice API to Ansible that can be used in the tests. The Ansible module enables access to run Ansible plays inside a test and makes it easy to inspect the result of the play.
+
+
+```
+def check_ansible_play(host):
+"""
+Verify that a package is installed using Ansible
+package module
+"""
+assert not host.ansible("package", "name=httpd state=present")["changed"]
+```
+
+By default, Ansible's [Check Mode][6] is enabled, which means that Ansible will report what would change if the play were executed on the remote host.
+
+### Testinfra and Nagios
+
+Now that we can easily run tests to validate the state of a machine, we can use those tests to trigger alerts on a monitoring system. This is a great way to catch unexpected changes.
+
+Testinfra offers an integration with [Nagios][7], a popular monitoring solution. By default, Nagios uses the [NRPE][8] plugin to execute checks on remote hosts, but using Testinfra allows you to run the tests directly from the Nagios master.
+
+To get a Testinfra output compatible with Nagios, we have to use the **\--nagios** flag when triggering the test. We also use the **-qq** pytest flag to enable pytest's **quiet** mode so all the test details will not be displayed.
+
+
+```
+(venv) $ py.test --hosts=web --ansible-inventory=inventory --connection=ansible --nagios -qq line test.py
+TESTINFRA OK - 1 passed, 0 failed, 0 skipped in 2.55 seconds
+```
+
+Testinfra is a powerful library for writing tests to verify an infrastructure's state. Coupled with Ansible and Nagios, it offers a simple solution to enforce infrastructure as code. It is also a key component of adding testing during the development of your Ansible roles using [Molecule][9].
+
+* * *
+
+Sysadmins who think the cloud is a buzzword and a bunch of hype should check out Ansible.
+
+Can you really do DevOps without sharing scripts or code? DevOps manifesto proponents value cross-...
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/5/using-testinfra-ansible-verify-server-state
+
+作者:[Clement Verna][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/cverna/users/paulbischoff/users/dcritch/users/cobiacomm/users/wgarry155/users/kadinroob/users/koreyhilpert
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/terminal_command_linux_desktop_code.jpg?itok=p5sQ6ODE (Terminal command prompt on orange background)
+[2]: https://www.ansible.com/
+[3]: https://testinfra.readthedocs.io/en/latest/
+[4]: https://pytest.org/
+[5]: https://testinfra.readthedocs.io/en/latest/modules.html#modules
+[6]: https://docs.ansible.com/ansible/playbooks_checkmode.html
+[7]: https://www.nagios.org/
+[8]: https://en.wikipedia.org/wiki/Nagios#NRPE
+[9]: https://github.com/ansible/molecule
diff --git a/sources/tech/20190520 Blockchain 2.0 - Explaining Distributed Computing And Distributed Applications -Part 11.md b/sources/tech/20190520 Blockchain 2.0 - Explaining Distributed Computing And Distributed Applications -Part 11.md
new file mode 100644
index 0000000000..c34effe6be
--- /dev/null
+++ b/sources/tech/20190520 Blockchain 2.0 - Explaining Distributed Computing And Distributed Applications -Part 11.md
@@ -0,0 +1,88 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Blockchain 2.0 – Explaining Distributed Computing And Distributed Applications [Part 11])
+[#]: via: (https://www.ostechnix.com/blockchain-2-0-explaining-distributed-computing-and-distributed-applications/)
+[#]: author: (editor https://www.ostechnix.com/author/editor/)
+
+Blockchain 2.0 – Explaining Distributed Computing And Distributed Applications [Part 11]
+======
+
+![Explaining Distributed Computing And Distributed Applications][1]
+
+### How DApps serve the purpose of [Blockchain 2.0][2]
+
+**Blockchain 1.0** was about introducing the “blockchain” into the list of modern buzzwords along with the advent of **bitcoin**. Multiple white papers detailing bitcoin’s underlying blockchain network specified the use of the blockchain for other uses as well. Although most of the said uses was around the basic concept of using the blockchain as a **decentralized medium** for storage, a use that stems from this property is utilizing it for carrying out **Distributed computing** on top of this layer.
+
+**DApps** or **Distributed Applications** are computer programs that are stored and run on a distributed storage system such as the [**Ethereum**][3] blockchain for instance. To understand how DApps function and how they’re different from traditional applications on your desktop or phone, we’ll need to delve into what distributed computing is. This post will explore some fundamental concepts of distributed computing and the role of blockchains in executing the said objective. Furthermore, well also look at a few applications or DApps, in blockchain lingo, to get a hang of things.
+
+### What is Distributed Computing?
+
+We’re assuming many readers are familiar with multi-threaded applications and multi-threading in general. Multi-threading is the reason why processor manufacturers are forever hell bent on increasing the core count on their products. Fundamentally speaking, some applications such as video rendering software suites are capable of dividing their work (in this case rendering effects and video styles) into multiple chunks and parallelly get them processed from a supporting computing system. This reduces the lead time on getting the work done and is generally more efficient in terms of time, money and energy usage. Applications such as some games however, cannot make use of this system since processing and responses need to be obtained real time based on user inputs rather than via planned execution. Nonetheless, the fact that more processing power may be exploited from existing hardware using these computing methods remains true and significant.
+
+Even supercomputers are basically a bunch of powerful CPUs all tied up together in a circuit to enable faster processing as mentioned above. The average core count on flagship CPUs from the lead manufacturers AMD and Intel have in fact gone up in the last few years, because increasing core count has recently been the only method to claim better processing and claim upgrades to their product lines. This information notwithstanding, the fact remains that distributed computing and related concepts of parallel computing are the only legitimate ways to improve processing capabilities in the near future. There are minor differences between distributed and parallel computing models as well, however that is beyond the scope off this post.
+
+Another method to get many computers executing programs simultaneously is to connect them through the internet and have a cloud-based program to be implemented in parts by all of the participating systems. This is the basic fundamental behind distributed applications.
+
+For a more detailed account and primer regarding what and how parallel computing works, interested readers may visit [this][4] webpage. For a more detailed study of the topic, for people who have a background in computer science, you may refer to [this][5] website and the accompanying book.
+
+### What are DApps or Distributed Applications
+
+Application that can make use of the capabilities offered by a distributed computing system is called a **distributed application**. The execution and structure of such an application’s back end needs to be carefully designed in order to be compatible with the system.
+
+The blockchain presents an opportunity to store data in a distributed system of participating nodes. Stepping up from this opportunity we can logically build systems and applications running on such a network (think about how you used to download files via the Torrent protocol).
+
+Such decentralized applications present a lot of benefits over conventional applications that typically run from a central server. Some highlights are:
+
+ * DApps run on a network of such participating nodes and any user request is parsed through such network nodes to provide the user with the requested functionality. _**Program is executed on the network instead of a single computer or a server**_.
+ * DApps will have codified methods of filtering through requests and executing them so as to always be fair and transparent when users interact with it. To create a new block of data in the chain, the same has to be approved via a **consensus algorithm** by the participating nodes. This fundamental idea of peer to peer approval applies for DApps as well. This essentially means that DApps cannot by extension of this principle provide different outputs to the same query or input. All users will be given the same priority unless it is explicitly mentioned and all users will receive similar results from the DApp as well. This will prove to be important in developing better industry practices for insurance and finance companies for instance. A DApp that specializes in microlending, for instance, cannot differentiate and offer different interest rates for different borrowers other than their credit history. This also means that all users will eventually end up paying for their required operations uniformly depending on the computational complexity of the task they passed on to the application. For instance, combing through 10000 entries of data will cost proportionately more than combing through say 100. The payment or incentivisation system might be different for different applications and blockchain protocols though.
+ * Most DApps are by default redundant and fail safe. If you’re using a service which is run on a central server, a failure from the server end will freeze the application. Think of a service such as PayPal for instance. If the PayPal server in your immediate region fails due to some reason and somehow the central server cannot re route your request, your payment will not go through. However, even in case multiple participating nodes in the blockchain dies, you will still find the application live and running provided at least one node is live. This presents a use case for applications which are by definition supposed to be live all the time. Emergency services, insurance, communications etc., are some key areas where investors hope such DApps will bring in much needed reliability.
+ * DApps are usually cost-effective owing to them not requiring a central server to be maintained for their functionality. Once they become mainstream, the mean computing cost of running tasks on the same is also supposed to decrease.
+ * DApps will as mentioned exist till eternity at least until one participant is live on the chain. This essentially means that DApps cannot be censored or hacked into bowing and shutting down.
+
+
+
+The above list of features seems very few, however, combine that with all the other capabilities of the blockchain, the advancement of wireless network access, and, the increasing capabilities of millions of smartphones and here we have in our hands nothing less than a paradigm shift in how the apps that we rely on work.
+
+We will look deeper into how DApps function and how you can make your own DApps on the Ethereum blockchain in a proceeding post. To give you an idea of the DApp environment right now, we present 4 carefully chosen examples that are fairly advanced and popular.
+
+##### 1\. BITCOIN (or any Cryptocurrency)
+
+We’re very sure that readers did not expect BITCOIN to be one among a list of applications in this post. The point we’re trying to make here however, is that any cryptocurrency currently running on a blockchain backbone can be termed as a DApp. Cryptocurrencies are in fact the most popular DApp format out there and a revolutionary one at that too.
+
+##### 2\. [MELON][6]
+
+We’ve talked about how asset management can be an easier task utilizing blockchain and [**smart contracts**][7]. **Melon** is a company that aims to provide its users with usable relevant tools to manage and maximize their returns from the assets they own. They specialize in cryptographic assets as of now with plans to turn to real digitized assets in the future.
+
+##### 3\. [Request][8]
+
+**Request** is primarily a ledger system that handles financial transactions, invoicing, and taxation among other things. Working with other compatible databases and systems it is also capable of verifying payer data and statistics. Large corporations which typically have a significant number of defaulting customers will find it easier to handle their operations with a system such as this.
+
+##### 4\. [CryptoKitties][9]
+
+Known the world over as the video game that broke the Ethereum blockchain, **CryptoKitties** is a video game that runs on the Ethereum blockchain. The video game identifies each user individually by building your own digital profiles and gives you unique **virtual cats** in return. The game went viral and due to the sheer number of users it actually managed to slow down the Ethereum blockchain and its transaction capabilities. Transactions took longer than usual with users having to pay significantly extra money for simple transactions even. Concerns regarding scalability of the Ethereum blockchain have been raised by several stakeholders since then.
+
+--------------------------------------------------------------------------------
+
+via: https://www.ostechnix.com/blockchain-2-0-explaining-distributed-computing-and-distributed-applications/
+
+作者:[editor][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.ostechnix.com/author/editor/
+[b]: https://github.com/lujun9972
+[1]: https://www.ostechnix.com/wp-content/uploads/2019/05/Distributed-Computing-720x340.png
+[2]: https://www.ostechnix.com/blockchain-2-0-an-introduction/
+[3]: https://www.ostechnix.com/blockchain-2-0-what-is-ethereum/
+[4]: https://www.techopedia.com/definition/7/distributed-computing-system
+[5]: https://www.distributed-systems.net/index.php/books/distributed-systems-3rd-edition-2017/
+[6]: https://melonport.com/
+[7]: https://www.ostechnix.com/blockchain-2-0-explaining-smart-contracts-and-its-types/
+[8]: https://request.network/en/use-cases/
+[9]: https://www.cryptokitties.co/
diff --git a/sources/tech/20190520 Getting Started With Docker.md b/sources/tech/20190520 Getting Started With Docker.md
new file mode 100644
index 0000000000..873173e4ad
--- /dev/null
+++ b/sources/tech/20190520 Getting Started With Docker.md
@@ -0,0 +1,499 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Getting Started With Docker)
+[#]: via: (https://www.ostechnix.com/getting-started-with-docker/)
+[#]: author: (sk https://www.ostechnix.com/author/sk/)
+
+Getting Started With Docker
+======
+
+![Getting Started With Docker][1]
+
+In our previous tutorial, we have explained **[how to install Docker in Ubuntu][2]** , and how to [**install Docker in CentOS**][3]. Today, we will see the basic usage of Docker. This guide covers the Docker basics, such as how to create a new container, how to run the container, remove a container, how to build your own Docker image from the Container and so on. Let us get started! All steps given below are tested in Ubuntu 18.04 LTS server edition.
+
+### Getting Started With Docker
+
+Before exploring the Docker basics, don’t confuse with Docker images and Docker Containers. As I already explained in the previous tutorial, Docker Image is the file that decides how a Container should behave, and Docker Container is the running or stopped stage of a Docker image.
+
+##### 1\. Search Docker images
+
+We can get the images from either from the registry, for example [**Docker hub**][4], or create our own, For those wondering, Docker hub is cloud hosted place where all Docker users build, test, and save their Docker images.
+
+Docker hub has tens of thousands of Docker images. You can search for the any Docker images with **“docker search”** command.
+
+For instance, to search for docker images based on Ubuntu, run:
+
+```
+$ sudo docker search ubuntu
+```
+
+**Sample output:**
+
+![][5]
+
+To search images based on CentOS, run:
+
+```
+$ sudo docker search ubuntu
+```
+
+To search images for AWS, run:
+
+```
+$ sudo docker search aws
+```
+
+For wordpress:
+
+```
+$ sudo docker search wordpress
+```
+
+Docker hub has almost all kind of images. Be it an operating system, application, or anything, you will find pre-built Docker images in Docker hub. If something you’re looking for is not available, you can build it and make it available for public or keep it private for your own use.
+
+##### 2\. Download Docker image
+
+To download Docker image for Ubuntu OS, run the following command from the Terminal:
+
+```
+$ sudo docker pull ubuntu
+```
+
+The above command will download the latest Ubuntu image from the **Docker hub**.
+
+**Sample output:**
+
+```
+Using default tag: latest
+latest: Pulling from library/ubuntu
+6abc03819f3e: Pull complete
+05731e63f211: Pull complete
+0bd67c50d6be: Pull complete
+Digest: sha256:f08638ec7ddc90065187e7eabdfac3c96e5ff0f6b2f1762cf31a4f49b53000a5
+Status: Downloaded newer image for ubuntu:latest
+```
+
+![][6]
+
+Download docker images
+
+You can also download a specific version of Ubuntu image using command:
+
+```
+$ docker pull ubuntu:18.04
+```
+
+Docker allows us to download any images and start the container regardless of the host OS.
+
+For example, to download CentOS image, run:
+
+```
+$ sudo docker pull centos
+```
+
+All downloaded Docker images will be saved in **/var/lib/docker/** directory.
+
+To view the list of downloaded Docker images, run:
+
+```
+$ sudo docker images
+```
+
+**Sample output:**
+
+```
+REPOSITORY TAG IMAGE ID CREATED SIZE
+ubuntu latest 7698f282e524 14 hours ago 69.9MB
+centos latest 9f38484d220f 2 months ago 202MB
+hello-world latest fce289e99eb9 4 months ago 1.84kB
+```
+
+As you see above, I have downloaded three Docker images – **Ubuntu** , **CentOS** and **hello-world**.
+
+Now, let us go ahead and see how to start or run the containers based on the downloaded images.
+
+##### 3\. Run Docker Containers
+
+We can start the containers in two methods. We can start a container either using its **TAG** or **IMAGE ID**. **TAG** refers to a particular snapshot of the image and the **IMAGE ID** is the corresponding unique identifier for that image.
+
+As you in the above results **“latest”** is the TAG for all containers, and **7698f282e524** is the IMAGE ID of **Ubuntu** Docker image, **9f38484d220f** is the image id of CentOS Docker image and **fce289e99eb9** is the image id of **hello_world** Docker image.
+
+Once you downloaded the Docker images of your choice, run the following command to start a Docker container by using its TAG.
+
+```
+$ sudo docker run -t -i ubuntu:latest /bin/bash
+```
+
+Here,
+
+ * **-t** : Assigns a new Terminal inside the Ubuntu container.
+ * **-i** : Allows us to make an interactive connection by grabbing the standard in (STDIN) of the container.
+ * **ubuntu:latest** : Ubuntu container with TAG “latest”.
+ * **/bin/bash** : BASH shell for the new container.
+
+
+
+Or, you can start the container using IMAGE ID as shown below:
+
+```
+sudo docker run -t -i 7698f282e524 /bin/bash
+```
+
+Here,
+
+ * **7698f282e524** – Image id
+
+
+
+After starting the container, you’ll be landed automatically into the Container’s shell (Command prompt):
+
+![][7]
+
+Docker container’s shell
+
+To return back to the host system’s Terminal (In my case, it is Ubuntu 18.04 LTS) without terminating the Container (guest os), press **CTRL+P** followed by **CTRL+Q**. Now, you’ll be safely return back to your original host computer’s terminal window. Please note that the container is still running in the background and we didn’t terminate it yet.
+
+To view the list running of containers, run the following command:
+
+```
+$ sudo docker ps
+```
+
+**Sample output:**
+
+```
+CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
+32fc32ad0d54 ubuntu:latest "/bin/bash" 7 minutes ago Up 7 minutes modest_jones
+```
+
+![][8]
+
+List running containers
+
+Here,
+
+ * **32fc32ad0d54** – Container ID
+ * **ubuntu:latest** – Docker image
+
+
+
+Please note that **Container ID and Docker image ID are different**.
+
+To list all available ( either running or stopped) containers:
+
+```
+$ sudo docker ps -a
+```
+
+To stop (power off the container) from the host’s shell, run the following command:
+
+```
+$ sudo docker stop
+```
+
+**Example:**
+
+```
+$ sudo docker stop 32fc32ad0d54
+```
+
+To login back to or attach to the running container, just run:
+
+```
+$ sudo docker attach 32fc32ad0d54
+```
+
+As you already know, **32fc32ad0d54** is the container’s ID.
+
+To power off a Container from inside it’s shell by typing the following command:
+
+```
+# exit
+```
+
+You can verify the list of running containers with command:
+
+```
+$ sudo docker ps
+```
+
+##### 4\. Build your custom Docker images
+
+Docker is not just for downloading and using the existing containers. You can create your own custom docker image as well.
+
+To do so, start any one the downloaded container:
+
+```
+$ sudo docker run -t -i ubuntu:latest /bin/bash
+```
+
+Now, you will be in the container’s shell.
+
+Then, install any software or do what ever you want to do in the container.
+
+For example, let us install **Apache web server** in the container.
+
+Once you did all tweaks, installed all necessary software, run the following command to build your custom Docker image:
+
+```
+# apt update
+# apt install apache2
+```
+
+Similarly, install and test any software of your choice in the Container.
+
+Once you all set, return back to the host system’s shell. Do not stop or poweroff the Container. To switch to the host system’s shell without stopping Container, press CTRL+P followed by CTRL+Q.
+
+From your host computer’s shell, run the following command to find the container ID:
+
+```
+$ sudo docker ps
+```
+
+Finally, create a Docker image of the running Container using command:
+
+```
+$ sudo docker commit 3d24b3de0bfc ostechnix/ubuntu_apache
+```
+
+**Sample Output:**
+
+```
+sha256:ce5aa74a48f1e01ea312165887d30691a59caa0d99a2a4aa5116ae124f02f962
+```
+
+Here,
+
+ * **3d24b3de0bfc** – Ubuntu container ID. As you already, we can
+ * **ostechnix** – Name of the user who created the container.
+ * **ubuntu_apache** – Name of the docker image created by user ostechnix.
+
+
+
+Let us check whether the new Docker image is created or not with command:
+
+```
+$ sudo docker images
+```
+
+**Sample output:**
+
+```
+REPOSITORY TAG IMAGE ID CREATED SIZE
+ostechnix/ubuntu_apache latest ce5aa74a48f1 About a minute ago 191MB
+ubuntu latest 7698f282e524 15 hours ago 69.9MB
+centos latest 9f38484d220f 2 months ago 202MB
+hello-world latest fce289e99eb9 4 months ago 1.84kB
+```
+
+![][9]
+
+List docker images
+
+As you see in the above output, the new Docker image has been created in our localhost system from the running Container.
+
+Now, you can create a new Container from the newly created Docker image as usual suing command:
+
+```
+$ sudo docker run -t -i ostechnix/ubuntu_apache /bin/bash
+```
+
+##### 5\. Removing Containers
+
+Once you’re done all R&D with Docker containers, you can delete if you don’t want them anymore.
+
+To do so, First we have to stop (power off) the running Containers.
+
+Let us find out the running containers with command:
+
+```
+$ sudo docker ps
+```
+
+**Sample output:**
+
+```
+CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
+3d24b3de0bfc ubuntu:latest "/bin/bash" 28 minutes ago Up 28 minutes goofy_easley
+```
+
+Stop the running container by using it’s ID:
+
+```
+$ sudo docker stop 3d24b3de0bfc
+```
+
+Now, delete the container using command:
+
+```
+$ sudo docker rm 3d24b3de0bfc
+```
+
+Similarly, stop all containers and delete them if they are no longer required.
+
+Deleting multiple containers one by one can be a tedious task. So, we can delete all stopped containers in one go, just run:
+
+```
+$ sudo docker container prune
+```
+
+Type **“Y”** and hit ENTER key to delete the containers.
+
+```
+WARNING! This will remove all stopped containers.
+Are you sure you want to continue? [y/N] y
+Deleted Containers:
+32fc32ad0d5445f2dfd0d46121251c7b5a2aea06bb22588fb2594ddbe46e6564
+5ec614e0302061469ece212f0dba303c8fe99889389749e6220fe891997f38d0
+
+Total reclaimed space: 5B
+```
+
+This command will work only with latest Docker versions.
+
+##### 6\. Removing Docker images
+
+Once you removed containers, you can delete the Docker images that you no longer need.
+
+To find the list of the Downloaded Docker images:
+
+```
+$ sudo docker images
+```
+
+**Sample output:**
+
+```
+REPOSITORY TAG IMAGE ID CREATED SIZE
+ostechnix/ubuntu_apache latest ce5aa74a48f1 5 minutes ago 191MB
+ubuntu latest 7698f282e524 15 hours ago 69.9MB
+centos latest 9f38484d220f 2 months ago 202MB
+hello-world latest fce289e99eb9 4 months ago 1.84kB
+```
+
+As you see above, we have three Docker images in our host system.
+
+Let us delete them by using their IMAGE id:
+
+```
+$ sudo docker rmi ce5aa74a48f1
+```
+
+**Sample output:**
+
+```
+Untagged: ostechnix/ubuntu_apache:latest
+Deleted: sha256:ce5aa74a48f1e01ea312165887d30691a59caa0d99a2a4aa5116ae124f02f962
+Deleted: sha256:d21c926f11a64b811dc75391bbe0191b50b8fe142419f7616b3cee70229f14cd
+```
+
+##### Troubleshooting
+
+Docker won’t let you to delete the Docker images if they are used by any running or stopped containers.
+
+For example, when I try to delete a Docker Image with ID **b72889fa879c** , from one of my old Ubuntu server. I got the following error:
+
+```
+Error response from daemon: conflict: unable to delete b72889fa879c (must be forced) - image is being used by stopped container dde4dd285377
+```
+
+This is because the Docker image that you want to delete is currently being used by another Container.
+
+So, let us check the running Container using command:
+
+```
+$ sudo docker ps
+```
+
+**Sample output:**
+
+![][10]
+
+Oops! There is no running container.
+
+Let us again check for all containers (Running and stopped) with command:
+
+```
+$ sudo docker ps -a
+```
+
+**Sample output:**
+
+![][11]
+
+As you see there are still some stopped containers are using one of the Docker images. So, let us delete all of the containers.
+
+**Example:**
+
+```
+$ sudo docker rm 12e892156219
+```
+
+Similarly, remove all containers as shown above using their respective container’s ID.
+
+Once you deleted all Containers, finally remove the Docker images.
+
+**Example:**
+
+```
+$ sudo docker rmi b72889fa879c
+```
+
+That’s it. Let us verify is there any other Docker images in the host with command:
+
+```
+$ sudo docker images
+```
+
+For more details, refer the official resource links given at the end of this guide or drop a comment in the comment section below.
+
+Also, download and use the following Docker Ebooks to get to know more about it.
+
+** **Download** – [**Free eBook: “Docker Containerization Cookbook”**][12]
+
+** **Download** – [**Free Guide: “Understanding Docker”**][13]
+
+** **Download** – [**Free Guide: “What is Docker and Why is it So Popular?”**][14]
+
+** **Download** – [**Free Guide: “Introduction to Docker”**][15]
+
+** **Download** – [**Free Guide: “Docker in Production”**][16]
+
+And, that’s all for now. Hope you a got the basic idea about Docker usage.
+
+More good stuffs to come. Stay tuned!
+
+Cheers!!
+
+--------------------------------------------------------------------------------
+
+via: https://www.ostechnix.com/getting-started-with-docker/
+
+作者:[sk][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.ostechnix.com/author/sk/
+[b]: https://github.com/lujun9972
+[1]: https://www.ostechnix.com/wp-content/uploads/2016/04/docker-basics-720x340.png
+[2]: http://www.ostechnix.com/install-docker-ubuntu/
+[3]: https://www.ostechnix.com/install-docker-centos/
+[4]: https://hub.docker.com/
+[5]: http://www.ostechnix.com/wp-content/uploads/2016/04/Search-Docker-images.png
+[6]: http://www.ostechnix.com/wp-content/uploads/2016/04/Download-docker-images.png
+[7]: http://www.ostechnix.com/wp-content/uploads/2016/04/Docker-containers-shell.png
+[8]: http://www.ostechnix.com/wp-content/uploads/2016/04/List-running-containers.png
+[9]: http://www.ostechnix.com/wp-content/uploads/2016/04/List-docker-images.png
+[10]: http://www.ostechnix.com/wp-content/uploads/2016/04/sk@sk-_005-1-1.jpg
+[11]: http://www.ostechnix.com/wp-content/uploads/2016/04/sk@sk-_006-1.jpg
+[12]: https://ostechnix.tradepub.com/free/w_java39/prgm.cgi?a=1
+[13]: https://ostechnix.tradepub.com/free/w_pacb32/prgm.cgi?a=1
+[14]: https://ostechnix.tradepub.com/free/w_pacb31/prgm.cgi?a=1
+[15]: https://ostechnix.tradepub.com/free/w_pacb29/prgm.cgi?a=1
+[16]: https://ostechnix.tradepub.com/free/w_pacb28/prgm.cgi?a=1
diff --git a/sources/tech/20190520 How To Map Oracle ASM Disk Against Physical Disk And LUNs In Linux.md b/sources/tech/20190520 How To Map Oracle ASM Disk Against Physical Disk And LUNs In Linux.md
new file mode 100644
index 0000000000..4e9df8a0ff
--- /dev/null
+++ b/sources/tech/20190520 How To Map Oracle ASM Disk Against Physical Disk And LUNs In Linux.md
@@ -0,0 +1,229 @@
+[#]: collector: (lujun9972)
+[#]: translator: ( )
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (How To Map Oracle ASM Disk Against Physical Disk And LUNs In Linux?)
+[#]: via: (https://www.2daygeek.com/shell-script-map-oracle-asm-disks-physical-disk-lun-in-linux/)
+[#]: author: (Magesh Maruthamuthu https://www.2daygeek.com/author/magesh/)
+
+How To Map Oracle ASM Disk Against Physical Disk And LUNs In Linux?
+======
+
+You might already know about ASM, Device Mapper Multipathing (DM-Multipathing) if you are working quit long time as a Linux administrator.
+
+There are multiple ways to check these information. However, you will be getting part of the information when you use the default commands.
+
+It doesn’t show you all together in the single output.
+
+If you want to check all together in the single output then we need to write a small shell script to achieve this.
+
+We have added two shell script to get those information and you can use which one is suitable for you.
+
+Major and Minor numbers can be used to match the physical devices in Linux system.
+
+This tutorial helps you to find which ASM disk maps to which Linux partition or DM Device.
+
+If you want to **[manage Oracle ASM disks][1]** (such as start, enable, stop, list, query and etc) then navigate to following URL.
+
+### What Is ASMLib?
+
+ASMLib is an optional support library for the Automatic Storage Management feature of the Oracle Database.
+
+Automatic Storage Management (ASM) simplifies database administration and greatly reduces kernel resource usage (e.g. the number of open file descriptors).
+
+It eliminates the need for the DBA to directly manage potentially thousands of Oracle database files, requiring only the management of groups of disks allocated to the Oracle Database.
+
+ASMLib allows an Oracle Database using ASM more efficient and capable access to the disk groups it is using.
+
+### What Is Device Mapper Multipathing (DM-Multipathing)?
+
+Device Mapper Multipathing or DM-multipathing is a Linux host-side native multipath tool, which allows us to configure multiple I/O paths between server nodes and storage arrays into a single device by utilizing device-mapper.
+
+### Method-1 : Shell Script To Map ASM Disks To Physical Devices?
+
+In this shell script we are using for loop to achieve the results.
+
+Also, we are not using any ASM related commands.
+
+```
+# vi asm_disk_mapping.sh
+
+#!/bin/bash
+
+ls -lh /dev/oracleasm/disks > /tmp/asmdisks1.txt
+
+for ASMdisk in `cat /tmp/asmdisks1.txt | tail -n +2 | awk '{print $10}'`
+
+do
+
+minor=$(grep -i "$ASMdisk" /tmp/asmdisks1.txt | awk '{print $6}')
+
+major=$(grep -i "$ASMdisk" /tmp/asmdisks1.txt | awk '{print $5}' | cut -d"," -f1)
+
+phy_disk=$(ls -l /dev/* | grep ^b | grep "$major, *$minor" | awk '{print $10}')
+
+echo "ASM disk $ASMdisk is associated on $phy_disk [$major, $minor]"
+
+done
+```
+
+Set an executable permission to port_scan.sh file.
+
+```
+$ chmod +x asm_disk_mapping.sh
+```
+
+Finally run the script to achieve this.
+
+```
+# sh asm_disk_mapping.sh
+
+ASM disk MP4E6D_DATA01 is associated on /dev/dm-1
+3600a0123456789012345567890234q11 [253, 1]
+ASM disk MP4E6E_DATA02 is associated on /dev/dm-2
+3600a0123456789012345567890234q12 [253, 2]
+ASM disk MP4E6F_DATA03 is associated on /dev/dm-3
+3600a0123456789012345567890234q13 [253, 3]
+ASM disk MP4E70_DATA04 is associated on /dev/dm-4
+3600a0123456789012345567890234q14 [253, 4]
+ASM disk MP4E71_DATA05 is associated on /dev/dm-5
+3600a0123456789012345567890234q15 [253, 5]
+ASM disk MP4E72_DATA06 is associated on /dev/dm-6
+3600a0123456789012345567890234q16 [253, 6]
+ASM disk MP4E73_DATA07 is associated on /dev/dm-7
+3600a0123456789012345567890234q17 [253, 7]
+```
+
+### Method-2 : Shell Script To Map ASM Disks To Physical Devices?
+
+In this shell script we are using while loop to achieve the results.
+
+Also, we are using ASM related commands.
+
+```
+# vi asm_disk_mapping_1.sh
+
+#!/bin/bash
+
+/etc/init.d/oracleasm listdisks > /tmp/asmdisks.txt
+
+while read -r ASM_disk
+
+do
+
+major="$(/etc/init.d/oracleasm querydisk -d $ASM_disk | awk -F[ '{ print $2 }'| awk -F] '{ print $1 }' | cut -d"," -f1)"
+
+minor="$(/etc/init.d/oracleasm querydisk -d $ASM_disk | awk -F[ '{ print $2 }'| awk -F] '{ print $1 }' | cut -d"," -f2)"
+
+phy_disk="$(ls -l /dev/* | grep ^b | grep "$major, *$minor" | awk '{ print $10 }')"
+
+echo "ASM disk $ASM_disk is associated on $phy_disk [$major, $minor]"
+
+done < /tmp/asmdisks.txt
+```
+
+Set an executable permission to port_scan.sh file.
+
+```
+$ chmod +x asm_disk_mapping_1.sh
+```
+
+Finally run the script to achieve this.
+
+```
+# sh asm_disk_mapping_1.sh
+
+ASM disk MP4E6D_DATA01 is associated on /dev/dm-1
+3600a0123456789012345567890234q11 [253, 1]
+ASM disk MP4E6E_DATA02 is associated on /dev/dm-2
+3600a0123456789012345567890234q12 [253, 2]
+ASM disk MP4E6F_DATA03 is associated on /dev/dm-3
+3600a0123456789012345567890234q13 [253, 3]
+ASM disk MP4E70_DATA04 is associated on /dev/dm-4
+3600a0123456789012345567890234q14 [253, 4]
+ASM disk MP4E71_DATA05 is associated on /dev/dm-5
+3600a0123456789012345567890234q15 [253, 5]
+ASM disk MP4E72_DATA06 is associated on /dev/dm-6
+3600a0123456789012345567890234q16 [253, 6]
+ASM disk MP4E73_DATA07 is associated on /dev/dm-7
+3600a0123456789012345567890234q17 [253, 7]
+```
+
+### How To List Oracle ASM Disks?
+
+If you would like to list only Oracle ASM disk then use the below command to List available/created Oracle ASM disks in Linux.
+
+```
+# oracleasm listdisks
+
+ASM_Disk1
+ASM_Disk2
+ASM_Disk3
+ASM_Disk4
+ASM_Disk5
+ASM_Disk6
+ASM_Disk7
+```
+
+### How To List Oracle ASM Disks Against Major And Minor Number?
+
+If you would like to map Oracle ASM disks against major and minor number then use the below commands to List available/created Oracle ASM disks in Linux.
+
+```
+# for ASMdisk in `oracleasm listdisks`; do /etc/init.d/oracleasm querydisk -d $ASMdisk; done
+
+Disk "ASM_Disk1" is a valid Disk on device [253, 1]
+Disk "ASM_Disk2" is a valid Disk on device [253, 2]
+Disk "ASM_Disk3" is a valid Disk on device [253, 3]
+Disk "ASM_Disk4" is a valid Disk on device [253, 4]
+Disk "ASM_Disk5" is a valid Disk on device [253, 5]
+Disk "ASM_Disk6" is a valid Disk on device [253, 6]
+Disk "ASM_Disk7" is a valid Disk on device [253, 7]
+```
+
+Alternatively, we can get the same results using the ls command.
+
+```
+# ls -lh /dev/oracleasm/disks
+
+total 0
+brw-rw---- 1 oracle oinstall 253, 1 May 19 14:44 ASM_Disk1
+brw-rw---- 1 oracle oinstall 253, 2 May 19 14:44 ASM_Disk2
+brw-rw---- 1 oracle oinstall 253, 3 May 19 14:44 ASM_Disk3
+brw-rw---- 1 oracle oinstall 253, 4 May 19 14:44 ASM_Disk4
+brw-rw---- 1 oracle oinstall 253, 5 May 19 14:44 ASM_Disk5
+brw-rw---- 1 oracle oinstall 253, 6 May 19 14:44 ASM_Disk6
+brw-rw---- 1 oracle oinstall 253, 7 May 19 14:44 ASM_Disk7
+```
+
+### How To List Physical Disks Against LUNs?
+
+If you would like to map physical disks against LUNs then use the below command.
+
+```
+# multipath -ll | grep NETAPP
+
+3600a0123456789012345567890234q11 dm-1 NETAPP,LUN C-Mode
+3600a0123456789012345567890234q12 dm-2 NETAPP,LUN C-Mode
+3600a0123456789012345567890234q13 dm-3 NETAPP,LUN C-Mode
+3600a0123456789012345567890234q14 dm-4 NETAPP,LUN C-Mode
+3600a0123456789012345567890234q15 dm-5 NETAPP,LUN C-Mode
+3600a0123456789012345567890234q16 dm-6 NETAPP,LUN C-Mode
+3600a0123456789012345567890234q17 dm-7 NETAPP,LUN C-Mode
+```
+
+--------------------------------------------------------------------------------
+
+via: https://www.2daygeek.com/shell-script-map-oracle-asm-disks-physical-disk-lun-in-linux/
+
+作者:[Magesh Maruthamuthu][a]
+选题:[lujun9972][b]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.2daygeek.com/author/magesh/
+[b]: https://github.com/lujun9972
+[1]: https://www.2daygeek.com/start-stop-restart-enable-reload-oracleasm-service-linux-create-scan-list-query-rename-delete-configure-oracleasm-disk/
diff --git a/translated/talk/20180809 Two Years With Emacs as a CEO (and now CTO).md b/translated/talk/20180809 Two Years With Emacs as a CEO (and now CTO).md
deleted file mode 100644
index b25721a59b..0000000000
--- a/translated/talk/20180809 Two Years With Emacs as a CEO (and now CTO).md
+++ /dev/null
@@ -1,87 +0,0 @@
-[#]: collector: (lujun9972)
-[#]: translator: (oneforalone)
-[#]: reviewer: ( )
-[#]: publisher: ( )
-[#]: url: ( )
-[#]: subject: (Two Years With Emacs as a CEO (and now CTO))
-[#]: via: (https://www.fugue.co/blog/2018-08-09-two-years-with-emacs-as-a-cto.html)
-[#]: author: (Josh Stella https://www.fugue.co/blog/author/josh-stella)
-
-作为 CEO 使用 Emacs 的两年经验之谈(现任 CTO)
-======
-
-两年前,我写了一篇[博客][1],并取得了一些反响。这让我有点受宠若惊。那篇博客写的是我准备将 Emacs 作为我的主办公软件,当时我还是 CEO,现在已经转为 CTO 了。现在回想起来,我发现我之前不是做程序员就是做软件架构师,而且那时我也喜欢用 Emacs 写代码。重新考虑 Emacs 是一次很不错的尝试,但我不太清楚具体该怎么实现。在网上,那篇博客也是褒贬不一,但是还是有数万的阅读量,所以总的来说,我写的还是不错的。在 [Reddit][2] 和 [HackerNews][3] 上有些令人哭笑不得的回复,说我的手会变形,或者说我会因白色的背景而近视。在这里我可以很肯定的回答 —— 完全没有这回事,相反,我的手腕还因此变得更灵活了。还有一些人担心,说使用 Emacs 会耗费一个 CEO 的精力。把 Fugue 从在家得到的想法变成强大的产品,并有一大批忠实的顾客,我觉得 Emacs 可以让你从复杂的事务中解脱出来。我现在还在用白色的背景。
-
-近段时间那篇博客又被翻出来了,并发到了 [HackerNews][4] 上。我收到了大量的跟帖者问我现在怎么样了,所以我写这篇博客来回应他们。在本文中,我还将重点讨论为什么 Emacs 和函数式编程有很高的相关性,以及我们是怎样使用 Emacs 来开发我们的产品 —— Fugue,一个使用函数式编程的自动化的云计算平台。由于我收到了很多反馈,比较有用的是一些细节的详细程度和有关背景色的注解,因此这篇博客比较长,而我确实也需要费点精力来解释我的想法,但这篇文章的主要内容还是反映了我担任 CEO 时处理的事务。而我想在之后更频繁地用 Emacs 写代码,所以需要提前做一些准备。一如既往,本文因人而异,后果自负。
-
-### 意外之喜
-
-我大部分时间都在不断得处理公司内外沟通。交流是解决问题的唯一方法,但也是反思及思考困难或是复杂问题的敌人。对我来说,作为创业公司的 CEO,最需要的是有时间专注工作而不别打扰。一旦开始投入时间来学习一些命令,Emacs 就很适合这种情况。其他的应用弹出提示,但是配置好了的 Emacs 就可以完全的忽略掉,无论是视觉上还是精神上。除非你想修改,否则的话他不会变,而且没有比空白屏幕和漂亮的字体更干净的界面了。在我不断被打扰的情况下,这种简洁让我能够专注于我在想什么,而不是电脑。好的程序能够默默地对电脑的进行访问。
-
-一些人指出,原来的帖子既是对现代图形界面的批判,也是对 Emacs 的赞许。我既不赞同,也不否认。现代的接口,特别是那些以应用程序为中心的方法(相对于以内容为中心的方法),既不是以用户为中心的,也不是面向进程的。Emacs 避免了这种错误,这也是我如此喜欢它的部分原因,而它也带来了其他优点。Emacs 是进入计算机本身的入口,这打开了一扇新世界的大门。它的核心是发现和创造属于自己的道路,对我来说这就是创造的定义。现代电脑的悲哀之处在于,它很大程度上是由带有闪亮界面的黑盒组成的,这些黑盒提供的是瞬间的满足感,而不是真正的满足感。这让我们变成了消费者,而不是技术的创造者。我不在乎你是谁或者你的背景是什么;你可以理解你的电脑,你可以用它做东西。它很有趣,令人满意,而且不是你想的那么难学!
-
-我们常常低估了环境对我们心理的影响。Emacs 给人一种平静和自由的感觉,而不是紧迫感、烦恼或兴奋——后者是思想和沉思的敌人。我喜欢那些持久的,不碍事的东西,当我花时间去关注它们的时候,它们会给我带来真知灼见。Emacs 满足我的所有这些标准。我每天都使用 Emacs 来创建内容,我也很高兴我很少考虑它。Emacs 确实有一个学习曲线,但不会比学自行车更陡,而且一旦你完成了它,你会得到相应的回报,你就不必再去想它了,它赋予你一种其他工具所没有的自由感。这是一个优雅的工具,来自一个更加文明的时代。我很高兴我们步入了另一个计算机时代,而 Emacs 也将越来越受欢迎。
-
-### 放弃用 Emacs 规划日程及处理待办事项
-
-在原来的文章中,我花了一些时间介绍如何使用 Org 模式来规划日程。我放弃了使用 Org 模式来处理待办事项之类的,因为我每天都有很多会要开,很多电话要打, 而我也不能让其他人来适应我选的工具,我也没有时间将事务转换或是自动移动到 Org 上 。我们主要是用 Mac shop,使用谷歌日历等,原生的 Mac OS/iOS 工具可以很好的进行协作。我还有支比较旧的笔用来在会议中做笔记,因为我发现在会议中使用笔记本电脑或者说键盘很不礼貌,而且这也限制了我的聆听和思考。因此,我基本上放弃了用 Org 帮我规划日程或安排生活的想法。当然,Org 模式对其他的方面也很有用,它是我编写文档的首选,包括本文。换句话说,我与其作者背道而驰,但它在这方面做得很好。我也希望有一天也有人这么说我们在 Fugue 的工作。
-
-### Emacs 在 Fugue 已经扩散
-
-我在上篇博客就有说,你可能会喜欢 Emacs,也可能不会。因此,当 Fugue 的文档组将 Emacs 作为标准工具时,我是有点担心的,因为我觉得他们可能是受了我的影响。几年后,我确信他们做出了个正确的选择。那个组长是一个很聪明的程序员,但是那两个编写文档的人却没有怎么接触过技术。我想,如果这是一个经理强加错误工具的案例,我就会得到投诉并去解决,因为 Fugue 有反威权文化,大家不怕惹麻烦,包括我在内。之前的组长去年辞职了,但[文档组][5]现在有了一个灵活的集成的 CI/CD 工具链。并且文档组的人已经成为了 Emacs 的忠实用户。Emacs 有一条学习曲线,但即使很陡,也不会那么陡,翻过后对生产力和总体幸福感都有益。这也提醒我们,学文科的人在技术方面和程序员一样聪明,一样能干,也许不应该那么倾向于技术而产生派别歧视。
-
-### 我的手腕得益于我的决定
-
-上世纪80年代中期以来,我每天花12个小时左右在电脑前工作,这给我的手腕(以及后背)造成了很大的损伤,在此我强烈安利 Tag Capisco 的椅子。Emacs 和人机工程学键盘的结合让手腕的 [RSI][10](Repetitive Strain Injury/Repetitive Motion Syndrome) 问题消失了,我已经一年多没有想过这种问题了。在那之前,我的手腕每天都会疼,尤其是右手,如果你也遇到这种问题,你就知道这很让人分心和担心。有几个人问过键盘和鼠标的问题,如果你感兴趣的话,我现在用的是[这款键盘][6]。虽然在过去的几年里我主要使用的是真正符合人体工程学的键盘。我已经换成现在的键盘有几个星期了,而且我爱死它了。键帽的形状很神奇,因为你不用看就能知道自己在哪里,而拇指键设计的很合理,尤其是对于 Emacs, Control和Meta是你的固定伙伴。不要再用小指做高度重复的任务了!
-
-我使用鼠标的次数比使用 Office 和 IDE 时要少得多,这对我有很大帮助,但我还是会用鼠标。我一直在使用外观相当过时,但功能和人体工程学明显优越的轨迹球,这是名副其实的。
-
-撇开具体的工具不谈,最重要的一点是,事实证明,一个很棒的键盘,再加上避免使用鼠标,在减少身体的磨损方面很有效。Emacs 是这方面的核心,因为我不需要在菜单上滑动鼠标来完成任务,而且导航键就在我的手指下面。我肯定,手离开标准打字姿势会给我的肌腱造成很大的压力。这因人而异,我也不是医生。
-
-### 还没完成大部分配置……
-
-有人说我会在界面配置上花很多的时间。我想验证下他们说的对不对,所以我留意了下。我不仅让配置基本上不受影响,关注这个问题还让我意识到我使用的其他工具是多么的耗费我的精力和时间。Emacs 是我用过的维护成本最低的软件。Mac OS 和 Windows 一直要求我更新它,但在我我看来,这远没有 Adobe 套件和 Office 的更新的困恼那么大。我只是偶尔更新 Emacs,但也没什么变化,所以对我来说,它基本上是一个接近于零成本的操作,我高兴什么时候跟新就什么时候更新。
-
-有一点然你们失望了,因为许多人想知道我为跟上 Emacs 社区的更新及其输出所做的事情,但是在过去的两年中,我只在配置中添加了一些内容。我认为也是成功的,因为 Emacs 只是一个工具,而不是我的爱好。也就是说,如果你想和我分享,我很乐意听到新的东西。
-
-### 期望实现控制云端
-
-我们在 Fugue 有很多 Emacs 的粉丝,所以我们有一段时间在用 [Ludwing 模式][7]。Ludwig 是我们用于自动化云基础设施和服务的声明式、功能性的 DSL。最近,Alex Schoof 利用飞机上和晚上的时间来构建 fugue 模式,它在 Fugue CLI 上充当 Emacs 控制台。要是你不熟悉 Fugue,我们会开发一个云自动化和管理工具,它利用函数式编程为用户提供与云的 api 交互的良好体验。它做的不止这些,但它也做了。fugue 模式很酷的原因有很多。它有一个不断报告云基础设备状态的缓冲区,而由于我经常修改这些设备,所以我可以快速看到编码的效果。Fugue 将云工作负载当成进程处理,fugue 模式非常类似于云工作负载的 top 模式。它还允许我执行一些操作,比如创建新的设备或删除过期的东西,而且也不需要太多输入。Fugue 模式只是个雏形,但它非常方便,而我现在也经常使用它。
-
-![fugue-mode-edited.gif][8]
-
-### 模式及监听
-
-我添加了一些模式和集成插件,但并不是真正用于 CEO 工作。我喜欢在周末时写写 Haskell 和 Scheme,所以我添加了 haskell 模式和 geiser。Emacs 对具有 REPL 的语言很友好,因为你可以在不同的窗口中运行不同的模式,包括 REPL 和 shell。Geiser 和 Scheme 很配,要是你还没有这样做过,那么用 SICP 工作也不失为一种乐趣,在这个有很多土鳖编程的例子的时代,这可能是一种启发。安装 MIT Scheme 和 geiser,你就会感觉有点像 lore 的符号环境。
-
-这就引出了我在 15 年的文章中没有提到的另一个话题:屏幕管理。我喜欢使用用竖屏来写作,我在家里和我的主要办公室都有这个配置。对于编程或混合使用,我喜欢 fuguer 提供的新的超宽显示器。对于宽屏,我更喜欢将屏幕分成三列,中间是主编辑缓冲区,左边是水平分隔的 shell 和 fugue 模式缓冲区,右边是文档缓冲区或另一个或两个编辑缓冲区。这个很简单,首先按 'Ctl-x 3' 两次,然后使用 'Ctl-x =' 使窗口的宽度相等。这将提供三个相等的列,你也可以使用 'Ctl-x 2' 进行水平分割。以下是我的截图。
-
-![Emacs Screen Shot][9]
-
-### 最后一篇 CEO/Emacs 文章……
-
-首先,我现在是 Fugue 的 CTO,其次我也想要写一些其他方面的博客,而我现在刚好有时间。我还打算写些更深入的东西,比如说函数式编程、基础结构类型安全,以及我们即将推出一些的新功能,还有一些关于 Fugue 在云上可以做什么。
-
---------------------------------------------------------------------------------
-
-via: https://www.fugue.co/blog/2018-08-09-two-years-with-emacs-as-a-cto.html
-
-作者:[Josh Stella][a]
-选题:[lujun9972][b]
-译者:[译者ID](https://github.com/oneforalone)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]: https://www.fugue.co/blog/author/josh-stella
-[b]: https://github.com/lujun9972
-[1]: https://blog.fugue.co/2015-11-11-guide-to-emacs.html
-[2]: https://www.reddit.com/r/emacs/comments/7efpkt/a_ceos_guide_to_emacs/
-[3]: https://news.ycombinator.com/item?id=10642088
-[4]: https://news.ycombinator.com/item?id=15753150
-[5]: https://docs.fugue.co/
-[6]: https://shop.keyboard.io/
-[7]: https://github.com/fugue/ludwig-mode
-[8]: https://www.fugue.co/hubfs/Imported_Blog_Media/fugue-mode-edited-1.gif
-[9]: https://www.fugue.co/hs-fs/hubfs/Emacs%20Screen%20Shot.png?width=929&name=Emacs%20Screen%20Shot.png
-[10]: https://baike.baidu.com/item/RSI/21509642
diff --git a/translated/tech/20180429 The Easiest PDO Tutorial (Basics).md b/translated/tech/20180429 The Easiest PDO Tutorial (Basics).md
new file mode 100644
index 0000000000..df3e8581e3
--- /dev/null
+++ b/translated/tech/20180429 The Easiest PDO Tutorial (Basics).md
@@ -0,0 +1,170 @@
+最简单的 PDO 教程(基础知识)
+======
+
+
+
+大约 80% 的 Web 应用程序由 PHP 提供支持。类似地,SQL 也是如此。PHP 5.5 版本之前,我们有用于访问 mysql 数据库的 **mysql_** 命令,但由于安全性不足,它们最终被弃用。
+
+**这发生在 2013 年的 PHP 5.5 上,我写这篇文章的时间是 2018 年,PHP 版本为 7.2。mysql_** 的弃用带来了访问数据库的两种主要方法:**mysqli** 和 **PDO** 库。
+
+虽然 mysqli 库是官方指定的,但由于 mysqli 只能支持 mysql 数据库,而 PDO 可以支持 12 种不同类型的数据库驱动程序,因此 PDO 获得了更多的赞誉。此外,PDO 还有其它一些特性,使其成为大多数开发人员的更好选择。你可以在下表中看到一些特性比较:
+
+| | PDO | MySQLi
+---|---|---
+| **数据库支持** | 12 种驱动 | 只有 MySQL
+| **范例** | OOP | 过程 + OOP
+| **预处理语句(客户端侧)** | Yes | No
+| **命名参数** | Yes | No
+
+现在我想对于大多数开发人员来说,PDO 是首选的原因已经很清楚了。所以让我们深入研究它,并希望在本文中尽量涵盖关于 PDO 你需要的了解的。
+
+### 连接
+
+第一步是连接到数据库,由于 PDO 是完全面向对象的,所以我们将使用 PDO 类的实例。
+
+我们要做的第一件事是定义主机、数据库名称、用户名、密码和数据库字符集。
+
+`$host = 'localhost';`
+
+`$db = 'theitstuff';`
+
+`$user = 'root';`
+
+`$pass = 'root';`
+
+`$charset = 'utf8mb4';`
+
+`$dsn = "mysql:host=$host;dbname=$db;charset=$charset";`
+
+`$conn = new PDO($dsn, $user, $pass);`
+
+之后,正如你在上面的代码中看到的,我们创建了 **DSN** 变量,DSN 变量只是一个保存数据库信息的变量。对于一些在外部服务器上运行 mysql 的人,你还可以通过提供一个 **port=$port_number** 来调整端口号。
+
+最后,你可以创建一个 PDO 类的实例,我使用了 **\$conn** 变量,并提供了 **\$dsn、\$user、\$pass** 参数。如果你遵循这些步骤,你现在应该有一个名为 $conn 的对象,它是 PDO 连接类的一个实例。现在是时候进入数据库并运行一些查询。
+
+### 一个简单的 SQL 查询
+
+现在让我们运行一个简单的 SQL 查询。
+
+`$tis = $conn->query('SELECT name, age FROM students');`
+
+`while ($row = $tis->fetch())`
+
+`{`
+
+`echo $row['name']."\t";`
+
+`echo $row['age'];`
+
+`echo "
";`
+
+`}`
+
+这是使用 PDO 运行查询的最简单形式。我们首先创建了一个名为 **tis(TheITStuff 的缩写 )** 的变量,然后你可以看到我们使用了创建的 $conn 对象中的查询函数。
+
+然后我们运行一个 while 循环并创建了一个 **$row** 变量来从 **$tis** 对象中获取内容,最后通过调用列名来显示每一行。
+
+很简单,不是吗?现在让我们来看看预处理语句。
+
+### 预处理语句
+
+预处理语句是人们开始使用 PDO 的主要原因之一,因为它准备了可以阻止 SQL 注入的语句。
+
+有两种基本方法可供使用,你可以使用位置参数或命名参数。
+
+#### 位置参数
+
+让我们看一个使用位置参数的查询示例。
+
+`$tis = $conn->prepare("INSERT INTO STUDENTS(name, age) values(?, ?)");`
+
+`$tis->bindValue(1,'mike');`
+
+`$tis->bindValue(2,22);`
+
+`$tis->execute();`
+
+在上面的例子中,我们放置了两个问号,然后使用 **bindValue()** 函数将值映射到查询中。这些值绑定到语句问号中的位置。
+
+我还可以使用变量而不是直接提供值,通过使用 **bindParam()** 函数相同例子如下:
+
+`$name='Rishabh'; $age=20;`
+
+`$tis = $conn->prepare("INSERT INTO STUDENTS(name, age) values(?, ?)");`
+
+`$tis->bindParam(1,$name);`
+
+`$tis->bindParam(2,$age);`
+
+`$tis->execute();`
+
+### 命名参数
+
+命名参数也是预处理语句,它将值/变量映射到查询中的命名位置。由于没有位置绑定,因此在多次使用相同变量的查询中非常有效。
+
+`$name='Rishabh'; $age=20;`
+
+`$tis = $conn->prepare("INSERT INTO STUDENTS(name, age) values(:name, :age)");`
+
+`$tis->bindParam(':name', $name);`
+
+`$tis->bindParam(':age', $age);`
+
+`$tis->execute();`
+
+你可以注意到,唯一的变化是我使用 **:name** 和 **:age** 作为占位符,然后将变量映射到它们。冒号在参数之前使用,让 PDO 知道该位置是一个变量,这非常重要。
+
+你也可以类似地使用 **bindValue()** 来使用命名参数直接映射值。
+
+### 获取数据
+
+PDO 在获取数据时非常丰富,它实际上提供了许多格式来从数据库中获取数据。
+
+你可以使用 **PDO::FETCH_ASSOC** 来获取关联数组,**PDO::FETCH_NUM** 来获取数字数组,使用 **PDO::FETCH_OBJ** 来获取对象数组。
+
+`$tis = $conn->prepare("SELECT * FROM STUDENTS");`
+
+`$tis->execute();`
+
+`$result = $tis->fetchAll(PDO::FETCH_ASSOC);`
+
+你可以看到我使用了 **fetchAll**,因为我想要所有匹配的记录。如果只需要一行,你可以简单地使用 **fetch**。
+
+现在我们已经获取了数据,现在是时候循环它了,这非常简单。
+
+`foreach($result as $lnu){`
+
+`echo $lnu['name'];`
+
+`echo $lnu['age']."
";`
+
+`}`
+
+你可以看到,因为我请求了关联数组,所以我正在按名称访问各个成员。
+
+虽然在定义希望如何传输递数据方面没有要求,但在定义 conn 变量本身时,实际上可以将其设置为默认值。
+
+你需要做的就是创建一个 options 数组,你可以在其中放入所有默认配置,只需在 conn 变量中传递数组即可。
+
+`$options = [`
+
+` PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,`
+
+`];`
+
+`$conn = new PDO($dsn, $user, $pass, $options);`
+
+这是一个非常简短和快速的 PDO 介绍,我们很快就会制作一个高级教程。如果你在理解本教程的任何部分时遇到任何困难,请在评论部分告诉我,我会在那你为你解答。
+
+--------------------------------------------------------------------------------
+
+via: http://www.theitstuff.com/easiest-pdo-tutorial-basics
+
+作者:[Rishabh Kandari][a]
+选题:[lujun9972](https://github.com/lujun9972)
+译者:[MjSeven](https://github.com/MjSeven)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:http://www.theitstuff.com/author/reevkandari
diff --git a/translated/tech/20180626 How To Search If A Package Is Available On Your Linux Distribution Or Not.md b/translated/tech/20180626 How To Search If A Package Is Available On Your Linux Distribution Or Not.md
deleted file mode 100644
index 4f6a2dbe35..0000000000
--- a/translated/tech/20180626 How To Search If A Package Is Available On Your Linux Distribution Or Not.md
+++ /dev/null
@@ -1,336 +0,0 @@
-如何搜索一个包是否在你的 Linux 发行版中
-======
-如果你知道包名称,那么你可以直接安装所需的包。
-
-在某些情况下,如果你不知道确切的包名称或者你想搜索某些包,那么你可以在分发包管理器的帮助下轻松搜索该包。
-
-自动搜索包括已安装和可用的包。
-
-结果的格式取决于选项。如果查询没有生成任何信息,那么意味着没有匹配条件的包。
-
-这可以通过具有各种选项的分发包管理器来完成。
-
-我已经在本文中添加了所有可能的选项,你可以选择最好的和最合适你的选项。
-
-或者,我们可以通过 **whohas** 命令实现这一点。它会从所有的主流发行版(例如 Debian, Ubuntu, Fedora 等)中搜索,而不仅仅是你自己的系统发行版。
-
-**建议阅读:**
-**(#)** [适用于 Linux 的命令行包管理器列表以及用法][1]
-**(#)** [Linux 包管理器的图形前端工具][2]
-
-### 如何在 Debian/Ubuntu 中搜索一个包
-
-我们可以使用 apt, apt-cache 和 aptitude 包管理器在基于 Debian 的发行版上查找给定的包。我为这个包管理器中包括了大量的选项。
-
-我们可以在基于 Debian 的系统中使用三种方式完成此操作。
-
- * apt 命令
- * apt-cache 命令
- * aptitude 命令
-
-### 如何使用 apt 命令搜索一个包
-
-APT 代表高级包管理工具 Advanced Packaging Tool(APT),它取代了 apt-get。它有功能丰富的命令行工具,包括所有功能包含在一个命令(APT)里,包括 apt-cache, apt-search, dpkg, apt-cdrom, apt-config, apt-key 等,还有其他几个独特的功能。
-
-APT 是一个强大的命令行工具,它可以访问 libapt-pkg 底层库的所有特性,它可以用于安装,下载,删除,搜索和管理以及查询关于包的信息,另外它还包含一些较少使用的与包管理相关的命令行实用程序。
-```
-$ apt -q list nano vlc
-Listing...
-nano/artful,now 2.8.6-3 amd64 [installed]
-vlc/artful 2.2.6-6 amd64
-```
-
-或者,我们可以使用以下格式搜索指定的包。
-```
-$ apt search ^vlc
-Sorting... Done
-Full Text Search... Done
-vlc/artful 2.2.6-6 amd64
- multimedia player and streamer
-
-vlc-bin/artful 2.2.6-6 amd64
- binaries from VLC
-
-vlc-data/artful,artful 2.2.6-6 all
- Common data for VLC
-
-vlc-l10n/artful,artful 2.2.6-6 all
- Translations for VLC
-
-vlc-plugin-access-extra/artful 2.2.6-6 amd64
- multimedia player and streamer (extra access plugins)
-
-vlc-plugin-base/artful 2.2.6-6 amd64
- multimedia player and streamer (base plugins)
-
-```
-
-### 如何使用 apt-cache 命令搜索一个包
-
-apt-cache 会在 APT 的包缓存上执行各种操作。它会显示有关指定包的信息。apt-cache 不会操纵系统的状态,但提供了从包的元数据中搜索和生成有趣输出的操作。
-```
-$ apt-cache search nano | grep ^nano
-nano - small, friendly text editor inspired by Pico
-nano-tiny - small, friendly text editor inspired by Pico - tiny build
-nanoblogger - Small weblog engine for the command line
-nanoblogger-extra - Nanoblogger plugins
-nanoc - static site generator written in Ruby
-nanoc-doc - static site generator written in Ruby - documentation
-nanomsg-utils - nanomsg utilities
-nanopolish - consensus caller for nanopore sequencing data
-
-```
-
-或者,我们可以使用以下格式搜索指定的包。
-```
-$ apt-cache policy vlc
-vlc:
- Installed: (none)
- Candidate: 2.2.6-6
- Version table:
- 2.2.6-6 500
- 500 http://in.archive.ubuntu.com/ubuntu artful/universe amd64 Packages
-
-```
-
-或者,我们可以使用以下格式搜索给定的包。
-```
-$ apt-cache pkgnames vlc
-vlc-bin
-vlc-plugin-video-output
-vlc-plugin-sdl
-vlc-plugin-svg
-vlc-plugin-samba
-vlc-plugin-fluidsynth
-vlc-plugin-qt
-vlc-plugin-skins2
-vlc-plugin-visualization
-vlc-l10n
-vlc-plugin-notify
-vlc-plugin-zvbi
-vlc-plugin-vlsub
-vlc-plugin-jack
-vlc-plugin-access-extra
-vlc
-vlc-data
-vlc-plugin-video-splitter
-vlc-plugin-base
-
-```
-
-### 如何使用 aptitude 命令搜索一个包
-
-aptitude 一个基于文本的 Debian GNU/Linux 软件包系统的接口。它允许用户查看包列表,并执行包管理任务,例如安装,升级和删除包,它可以从可视化界面或命令行执行操作。
-```
-$ aptitude search ^vlc
-p vlc - multimedia player and streamer
-p vlc:i386 - multimedia player and streamer
-p vlc-bin - binaries from VLC
-p vlc-bin:i386 - binaries from VLC
-p vlc-data - Common data for VLC
-v vlc-data:i386 -
-p vlc-l10n - Translations for VLC
-v vlc-l10n:i386 -
-p vlc-plugin-access-extra - multimedia player and streamer (extra access plugins)
-p vlc-plugin-access-extra:i386 - multimedia player and streamer (extra access plugins)
-p vlc-plugin-base - multimedia player and streamer (base plugins)
-p vlc-plugin-base:i386 - multimedia player and streamer (base plugins)
-p vlc-plugin-fluidsynth - FluidSynth plugin for VLC
-p vlc-plugin-fluidsynth:i386 - FluidSynth plugin for VLC
-p vlc-plugin-jack - Jack audio plugins for VLC
-p vlc-plugin-jack:i386 - Jack audio plugins for VLC
-p vlc-plugin-notify - LibNotify plugin for VLC
-p vlc-plugin-notify:i386 - LibNotify plugin for VLC
-p vlc-plugin-qt - multimedia player and streamer (Qt plugin)
-p vlc-plugin-qt:i386 - multimedia player and streamer (Qt plugin)
-p vlc-plugin-samba - Samba plugin for VLC
-p vlc-plugin-samba:i386 - Samba plugin for VLC
-p vlc-plugin-sdl - SDL video and audio output plugin for VLC
-p vlc-plugin-sdl:i386 - SDL video and audio output plugin for VLC
-p vlc-plugin-skins2 - multimedia player and streamer (Skins2 plugin)
-p vlc-plugin-skins2:i386 - multimedia player and streamer (Skins2 plugin)
-p vlc-plugin-svg - SVG plugin for VLC
-p vlc-plugin-svg:i386 - SVG plugin for VLC
-p vlc-plugin-video-output - multimedia player and streamer (video output plugins)
-p vlc-plugin-video-output:i386 - multimedia player and streamer (video output plugins)
-p vlc-plugin-video-splitter - multimedia player and streamer (video splitter plugins)
-p vlc-plugin-video-splitter:i386 - multimedia player and streamer (video splitter plugins)
-p vlc-plugin-visualization - multimedia player and streamer (visualization plugins)
-p vlc-plugin-visualization:i386 - multimedia player and streamer (visualization plugins)
-p vlc-plugin-vlsub - VLC extension to download subtitles from opensubtitles.org
-p vlc-plugin-zvbi - VBI teletext plugin for VLC
-p vlc-plugin-zvbi:i386
-
-```
-
-### 如何在 RHEL/CentOS 中搜索一个包
-
-Yum(Yellowdog Updater Modified)是 Linux 操作系统中的包管理器实用程序之一。Yum 命令用于在一些基于 RedHat 的 Linux 发行版上,它用来安装,更新,搜索和删除软件包。
-```
-# yum search ftpd
-Loaded plugins: fastestmirror, refresh-packagekit, security
-Loading mirror speeds from cached hostfile
- * base: centos.hyve.com
- * epel: mirrors.coreix.net
- * extras: centos.hyve.com
- * rpmforge: www.mirrorservice.org
- * updates: mirror.sov.uk.goscomb.net
-============================================================== N/S Matched: ftpd ===============================================================
-nordugrid-arc-gridftpd.x86_64 : ARC gridftp server
-pure-ftpd.x86_64 : Lightweight, fast and secure FTP server
-vsftpd.x86_64 : Very Secure Ftp Daemon
-
- Name and summary matches only, use "search all" for everything.
-
-```
-
-或者,我们可以使用以下命令搜索相同内容。
-```
-# yum list ftpd
-```
-
-### 如何在 Fedora 中搜索一个包
-
-DNF 代表 Dandified yum。我们可以说 DNF 是下一代 yum 包管理器(Yum 的衍生),它使用 hawkey/libsolv 库作为底层。自从 Fedora 18 开始以及它最终在 Fedora 22 中实施以来,Aleš Kozumplík 就在开始研究 DNF。
-```
-# dnf search ftpd
-Last metadata expiration check performed 0:42:28 ago on Tue Jun 9 22:52:44 2018.
-============================== N/S Matched: ftpd ===============================
-proftpd-utils.x86_64 : ProFTPD - Additional utilities
-pure-ftpd-selinux.x86_64 : SELinux support for Pure-FTPD
-proftpd-devel.i686 : ProFTPD - Tools and header files for developers
-proftpd-devel.x86_64 : ProFTPD - Tools and header files for developers
-proftpd-ldap.x86_64 : Module to add LDAP support to the ProFTPD FTP server
-proftpd-mysql.x86_64 : Module to add MySQL support to the ProFTPD FTP server
-proftpd-postgresql.x86_64 : Module to add PostgreSQL support to the ProFTPD FTP
- : server
-vsftpd.x86_64 : Very Secure Ftp Daemon
-proftpd.x86_64 : Flexible, stable and highly-configurable FTP server
-owfs-ftpd.x86_64 : FTP daemon providing access to 1-Wire networks
-perl-ftpd.noarch : Secure, extensible and configurable Perl FTP server
-pure-ftpd.x86_64 : Lightweight, fast and secure FTP server
-pyftpdlib.noarch : Python FTP server library
-nordugrid-arc-gridftpd.x86_64 : ARC gridftp server
-```
-
-或者,我们可以使用以下命令搜索相同的内容。
-```
-# dnf list proftpd
-Failed to synchronize cache for repo 'heikoada-terminix', disabling.
-Last metadata expiration check: 0:08:02 ago on Tue 26 Jun 2018 04:30:05 PM IST.
-Available Packages
-proftpd.x86_64
-```
-
-### 如何在 Arch Linux 中搜索一个包
-
-pacman 代表包管理实用程序(pacman)。它是一个用于安装,构建,删除和管理 Arch Linux 软件包的命令行实用程序。pacman 使用 libalpm(Arch Linux Package Management(ALPM)库)作为底层来执行所有操作。
-
-在本例中,我将要搜索 chromium 包。
-```
-# pacman -Ss chromium
-extra/chromium 48.0.2564.116-1
- The open-source project behind Google Chrome, an attempt at creating a safer, faster, and more stable browser
-extra/qt5-webengine 5.5.1-9 (qt qt5)
- Provides support for web applications using the Chromium browser project
-community/chromium-bsu 0.9.15.1-2
- A fast paced top scrolling shooter
-community/chromium-chromevox latest-1
- Causes the Chromium web browser to automatically install and update the ChromeVox screen reader extention. Note: This
- package does not contain the extension code.
-community/fcitx-mozc 2.17.2313.102-1
- Fcitx Module of A Japanese Input Method for Chromium OS, Windows, Mac and Linux (the Open Source Edition of Google Japanese
- Input)
-```
-
-默认情况下,`-s` 选项内置 ERE(扩展正则表达式)会导致很多不需要的结果。使用以下格式会仅匹配包名称。
-```
-# pacman -Ss '^chromium-'
-
-```
-
-pkgfile 是一个用于在 Arch Linux 官方仓库的包中搜索文件的工具。
-```
-# pkgfile chromium
-```
-
-### 如何在 openSUSE 中搜索一个包
-
-Zypper 是 SUSE 和 openSUSE 发行版的命令行包管理器。它用于安装,更新,搜索和删除包以及管理仓库,执行各种查询等。Zypper 命令行接口到 ZYpp 系统管理库(libzypp)。
-```
-# zypper search ftp
-or
-# zypper se ftp
-Loading repository data...
-Reading installed packages...
-S | Name | Summary | Type
---+----------------+-----------------------------------------+--------
- | proftpd | Highly configurable GPL-licensed FTP -> | package
- | proftpd-devel | Development files for ProFTPD | package
- | proftpd-doc | Documentation for ProFTPD | package
- | proftpd-lang | Languages for package proftpd | package
- | proftpd-ldap | LDAP Module for ProFTPD | package
- | proftpd-mysql | MySQL Module for ProFTPD | package
- | proftpd-pgsql | PostgreSQL Module for ProFTPD | package
- | proftpd-radius | Radius Module for ProFTPD | package
- | proftpd-sqlite | SQLite Module for ProFTPD | package
- | pure-ftpd | A Lightweight, Fast, and Secure FTP S-> | package
- | vsftpd | Very Secure FTP Daemon - Written from-> | package
-```
-
-### 如何使用 whohas 命令搜索一个包
-
-whohas 命令是一个智能工具,从所有主流发行版中搜索指定包,如 Debian, Ubuntu, Gentoo, Arch, AUR, Mandriva, Fedora, Fink, FreeBSD 和 NetBSD。
-```
-$ whohas nano
-Mandriva nano-debug 2.3.1-1mdv2010.2.x http://sophie.zarb.org/rpms/0b33dc73bca710749ad14bbc3a67e15a
-Mandriva nano-debug 2.2.4-1mdv2010.1.i http://sophie.zarb.org/rpms/d9dfb2567681e09287b27e7ac6cdbc05
-Mandriva nano-debug 2.2.4-1mdv2010.1.x http://sophie.zarb.org/rpms/3299516dbc1538cd27a876895f45aee4
-Mandriva nano 2.3.1-1mdv2010.2.x http://sophie.zarb.org/rpms/98421c894ee30a27d9bd578264625220
-Mandriva nano 2.3.1-1mdv2010.2.i http://sophie.zarb.org/rpms/cea07b5ef9aa05bac262fc7844dbd223
-Mandriva nano 2.2.4-1mdv2010.1.s http://sophie.zarb.org/rpms/d61f9341b8981e80424c39c3951067fa
-Mandriva spring-mod-nanoblobs 0.65-2mdv2010.0.sr http://sophie.zarb.org/rpms/74bb369d4cbb4c8cfe6f6028e8562460
-Mandriva nanoxml-lite 2.2.3-4.1.4mdv2010 http://sophie.zarb.org/rpms/287a4c37bc2a39c0f277b0020df47502
-Mandriva nanoxml-manual-lite 2.2.3-4.1.4mdv2010 http://sophie.zarb.org/rpms/17dc4f638e5e9964038d4d26c53cc9c6
-Mandriva nanoxml-manual 2.2.3-4.1.4mdv2010 http://sophie.zarb.org/rpms/a1b5092cd01fc8bb78a0f3ca9b90370b
-Gentoo nano 9999 http://packages.gentoo.org/package/app-editors/nano
-Gentoo nano 9999 http://packages.gentoo.org/package/app-editors/nano
-Gentoo nano 2.9.8 http://packages.gentoo.org/package/app-editors/nano
-Gentoo nano 2.9.7 http://packages.gentoo.org/package/app-editors/nano
-```
-
-如果你希望只从当前发行版仓库中搜索指定包,使用以下格式:
-```
-$ whohas -d Ubuntu vlc
-Ubuntu vlc 2.1.6-0ubuntu14.04 1M all http://packages.ubuntu.com/trusty/vlc
-Ubuntu vlc 2.1.6-0ubuntu14.04 1M all http://packages.ubuntu.com/trusty-updates/vlc
-Ubuntu vlc 2.2.2-5ubuntu0.16. 1M all http://packages.ubuntu.com/xenial/vlc
-Ubuntu vlc 2.2.2-5ubuntu0.16. 1M all http://packages.ubuntu.com/xenial-updates/vlc
-Ubuntu vlc 2.2.6-6 40K all http://packages.ubuntu.com/artful/vlc
-Ubuntu vlc 3.0.1-3build1 32K all http://packages.ubuntu.com/bionic/vlc
-Ubuntu vlc 3.0.2-0ubuntu0.1 32K all http://packages.ubuntu.com/bionic-updates/vlc
-Ubuntu vlc 3.0.3-1 33K all http://packages.ubuntu.com/cosmic/vlc
-Ubuntu browser-plugin-vlc 2.0.6-2 55K all http://packages.ubuntu.com/trusty/browser-plugin-vlc
-Ubuntu browser-plugin-vlc 2.0.6-4 47K all http://packages.ubuntu.com/xenial/browser-plugin-vlc
-Ubuntu browser-plugin-vlc 2.0.6-4 47K all http://packages.ubuntu.com/artful/browser-plugin-vlc
-Ubuntu browser-plugin-vlc 2.0.6-4 47K all http://packages.ubuntu.com/bionic/browser-plugin-vlc
-Ubuntu browser-plugin-vlc 2.0.6-4 47K all http://packages.ubuntu.com/cosmic/browser-plugin-vlc
-Ubuntu libvlc-bin 2.2.6-6 27K all http://packages.ubuntu.com/artful/libvlc-bin
-Ubuntu libvlc-bin 3.0.1-3build1 17K all http://packages.ubuntu.com/bionic/libvlc-bin
-Ubuntu libvlc-bin 3.0.2-0ubuntu0.1 17K all http://packages.ubuntu.com/bionic-updates/libvlc-bin
-```
-
---------------------------------------------------------------------------------
-
-via: https://www.2daygeek.com/how-to-search-if-a-package-is-available-on-your-linux-distribution-or-not/
-
-作者:[Prakash Subramanian][a]
-选题:[lujun9972](https://github.com/lujun9972)
-译者:[MjSeven](https://github.com/MjSeven)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]:https://www.2daygeek.com/author/prakash/
-[1]:https://www.2daygeek.com/list-of-command-line-package-manager-for-linux/
-[2]:https://www.2daygeek.com/list-of-graphical-frontend-tool-for-linux-package-manager/
diff --git a/translated/tech/20180725 Put platforms in a Python game with Pygame.md b/translated/tech/20180725 Put platforms in a Python game with Pygame.md
new file mode 100644
index 0000000000..35b951cc02
--- /dev/null
+++ b/translated/tech/20180725 Put platforms in a Python game with Pygame.md
@@ -0,0 +1,590 @@
+[#]: collector: (lujun9972)
+[#]: translator: (robsean)
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Put platforms in a Python game with Pygame)
+[#]: via: (https://opensource.com/article/18/7/put-platforms-python-game)
+[#]: author: (Seth Kenlon https://opensource.com/users/seth)
+
+放置舞台到一个使用 Pygame 的 Python 游戏中
+======
+在这系列的第六部分中,在从零构建一个 Python 游戏时,为你的角色创建一些舞台来旅行。
+
+
+这是关于使用 Pygame 模块来在 Python 3 中创建电脑游戏的仍在进行的一系列的文章的第六部分。先前的文章是:
+
++ [通过构建一个简单的骰子游戏来学习如何用 Python 编程][24]
++ [使用 Python 和 Pygame 模块构建一个游戏框架][25]
++ [如何添加一个玩家到你的 Python 游戏][26]
++ [使用 Pygame 来在周围移动你的游戏角色][27]
++ [没有一个坏蛋的一个英雄是什么?如何添加一个坏蛋到你的 Python 游戏][28]
+
+
+一个舞台游戏需要舞台。
+
+在 [Pygame][1] 中,舞台本身是小精灵,正像你的可玩的小精灵。这一点是重要的,因为有对象的舞台,使你的玩家小精灵很简单地与舞台一起作用。.
+
+创建舞台有两个主要步骤。首先,你必须编码对象,然后,你必须设计你希望对象来出现的位置。
+
+### 编码舞台对象
+
+为构建一个舞台对象,你创建一个称为`Platform`的类。它是一个小精灵,正像你的[`玩家`][2] [小精灵][2],带有很多相同的属性。
+
+你的`舞台`类需要知道很多你想要的舞台的类型的信息 ,它应该出现在游戏世界的哪里,和它应该包含的什么图片。它们中很多信息可能还尚不存在,依赖于你计划了多少游戏,但是,没有关系。正像直到[移到文章][3]的结尾时,你不告诉你的玩家小精灵多快速度移到,你没有必要告诉`Platform`预交的每一件事。
+
+在你所写的这系列中脚本的顶部附近,创建一个新的类。在这代码示例中前三行是用于上下文,因此在注释的下面添加代码:
+
+```
+import pygame
+import sys
+import os
+## new code below:
+
+class Platform(pygame.sprite.Sprite):
+# x location, y location, img width, img height, img file
+def __init__(self,xloc,yloc,imgw,imgh,img):
+ pygame.sprite.Sprite.__init__(self)
+ self.image = pygame.image.load(os.path.join('images',img)).convert()
+ self.image.convert_alpha()
+ self.image.set_colorkey(ALPHA)
+ self.rect = self.image.get_rect()
+ self.rect.y = yloc
+ self.rect.x = xloc
+```
+
+当被调用时,这个类在一些 X 和 Y 位置上创建一个对象 onscreen, 带有一些宽度和高度,对于纹理使用一些图片文件。它非常类似于如何玩家或敌人绘制onscreen。
+
+### 舞台的类型
+
+下一步是设计你所有舞台需要出现的地方。
+
+#### 瓷砖方法
+
+这里有几个不同的方法来实施一个舞台游戏世界。在最初的侧面滚动游戏,例如,马里奥超级兄弟和刺猬索尼克,这个技巧是来使用"瓷砖",意味着这里有几个块“瓷砖”来代表地面和各种各样的舞台,并且这些块被使用和重复使用来制作一个层次。你仅有8或12种不同的块,你排列它们在屏幕上来创建地面,浮动的舞台,和你游戏需要的其它的一切事物。一些人找到这最容易的方法来制作一个游戏,尽管你不得不制作(或下载)一小组价值相等的有用的事物来创建很多不同的有用的事物。然而,代码需要一点更多的数学。
+
+![Supertux, a tile-based video game][5]
+
+[SuperTux][6] ,一个基于瓷砖的电脑游戏。
+
+#### 手工绘制方法
+
+另一个方法是来使各个和每一个有用的事物作为一整个图像。如果你享受为你的游戏世界创建有用的事物,在一个图形应用程序中花费时间来构建你的游戏世界的各个和每一部件是一个极好的理由。这个方法需要较少的数学,因为所有的舞台是完整的对象,并且你告诉 [Python][7] 在屏幕上放置它们的位置。
+
+每种方法都有优势和劣势,并且依赖于你的选择使用的代码是稍微不同的.我将覆盖这两方面,所以你可以在你的工程中使用一个或另一个,甚至两者的混合。
+
+### 层次映射
+
+总的来说,映射出你的游戏世界是层次设计和游戏程序的一个重要的部分。这需要数学,但是没有什么太难的,而且 Python 擅长数学,因此它可以帮助一些。
+
+你可以发现先在纸张上设计是有益的。获取纸张的一个表格,并绘制一个方框来代表你的游戏窗体。在方框中绘制舞台,用 X 和 Y 坐标标记每一个,以及它的意欲达到的宽度和高度。在方框中的实际位置没有必要是精确的,只要你保持实际的数字。譬如,假如你的屏幕是 720 像素宽,那么你不能在一个屏幕上以 100 像素处容纳8块舞台。
+
+当然,在你的游戏中不是所有的舞台不得不容纳在一个屏幕大小的方框,因为你的游戏将随着你的玩家行走而滚动。所以保持绘制你的游戏世界到第一屏幕的右侧,直到层次的右侧。
+
+如果你更喜欢精确一点,你可以使用方格纸。当设计一个带有瓷砖的游戏时,这是特别有用的,因为每个方格可以代表一个瓷砖。
+
+![Example of a level map][9]
+
+一个平面地图示例。
+
+#### 坐标系
+
+你可能已经在学校中学习[笛卡尔坐标系][10]。你学习的东西应用到 Pygame,除了在 Pygame 中,你的游戏世界的坐标系放置 `0,0` 在你的屏幕的左上角而不是在中间,中间可能是你which is probably what you're used to from Geometry class.
+
+![Example of coordinates in Pygame][12]
+
+在 Pygame 中的坐标示例。
+
+X 轴起始于最左边的 0 ,无限地向右增加。Y 轴起始于屏幕顶部的 0 ,向下延伸。
+
+#### 图片大小
+
+映射出一个游戏世界不是毫无意义的,如果你不知道你的玩家,敌人,舞台是多大的。你可以找到你的舞台的尺寸或在一个图形程序中的标题。在 [Krita][13] 中,例如,单击**图形**菜单,并选择**属性**。你可以在**属性**窗口的非常顶部处找到尺寸。
+
+可选地,你可以创建一个简单点的 Python 脚本来告诉你的一个图形的尺寸。打开一个新的文本文件,并输入这些代码到其中:
+
+```
+#!/usr/bin/env python3
+
+from PIL import Image
+import os.path
+import sys
+
+if len(sys.argv) > 1:
+ print(sys.argv[1])
+else:
+ sys.exit('Syntax: identify.py [filename]')
+
+pic = sys.argv[1]
+dim = Image.open(pic)
+X = dim.size[0]
+Y = dim.size[1]
+
+print(X,Y)
+```
+
+保存文本文件为 `identify.py` 。
+
+为安装这个脚本,你必需安装安装一组额外的 Python 模块,它们包含使用在脚本中新的关键字:
+
+```
+$ pip3 install Pillow --user
+```
+
+一旦这些被安装,在你游戏工程目录中运行你的脚本:
+
+```
+$ python3 ./identify.py images/ground.png
+(1080, 97)
+```
+
+在这个示例中的地面舞台的图形的大小是1080像素宽和97像素高。
+
+### 舞台块
+
+如果你选择单独地绘制每个有用的事物,你必需创建一些舞台和一些你希望插入到你的游戏世界中其它的元素,每个元素都在它自己的文件中。换句话说,你应该每个有用的事物都有一个文件,像这:
+
+![One image file per object][15]
+
+每个对象一个图形文件。
+
+你可以按照你希望的次数重复使用每个舞台,只要确保每个文件仅包含一个舞台。你不能使用一个包含每一件事物的文件,像这:
+
+![Your level cannot be one image file][17]
+
+你的层次不能是一个图形。
+
+当你完成时,你可能希望你的游戏看起来像这样,但是如果你在一个大文件中创建你的层次,没有方法从背景中区分一个舞台,因此,要么在它们拥有的文件中绘制你的对象,要么从一个大规模文件中复制它们,并单独地保存副本。
+
+**注意:** 如同你的其它的有用的事物,你可以使用[GIMP][18],Krita,[MyPaint][19],或[Inkscape][20] 来创建你的游戏的有用的事物。
+
+舞台出现在每个层次开始的屏幕上,因此你必需在你的`Level`类中添加一个`platform`函数。在这里特殊的情况是地面舞台,作为它自身拥有的舞台组来对待是足够重要的。通过把地面看作它自身拥有的特殊类型的舞台,你可以选择它是否滚动,或在其它舞台漂浮在它上面期间是否仍然站立。它取决于你。
+
+添加这两个函数到你的`Level`类:
+
+```
+def ground(lvl,x,y,w,h):
+ ground_list = pygame.sprite.Group()
+ if lvl == 1:
+ ground = Platform(x,y,w,h,'block-ground.png')
+ ground_list.add(ground)
+
+ if lvl == 2:
+ print("Level " + str(lvl) )
+
+ return ground_list
+
+def platform( lvl ):
+ plat_list = pygame.sprite.Group()
+ if lvl == 1:
+ plat = Platform(200, worldy-97-128, 285,67,'block-big.png')
+ plat_list.add(plat)
+ plat = Platform(500, worldy-97-320, 197,54,'block-small.png')
+ plat_list.add(plat)
+ if lvl == 2:
+ print("Level " + str(lvl) )
+
+ return plat_list
+```
+
+ `ground` 函数需要一个 X 和 Y 位置,以便 Pygame 知道在哪里放置地面舞台。它也需要舞台的宽度和高度,这样 Pygame 知道地面延伸到每个方向有多远。该函数使用你的 `Platform` 来来生成一个对象 onscreen ,然后他就这个对象到 `ground_list` 组。
+
+`platform` 函数本质上是相同的,除了其有更多的舞台来列出。在这个示例中,仅有两个,但是你可以想多少就多少。在进入一个舞台后,在列出另一个前,你必需添加它到 `plat_list` 中。如果你不添加一个舞台到组中,那么它将不出现在你的游戏中。
+
+> **提示:** 很难想象你的游戏世界的0在顶部,因为在真实世界中发生的情况是相反的;当估计你多高时,你不要从天空下面测量你自己,从脚到头的顶部来测量。
+>
+> 如果对你来说从“地面”上来构建你的游戏世界更容易,它可能有助于表示 Y 轴值为负数。例如,你知道你的游戏世界的底部是 `worldy` 的值。因此 `worldy` 减去地面(97,在这个示例中)的高度是你的玩家正常站立的位置。如果你的角色是64像素高,那么地面减去128正好是你的玩家的两倍。事实上,一个放置在128像素处舞台大约是两层楼高度,相对于你的玩家。一个舞台在-320处是三层楼高。等等
+
+正像你现在可能所知的,如果你不使用它们,你的类和函数是没有有价值的。添加这些代码到你的 setup 部分(第一行只是上下文,所以添加最后两行):
+
+```
+enemy_list = Level.bad( 1, eloc )
+ground_list = Level.ground( 1,0,worldy-97,1080,97 )
+plat_list = Level.platform( 1 )
+```
+
+并提交这些行到你的主循环(再一次,第一行仅用于上下文):
+
+```
+enemy_list.draw(world) # refresh enemies
+ground_list.draw(world) # refresh ground
+plat_list.draw(world) # refresh platforms
+```
+
+### 瓷砖舞台
+
+瓷砖游戏世界被认为更容易制作,因为你只需要绘制一些在前面的块,就能在游戏中反反复复创建每一个舞台。在网站上甚至有一组供你来使用的瓷砖,像 [OpenGameArt.org][21]。
+
+`Platform` 类与在前面部分中的类是相同的。
+
+在 `Level` 类中的 `ground` 和 `platform` , 然而,必需使用循环来计算使用多少块来创建每个舞台。
+
+如果你打算在你的游戏世界中有一个坚固的地面,地面是简单的。你仅从整个窗口一边到另一边"克隆"你的地面瓷砖。例如,你可以创建一个 X 和 Y 值的列表来规定每个瓷砖应该放置的位置,然后使用一个循环来获取每个值和绘制一个瓷砖。这仅是一个示例,所以不要添加这到你的代码:
+
+```
+# Do not add this to your code
+gloc = [0,656,64,656,128,656,192,656,256,656,320,656,384,656]
+```
+
+如果你仔细看,不过,你也可以看到所有的 Y 值是相同的,X 值以64的增量不断地增加,这是瓷砖的东西。这种类型的重复是精确地,是计算机擅长的,因此你可以使用一点数学逻辑来让计算机为你做所有的计算:
+
+添加这代你的脚本的 setup 部分:
+
+```
+gloc = []
+tx = 64
+ty = 64
+
+i=0
+while i <= (worldx/tx)+tx:
+ gloc.append(i*tx)
+ i=i+1
+
+ground_list = Level.ground( 1,gloc,tx,ty )
+```
+
+现在,不管你的窗口的大小,Python 通过瓷砖的宽度 分割游戏世界的宽度,并创建一个数组列表列出每个 X 值。这不计算 Y 值,但是无论如何,从不在平的地面上更改。
+
+为在一个函数中使用数组,使用一个`while`循环,查看每个条目并在适当的位置添加一个地面瓷砖:
+
+```
+def ground(lvl,gloc,tx,ty):
+ ground_list = pygame.sprite.Group()
+ i=0
+ if lvl == 1:
+ while i < len(gloc):
+ ground = Platform(gloc[i],worldy-ty,tx,ty,'tile-ground.png')
+ ground_list.add(ground)
+ i=i+1
+
+ if lvl == 2:
+ print("Level " + str(lvl) )
+
+ return ground_list
+```
+
+除了 `while` 循环,这几乎与在上面一部分中提供的块样式平台游戏 `ground` 函数的代码相同。
+
+对于移到舞台,原理是相似的,但是这里有一些你可以使用的技巧来使你的生活更简单。
+
+而不通过像素映射每个舞台,你可以通过它的起始像素(它的 X 值),从地面(它的 Y 值)的高度,绘制多少瓷砖来定义一个舞台。用那种方法,你不必担心每个舞台的宽度和高度。
+
+这个技巧的逻辑有一点更复杂,因此仔细复制这些代码。有一个 `while` 循环在另一个 `while` 循环的内部,因为这个函数必需考虑在每个数组入口处的所有三个值来成功地建造一个完整的舞台。在这个示例中,这里仅有三个舞台被定义为 `ploc.append` 语句,但是你的游戏可能需要更多,因此你需要多少就定义多少。当然,一些也将不出现,因为它们远在屏幕外,但是一旦你实施滚动,它们将呈现眼前。
+
+```
+def platform(lvl,tx,ty):
+ plat_list = pygame.sprite.Group()
+ ploc = []
+ i=0
+ if lvl == 1:
+ ploc.append((200,worldy-ty-128,3))
+ ploc.append((300,worldy-ty-256,3))
+ ploc.append((500,worldy-ty-128,4))
+ while i < len(ploc):
+ j=0
+ while j <= ploc[i][2]:
+ plat = Platform((ploc[i][0]+(j*tx)),ploc[i][1],tx,ty,'tile.png')
+ plat_list.add(plat)
+ j=j+1
+ print('run' + str(i) + str(ploc[i]))
+ i=i+1
+
+ if lvl == 2:
+ print("Level " + str(lvl) )
+
+ return plat_list
+```
+
+为获取舞台,使其出现在你的游戏世界,它们必需在你的主循环中。如果你还没有这样做,添加这些行到你的主循环(再一次,第一行仅被用于上下文)中:
+
+```
+ enemy_list.draw(world) # refresh enemies
+ ground_list.draw(world) # refresh ground
+ plat_list.draw(world) # refresh platforms
+```
+
+启动你的游戏,根据需要调整你的舞台的放置位置。不要担心,你不能看见在屏幕外面产生的舞台;你将不久后修复。
+
+到目前为止,这是在一个图片和在代码中游戏:
+
+![Pygame game][23]
+
+到目前为止,我们的 Pygame 舞台。
+
+```
+#!/usr/bin/env python3
+# draw a world
+# add a player and player control
+# add player movement
+# add enemy and basic collision
+# add platform
+
+# GNU All-Permissive License
+# Copying and distribution of this file, with or without modification,
+# are permitted in any medium without royalty provided the copyright
+# notice and this notice are preserved. This file is offered as-is,
+# without any warranty.
+
+import pygame
+import sys
+import os
+
+'''
+Objects
+'''
+
+class Platform(pygame.sprite.Sprite):
+ # x location, y location, img width, img height, img file
+ def __init__(self,xloc,yloc,imgw,imgh,img):
+ pygame.sprite.Sprite.__init__(self)
+ self.image = pygame.image.load(os.path.join('images',img)).convert()
+ self.image.convert_alpha()
+ self.rect = self.image.get_rect()
+ self.rect.y = yloc
+ self.rect.x = xloc
+
+class Player(pygame.sprite.Sprite):
+ '''
+ Spawn a player
+ '''
+ def __init__(self):
+ pygame.sprite.Sprite.__init__(self)
+ self.movex = 0
+ self.movey = 0
+ self.frame = 0
+ self.health = 10
+ self.score = 1
+ self.images = []
+ for i in range(1,9):
+ img = pygame.image.load(os.path.join('images','hero' + str(i) + '.png')).convert()
+ img.convert_alpha()
+ img.set_colorkey(ALPHA)
+ self.images.append(img)
+ self.image = self.images[0]
+ self.rect = self.image.get_rect()
+
+ def control(self,x,y):
+ '''
+ control player movement
+ '''
+ self.movex += x
+ self.movey += y
+
+ def update(self):
+ '''
+ Update sprite position
+ '''
+
+ self.rect.x = self.rect.x + self.movex
+ self.rect.y = self.rect.y + self.movey
+
+ # moving left
+ if self.movex < 0:
+ self.frame += 1
+ if self.frame > ani*3:
+ self.frame = 0
+ self.image = self.images[self.frame//ani]
+
+ # moving right
+ if self.movex > 0:
+ self.frame += 1
+ if self.frame > ani*3:
+ self.frame = 0
+ self.image = self.images[(self.frame//ani)+4]
+
+ # collisions
+ enemy_hit_list = pygame.sprite.spritecollide(self, enemy_list, False)
+ for enemy in enemy_hit_list:
+ self.health -= 1
+ print(self.health)
+
+ ground_hit_list = pygame.sprite.spritecollide(self, ground_list, False)
+ for g in ground_hit_list:
+ self.health -= 1
+ print(self.health)
+
+
+class Enemy(pygame.sprite.Sprite):
+ '''
+ Spawn an enemy
+ '''
+ def __init__(self,x,y,img):
+ pygame.sprite.Sprite.__init__(self)
+ self.image = pygame.image.load(os.path.join('images',img))
+ #self.image.convert_alpha()
+ #self.image.set_colorkey(ALPHA)
+ self.rect = self.image.get_rect()
+ self.rect.x = x
+ self.rect.y = y
+ self.counter = 0
+
+ def move(self):
+ '''
+ enemy movement
+ '''
+ distance = 80
+ speed = 8
+
+ if self.counter >= 0 and self.counter <= distance:
+ self.rect.x += speed
+ elif self.counter >= distance and self.counter <= distance*2:
+ self.rect.x -= speed
+ else:
+ self.counter = 0
+
+ self.counter += 1
+
+class Level():
+ def bad(lvl,eloc):
+ if lvl == 1:
+ enemy = Enemy(eloc[0],eloc[1],'yeti.png') # spawn enemy
+ enemy_list = pygame.sprite.Group() # create enemy group
+ enemy_list.add(enemy) # add enemy to group
+
+ if lvl == 2:
+ print("Level " + str(lvl) )
+
+ return enemy_list
+
+ def loot(lvl,lloc):
+ print(lvl)
+
+ def ground(lvl,gloc,tx,ty):
+ ground_list = pygame.sprite.Group()
+ i=0
+ if lvl == 1:
+ while i < len(gloc):
+ print("blockgen:" + str(i))
+ ground = Platform(gloc[i],worldy-ty,tx,ty,'ground.png')
+ ground_list.add(ground)
+ i=i+1
+
+ if lvl == 2:
+ print("Level " + str(lvl) )
+
+ return ground_list
+
+'''
+Setup
+'''
+worldx = 960
+worldy = 720
+
+fps = 40 # frame rate
+ani = 4 # animation cycles
+clock = pygame.time.Clock()
+pygame.init()
+main = True
+
+BLUE = (25,25,200)
+BLACK = (23,23,23 )
+WHITE = (254,254,254)
+ALPHA = (0,255,0)
+
+world = pygame.display.set_mode([worldx,worldy])
+backdrop = pygame.image.load(os.path.join('images','stage.png')).convert()
+backdropbox = world.get_rect()
+player = Player() # spawn player
+player.rect.x = 0
+player.rect.y = 0
+player_list = pygame.sprite.Group()
+player_list.add(player)
+steps = 10 # how fast to move
+
+eloc = []
+eloc = [200,20]
+gloc = []
+#gloc = [0,630,64,630,128,630,192,630,256,630,320,630,384,630]
+tx = 64 #tile size
+ty = 64 #tile size
+
+i=0
+while i <= (worldx/tx)+tx:
+ gloc.append(i*tx)
+ i=i+1
+ print("block: " + str(i))
+
+enemy_list = Level.bad( 1, eloc )
+ground_list = Level.ground( 1,gloc,tx,ty )
+
+'''
+Main loop
+'''
+while main == True:
+ for event in pygame.event.get():
+ if event.type == pygame.QUIT:
+ pygame.quit(); sys.exit()
+ main = False
+
+ if event.type == pygame.KEYDOWN:
+ if event.key == pygame.K_LEFT or event.key == ord('a'):
+ player.control(-steps,0)
+ if event.key == pygame.K_RIGHT or event.key == ord('d'):
+ player.control(steps,0)
+ if event.key == pygame.K_UP or event.key == ord('w'):
+ print('jump')
+
+ if event.type == pygame.KEYUP:
+ if event.key == pygame.K_LEFT or event.key == ord('a'):
+ player.control(steps,0)
+ if event.key == pygame.K_RIGHT or event.key == ord('d'):
+ player.control(-steps,0)
+ if event.key == ord('q'):
+ pygame.quit()
+ sys.exit()
+ main = False
+
+# world.fill(BLACK)
+ world.blit(backdrop, backdropbox)
+ player.update()
+ player_list.draw(world) #refresh player position
+ enemy_list.draw(world) # refresh enemies
+ ground_list.draw(world) # refresh enemies
+ for e in enemy_list:
+ e.move()
+ pygame.display.flip()
+ clock.tick(fps)
+```
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/18/7/put-platforms-python-game
+
+作者:[Seth Kenlon][a]
+选题:[lujun9972][b]
+译者:[robsan](https://github.com/robsean)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/seth
+[b]: https://github.com/lujun9972
+[1]: https://www.pygame.org/news
+[2]: https://opensource.com/article/17/12/game-python-add-a-player
+[3]: https://opensource.com/article/17/12/game-python-moving-player
+[4]: /file/403841
+[5]: https://opensource.com/sites/default/files/uploads/supertux.png (Supertux, a tile-based video game)
+[6]: https://www.supertux.org/
+[7]: https://www.python.org/
+[8]: /file/403861
+[9]: https://opensource.com/sites/default/files/uploads/layout.png (Example of a level map)
+[10]: https://en.wikipedia.org/wiki/Cartesian_coordinate_system
+[11]: /file/403871
+[12]: https://opensource.com/sites/default/files/uploads/pygame_coordinates.png (Example of coordinates in Pygame)
+[13]: https://krita.org/en/
+[14]: /file/403876
+[15]: https://opensource.com/sites/default/files/uploads/pygame_floating.png (One image file per object)
+[16]: /file/403881
+[17]: https://opensource.com/sites/default/files/uploads/pygame_flattened.png (Your level cannot be one image file)
+[18]: https://www.gimp.org/
+[19]: http://mypaint.org/about/
+[20]: https://inkscape.org/en/
+[21]: https://opengameart.org/content/simplified-platformer-pack
+[22]: /file/403886
+[23]: https://opensource.com/sites/default/files/uploads/pygame_platforms.jpg (Pygame game)
+[24]: Learn how to program in Python by building a simple dice game
+[25]: https://opensource.com/article/17/12/game-framework-python
+[26]: https://opensource.com/article/17/12/game-python-add-a-player
+[27]: https://opensource.com/article/17/12/game-python-moving-player
+[28]: https://opensource.com/article/18/5/pygame-enemy
+
diff --git a/translated/tech/20190123 Commands to help you monitor activity on your Linux server.md b/translated/tech/20190123 Commands to help you monitor activity on your Linux server.md
deleted file mode 100644
index 394b553d13..0000000000
--- a/translated/tech/20190123 Commands to help you monitor activity on your Linux server.md
+++ /dev/null
@@ -1,157 +0,0 @@
-[#]: collector: (lujun9972)
-[#]: translator: (dianbanjiu )
-[#]: reviewer: ( )
-[#]: publisher: ( )
-[#]: url: ( )
-[#]: subject: (Commands to help you monitor activity on your Linux server)
-[#]: via: (https://www.networkworld.com/article/3335200/linux/how-to-monitor-activity-on-your-linux-server.html)
-[#]: author: (Sandra Henry-Stocker https://www.networkworld.com/author/Sandra-Henry_Stocker/)
-
-监控 Linux 服务器的几个常用命令
-======
-
-watch、top 和 ac 命令为我们监视 Linux 服务器上的活动提供了一些十分高效的途径。
-
-
-
-为了在获取系统活动时更加轻松,Linux 系统提供了一系列相关的命令。在这篇文章中,我们就一起来看看这些对我们很有帮助的命令吧。
-
-### watch 命令
-
-**watch** 是一个使得重复检测 Linux 系统中一系列数据,例如用户活动、正在运行进程、登录、内存使用等更加容易的命令。这个命令实际上是重复地运行一个特定的命令,每次都会重写之前显示的输出,它提供了一个比较方便的方式用以监测在你的系统中发生的活动。
-
-首先以一个基础且不是特别有用的命令开始,你可以运行 `watch -n 5 date`,然后你可以看到在终端中显示了当前的日期和时间,这些数据会每五秒更新一次。你可能已经猜到了,**-n 5** 选项指定了运行接下来一次命令需要等待的秒数。默认是 2 秒。这个命令将会一直运行并按照指定的时间更新显示,直到你使用 ^C 停下它。
-
-```
-Every 5.0s: date butterfly: Wed Jan 23 15:59:14 2019
-
-Wed Jan 23 15:59:14 EST 2019
-```
-
-下面是一个很有趣的命令实例,你可以监控一个在服务器中登录用户的列表,该列表会按照指定的时间定时更新。就像下面写到的,这个命令会每 10 秒更新一次这个列表。登出的用户将会从当前显示的列表中消失,那些新登录的将会被添加到这个表格当中。如果没有用户再登录或者登出,这个表格跟之前显示的将不会有任何不同。
-
-```
-$ watch -n 10 who
-
-Every 10.0s: who butterfly: Tue Jan 23 16:02:03 2019
-
-shs :0 2019-01-23 09:45 (:0)
-dory pts/0 2019-01-23 15:50 (192.168.0.5)
-nemo pts/1 2019-01-23 16:01 (192.168.0.15)
-shark pts/3 2019-01-23 11:11 (192.168.0.27)
-```
-
-如果你只是想看有多少用户登录过,可以通过 watch 调用 **uptime** 命令获取用户数和负载的平均水平,以及系统的工作状况。
-
-```
-$ watch uptime
-
-Every 2.0s: uptime butterfly: Tue Jan 23 16:25:48 2019
-
- 16:25:48 up 22 days, 4:38, 3 users, load average: 1.15, 0.89, 1.02
-```
-
-如果你想使用 watch 重复一个包含了管道的命令,就需要将该命令用引号括起来,就比如下面这个每五秒显示一次有多少进程正在运行的命令。
-
-```
-$ watch -n 5 'ps -ef | wc -l'
-
-Every 5.0s: ps -ef | wc -l butterfly: Tue Jan 23 16:11:54 2019
-
-245
-```
-
-要查看内存使用,你也许会想要试一下下面的这个命令组合:
-
-```
-$ watch -n 5 free -m
-
-Every 5.0s: free -m butterfly: Tue Jan 23 16:34:09 2019
-
- total used free shared buff/cache available
-Mem: 5959 776 3276 12 1906 4878
-Swap: 2047 0 2047
-```
-
-你可以在 **watch** 后添加一些选项查看某个特定用户下运行的进程,不过 **top** 为此提供了更好的选择。
-
-### top 命令
-
-如果你想查看某个特定用户下的进程,top 命令的 `-u` 选项可以很轻松地帮你达到这个目的。
-
-```
-$ top -u nemo
-top - 16:14:33 up 2 days, 4:27, 3 users, load average: 0.00, 0.01, 0.02
-Tasks: 199 total, 1 running, 198 sleeping, 0 stopped, 0 zombie
-%Cpu(s): 0.0 us, 0.2 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
-MiB Mem : 5959.4 total, 3277.3 free, 776.4 used, 1905.8 buff/cache
-MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 4878.4 avail Mem
-
- PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
-23026 nemo 20 0 46340 7820 6504 S 0.0 0.1 0:00.05 systemd
-23033 nemo 20 0 149660 3140 72 S 0.0 0.1 0:00.00 (sd-pam)
-23125 nemo 20 0 63396 5100 4092 S 0.0 0.1 0:00.00 sshd
-23128 nemo 20 0 16836 5636 4284 S 0.0 0.1 0:00.03 zsh
-```
-
-你可能不仅可以看到某个用户下的进程,还可以查看每个进程所占用的资源,以及系统总的工作状况。
-
-### ac 命令
-
-如果你想查看系统中每个用户登录的时长,可以使用 **ac** 命令。运行该命令之前首先需要安装 **acct**(Debian 等) 或者 **psacct**(RHEL、Centos 等) 包。
-
-**ac** 命令有一系列的选项,该命令从 **wtmp** 文件中拉取数据。这个例子展示的是最近用户登录的总小时数。
-
-```
-$ ac
- total 1261.72
-```
-
-这个命令显示了用户登录的总的小时数:
-
-```
-$ ac -p
- shark 5.24
- nemo 5.52
- shs 1251.00
- total 1261.76
-```
-
-这个命令显示了用户每天登录的小时数:
-
-```
-$ ac -d | tail -10
-
-Jan 11 total 0.05
-Jan 12 total 1.36
-Jan 13 total 16.39
-Jan 15 total 55.33
-Jan 16 total 38.02
-Jan 17 total 28.51
-Jan 19 total 48.66
-Jan 20 total 1.37
-Jan 22 total 23.48
-Today total 9.83
-```
-
-### 总结
-
-Linux 系统上有很多命令可以用于检查系统活动。**watch** 命令允许你以重复的方式运行任何命令,并观察输出有何变化。**top** 命令是一个专注于用户进程的最佳选项,以及允许你以动态方式查看进程的变化,还可以使用 **ac** 命令检查用户连接到系统的时间。
-
-加入 [Facebook][1] 和 [LinkedIn][2] 上的 Network World 社区,来交流更多有用的主题。
-
---------------------------------------------------------------------------------
-
-via: https://www.networkworld.com/article/3335200/linux/how-to-monitor-activity-on-your-linux-server.html
-
-作者:[Sandra Henry-Stocker][a]
-选题:[lujun9972][b]
-译者:[dianbanjiu](https://github.com/dianbanjiu)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]: https://www.networkworld.com/author/Sandra-Henry_Stocker/
-[b]: https://github.com/lujun9972
-[1]: https://www.facebook.com/NetworkWorld/
-[2]: https://www.linkedin.com/company/network-world
diff --git a/translated/tech/20190415 Kubernetes on Fedora IoT with k3s.md b/translated/tech/20190415 Kubernetes on Fedora IoT with k3s.md
new file mode 100644
index 0000000000..82729f24a3
--- /dev/null
+++ b/translated/tech/20190415 Kubernetes on Fedora IoT with k3s.md
@@ -0,0 +1,209 @@
+[#]: collector: (lujun9972)
+[#]: translator: (StdioA)
+[#]: reviewer: ( )
+[#]: publisher: ( )
+[#]: url: ( )
+[#]: subject: (Kubernetes on Fedora IoT with k3s)
+[#]: via: (https://fedoramagazine.org/kubernetes-on-fedora-iot-with-k3s/)
+[#]: author: (Lennart Jern https://fedoramagazine.org/author/lennartj/)
+
+使用 k3s 在 Fedora IoT 上运行 Kubernetes
+======
+
+![][1]
+
+Fedora IoT 是一个即将发布的、面相物联网的 Fedora 版本。去年 Fedora Magazine 中的《如何使用 Fedora IOT 点亮 LED》一文,第一次介绍了它。从那以后,它与 Fedora Silverblue 一起不断改进,以提供针对面相容器的工作流程的不可变基础操作系统。
+
+Kubernetes 是一个颇受欢迎的容器编排系统。它可能最常用在那些能够处理巨大负载的强劲硬件上。不过,它也能在像树莓派 3 这样轻量级的设备上运行。我们继续阅读,来了解如何运行它。
+
+### 为什么用 Kubernetes?
+
+虽然 Kubernetes 在云计算领域风靡一时,但让它在小型单板机上运行可能并不是显而易见的。不过,我们有非常明确的理由来做这件事。首先,这是一个不需要昂贵硬件就可以学习并熟悉 Kubernetes 的好方法;其次,由于它的流行性,市面上有[大量应用][2]进行了预先打包,以用于在 Kubernetes 集群中运行。更不用说,当你遇到问题时,会有大规模的社区用户为你提供帮助。
+
+最后但同样重要的是,即使是在家庭实验室这样的小规模环境中,容器编排也确实能事情变得更加简单。虽然在学习曲线方面,这一点并不明显,但这些技能在你将来与任何集群打交道的时候都会有帮助。不管你面对的是一个单节点树莓派集群,还是一个大规模的机器学习场,它们的操作方式都是类似的。
+
+#### K3s - 轻量级的 Kubernetes
+
+一个 Kubernetes 的“正常”安装(如果有这么一说的话)对于物联网来说有点沉重。K8s 的推荐内存配置,是每台机器 2GB!不过,我们也有一些替代品,其中一个新人是 [k3s][4]——一个轻量级的 Kubernetes 发行版。
+
+K3s 非常特殊,因为它将 etcd 替换成了 SQLite 以满足键值存储需求。还有一点,在于整个 k3s 将使用一个二进制文件分发,而不是每个组件一个。这减少了内存占用并简化了安装过程。基于上述原因,我们只需要 512MB 内存即可运行 k3s,简直适合小型单板电脑!
+
+### 你需要的东西
+
+1. 在虚拟机或实体设备中运行的 Fedora IoT。在[这里][5]可以看到优秀的入门指南。一台机器就足够了,不过两台可以用来测试向集群添加更多节点。
+2. [配置防火墙][6],允许 6443 和 8372 端口的通信。或者,你也可以简单地运行“systemctl stop firewalld”来为这次实验关闭防火墙。
+
+### 安装 k3s
+
+安装 k3s 非常简单。直接运行安装脚本:
+
+```
+curl -sfL https://get.k3s.io | sh -
+```
+
+它会下载、安装并启动 k3s。安装完成后,运行以下命令来从服务器获取节点列表:
+
+```
+kubectl get nodes
+```
+
+需要注意的是,有几个选项可以通过环境变量传递给安装脚本。这些选项可以在[文档][7]中找到。当然,你也完全可以直接下载二进制文件来手动安装 k3s。
+
+对于实验和学习来说,这样已经很棒了,不过单节点的集群也不是一个集群。幸运的是,添加另一个节点并不比设置第一个节点要难。只需要向安装脚本传递两个环境变量,它就可以找到第一个节点,避免运行 k3s 的服务器部分。
+
+```
+curl -sfL https://get.k3s.io | K3S_URL=https://example-url:6443 \
+ K3S_TOKEN=XXX sh -
+```
+
+上面的 example-url 应被替换为第一个节点的 IP 地址,或一个经过完全限定的域名。在该节点中,(用 XXX 表示的)令牌可以在 /var/lib/rancher/k3s/server/node-token 文件中找到。
+
+### 部署一些容器
+
+现在我们有了一个 Kubernetes 集群,我们可以真正做些什么呢?让我们从部署一个简单的 Web 服务器开始吧。
+
+```
+kubectl create deployment my-server --image nginx
+```
+
+这会从名为“nginx”的容器镜像中创建出一个名叫“my-server”的 [Deployment][8](镜像名默认使用 docker hub 注册中心,以及 latest 标签)。
+
+```
+kubectl get pods
+```
+
+为了接触到 pod 中运行的 nginx 服务器,首先将 Deployment 通过一个 [Service][9] 来进行暴露。以下命令将创建一个与 Deployment 同名的 Service。
+
+```
+kubectl expose deployment my-server --port 80
+```
+
+Service 将作为一种负载均衡器和 Pod 的 DNS 记录来工作。比如,当运行第二个 Pod 时,我们只需指定 _my-server_(Service 名称)就可以通过 _curl_ 访问 nginx 服务器。有关如何操作,可以看下面的实例。
+
+```
+# 启动一个 pod,在里面以交互方式运行 bash
+kubectl run debug --generator=run-pod/v1 --image=fedora -it -- bash
+# 等待 bash 提示符出现
+curl my-server
+# 你可以看到“Welcome to nginx!”的输出页面
+```
+
+### Ingress 控制器及外部 IP
+
+默认状态下,一个 Service 只能获得一个 ClusterIP(只能从集群内部访问),但你也可以通过把它的类型设置为 [LoadBalancer][10] 为服务申请一个外部 IP。不过,并非所有应用都需要自己的 IP 地址。相反,通常可以通过基于 Host 请求头部或请求路径进行路由,从而使多个服务共享一个 IP 地址。你可以在 Kubernetes 使用 [Ingress][11] 完成此操作,而这也是我们要做的。Ingress 也提供了额外的功能,比如无需配置应用,即可对流量进行 TLS 加密。
+
+Kubernetes 需要入口控制器来使 Ingress 资源工作,k3s 包含 [Traefik][12] 正是出于此目的。它还包含了一个简单的服务负载均衡器,可以为集群中的服务提供外部 IP。这篇[文档][13]描述了这种服务:
+
+> k3s 包含一个使用可用主机端口的基础服务负载均衡器。比如,如果你尝试创建一个监听 80 端口的负载均衡器,它会尝试在集群中寻找一个 80 端口空闲的节点。如果没有可用端口,那么负载均衡器将保持在 Pending 状态。
+>
+> k3s README
+
+入口控制器已经通过这个负载均衡器暴露在外。你可以使用以下命令找到它正在使用的 IP 地址。
+
+```
+$ kubectl get svc --all-namespaces
+NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
+ default kubernetes ClusterIP 10.43.0.1 443/TCP 33d
+ default my-server ClusterIP 10.43.174.38 80/TCP 30m
+ kube-system kube-dns ClusterIP 10.43.0.10 53/UDP,53/TCP,9153/TCP 33d
+ kube-system traefik LoadBalancer 10.43.145.104 10.0.0.8 80:31596/TCP,443:31539/TCP 33d
+```
+
+找到名为 traefik 的 Service。在上面的例子中,我们感兴趣的 IP 是 10.0.0.8。
+
+### 路由传入的请求
+
+让我们创建一个 Ingress,使它通过基于 Host 头部的路由规则将请求路由至我们的服务器。这个例子中我们使用 [xip.io][14] 来避免必要的 DNS 记录配置工作。它的工作原理是将 IP 地址作为子域包含,以使用10.0.0.8.xip.io的任何子域来达到IP 10.0.0.8。换句话说,my-server.10.0.0.8.xip.io 被用于访问集群中的入口控制器。你现在就可以尝试(使用你自己的 IP,而不是 10.0.0.8)。如果没有入口,你应该会访问到“默认后端”,只是一个写着“404 page not found”的页面。
+
+我们可以使用以下 Ingress 让入口控制器将请求路由到我们的 Web 服务器 Service。
+
+```
+apiVersion: extensions/v1beta1
+kind: Ingress
+metadata:
+ name: my-server
+spec:
+ rules:
+ - host: my-server.10.0.0.8.xip.io
+ http:
+ paths:
+ - path: /
+ backend:
+ serviceName: my-server
+ servicePort: 80
+```
+
+将以上片段保存到 _my-ingress.yaml_ 文件中,然后运行以下命令将其加入集群:
+
+```
+kubectl apply -f my-ingress.yaml
+```
+
+你现在应该能够在你选择的完全限定域名中访问到 nginx 的默认欢迎页面了。在我的例子中,它是 my-server.10.0.0.8.xip.io。入口控制器会通过 Ingress 中包含的信息来路由请求。对 my-server.10.0.0.8.xip.io 的请求将被路由到 Ingress 中定义为“后端”的 Service 和端口(在本例中为 my-server 和 80)。
+
+### 那么,物联网呢?
+
+想象如下场景:你的家伙农场周围有很多的设备。它是一个具有各种硬件功能,传感器和执行器的物联网设备的异构集合。也许某些设备拥有摄像头,天气或光线传感器。其它设备可能会被连接起来,用来控制通风、灯光、百叶窗或闪烁的LED。
+
+这种情况下,你想从所有传感器中收集数据,在最终使用它来制定决策和控制执行器之前,也可能会对其进行处理和分析。除此之外,你可能还想配置一个仪表盘来可视化那些正在发生的事情。那么 Kubernetes 如何帮助我们来管理这样的事情呢?我们怎么保证 Pod 在合适的设备上运行?
+
+简单的答案就是“标签”。你可以根据功能来标记节点,如下所示:
+
+```
+kubectl label nodes =
+# 举例
+kubectl label nodes node2 camera=available
+```
+
+一旦它们被打上标签,我们就可以轻松地使用 [nodeSelector][15] 为你的工作负载选择合适的节点。拼图的最后一块:如果你想在_所有_合适的节点上运行 Pod,那应该使用 [DaemonSet][16] 而不是 Deployment。换句话说,应为每个使用唯一传感器的数据收集应用程序创建一个 DaemonSet,并使用 nodeSelectors 确保它们仅在具有适当硬件的节点上运行。
+
+服务发现功能允许 Pod 通过 Service 名称来寻找彼此,这项功能使得这类分布式系统的管理工作变得易如反掌。你不需要为应用配置 IP 地址或自定义端口,也不需要知道它们。相反,它们可以通过集群中的具名 Service 轻松找到彼此。
+
+#### 充分利用空闲资源
+
+随着集群的启动并运行,收集数据并控制灯光和气候可能使你觉得你已经把它完成了。不过,集群中还有大量的计算资源可以用于其它项目。这才是 Kubernetes 真正出彩的地方。
+
+你不必担心这些资源的确切位置,或者去计算是否有足够的内存来容纳额外的应用程序。这正是编排系统所解决的问题!你可以轻松地在集群中部署更多的应用,让 Kubernetes 来找出适合运行它们的位置(或是否适合运行它们)。
+
+为什么不运行一个你自己的 [NextCloud][17] 实例呢?或者运行 [gitea][18]?你还可以为你所有的物联网容器设置一套 CI/CD 流水线。毕竟,如果你可以在集群中进行本地构建,为什么还要在主计算机上构建并交叉编译它们呢?
+
+这里的要点是,Kubernetes 可以更容易地利用那些你可能浪费掉的“隐藏”资源。Kubernetes 根据可用资源和容错处理规则来调度 Pod,因此你也无需手动完成这些工作。但是,为了帮助 Kubernetes 做出合理的决定,你绝对应该为你的工作负载添加[资源请求][19]配置。
+
+### 总结
+
+尽管 Kuberenetes 或一般的容器编排平台通常不会与物联网相关联,但在管理分布式系统时,使用一个编排系统肯定是有意义的。你不仅可以使用统一的方式来处理多样化和异构的设备,还可以简化它们的通信方式。此外,Kubernetes 还可以更好地对闲置资源加以利用。
+
+容器技术使构建“随处运行”应用的想法成为可能。现在,Kubernetes 可以更轻松地来负责“随处”的部分。作为构建一切的不可变基础,我们使用 Fedora IoT。
+
+--------------------------------------------------------------------------------
+
+via: https://fedoramagazine.org/kubernetes-on-fedora-iot-with-k3s/
+
+作者:[Lennart Jern][a]
+选题:[lujun9972][b]
+译者:[StdioA](https://github.com/StdioA)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://fedoramagazine.org/author/lennartj/
+[b]: https://github.com/lujun9972
+[1]: https://fedoramagazine.org/wp-content/uploads/2019/04/k3s-1-816x345.png
+[2]: https://fedoramagazine.org/turnon-led-fedora-iot/
+[3]: https://hub.helm.sh/
+[4]: https://k3s.io
+[5]: https://docs.fedoraproject.org/en-US/iot/getting-started/
+[6]: https://github.com/rancher/k3s#open-ports--network-security
+[7]: https://github.com/rancher/k3s#systemd
+[8]: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/
+[9]: https://kubernetes.io/docs/concepts/services-networking/service/
+[10]: https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer
+[11]: https://kubernetes.io/docs/concepts/services-networking/ingress/
+[12]: https://traefik.io/
+[13]: https://github.com/rancher/k3s/blob/master/README.md#service-load-balancer
+[14]: http://xip.io/
+[15]: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
+[16]: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/
+[17]: https://nextcloud.com/
+[18]: https://gitea.io/en-us/
+[19]: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
diff --git a/translated/tech/20190417 Inter-process communication in Linux- Sockets and signals.md b/translated/tech/20190417 Inter-process communication in Linux- Sockets and signals.md
new file mode 100644
index 0000000000..4e7a06c983
--- /dev/null
+++ b/translated/tech/20190417 Inter-process communication in Linux- Sockets and signals.md
@@ -0,0 +1,372 @@
+[#]: collector: "lujun9972"
+[#]: translator: "FSSlc"
+[#]: reviewer: " "
+[#]: publisher: " "
+[#]: url: " "
+[#]: subject: "Inter-process communication in Linux: Sockets and signals"
+[#]: via: "https://opensource.com/article/19/4/interprocess-communication-linux-networking"
+[#]: author: "Marty Kalin https://opensource.com/users/mkalindepauledu"
+
+Linux 下的进程间通信:套接字和信号
+======
+
+学习在 Linux 中进程是如何与其他进程进行同步的。
+
+
+
+本篇是 Linux 下[进程间通信][1](IPC)系列的第三篇同时也是最后一篇文章。[第一篇文章][2]聚焦在通过共享存储(文件和共享内存段)来进行 IPC,[第二篇文章][3]则通过管道(无名的或者有名的)及消息队列来达到相同的目的。这篇文章将目光从高处(套接字)然后到低处(信号)来关注 IPC。代码示例将用力地充实下面的解释细节。
+
+### 套接字
+
+正如管道有两种类型(有名和无名)一样,套接字也有两种类型。IPC 套接字(即 Unix domain socket)给予进程在相同设备(主机)上基于通道的通信能力;而网络套接字给予进程运行在不同主机的能力,因此也带来了网络通信的能力。网络套接字需要底层协议的支持,例如 TCP(传输控制协议)或 UDP(用户数据报协议)。
+
+与之相反,IPC 套接字依赖于本地系统内核的支持来进行通信;特别的,IPC 通信使用一个本地的文件作为套接字地址。尽管这两种套接字的实现有所不同,但在本质上,IPC 套接字和网络套接字的 API 是一致的。接下来的例子将包含网络套接字的内容,但示例服务器和客户端程序可以在相同的机器上运行,因为服务器使用了 localhost(127.0.0.1)这个网络地址,该地址表示的是本地机器上的本地机器的地址。
+
+套接字以流的形式(下面将会讨论到)被配置为双向的,并且其控制遵循 C/S(客户端/服务器端)模式:客户端通过尝试连接一个服务器来初始化对话,而服务器端将尝试接受该连接。假如万事顺利,来自客户端的请求和来自服务器端的响应将通过管道进行传输,直到其中任意一方关闭该通道,从而断开这个连接。
+
+一个`迭代服务器`(只适用于开发)将一直和连接它的客户端打交道:从最开始服务第一个客户端,然后到这个连接关闭,然后服务第二个客户端,循环往复。这种方式的一个缺点是处理一个特定的客户端可能会一直持续下去,使得其他的客户端一直在后面等待。生产级别的服务器将是并发的,通常使用了多进程或者多线程的混合。例如,我台式机上的 Nginx 网络服务器有一个 4 个 worker 的进程池,它们可以并发地处理客户端的请求。在下面的代码示例中,我们将使用迭代服务器,使得我们将要处理的问题达到一个很小的规模,只关注基本的 API,而不去关心并发的问题。
+
+最后,随着各种 POSIX 改进的出现,套接字 API 随着时间的推移而发生了显著的变化。当前针对服务器端和客户端的示例代码特意写的比较简单,但是它着重强调了基于流的套接字中连接的双方。下面是关于流控制的一个总结,其中服务器端在一个终端中开启,而客户端在另一个不同的终端中开启:
+
+ * 服务器端等待客户端的连接,对于给定的一个成功连接,它就读取来自客户端的数据。
+ * 为了强调是双方的会话,服务器端会对接收自客户端的数据做回应。这些数据都是 ASCII 字符代码,它们组成了一些书的标题。
+ * 客户端将书的标题写给服务器端的进程,并从服务器端的回应中读取到相同的标题。然后客户端和服务器端都在屏幕上打印出标题。下面是服务器端的输出,客户端的输出也和它完全一样:
+
+```
+Listening on port 9876 for clients...
+War and Peace
+Pride and Prejudice
+The Sound and the Fury
+```
+
+#### 示例 1. 使用套接字的客户端程序
+
+```c
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include "sock.h"
+
+void report(const char* msg, int terminate) {
+ perror(msg);
+ if (terminate) exit(-1); /* failure */
+}
+
+int main() {
+ int fd = socket(AF_INET, /* network versus AF_LOCAL */
+ SOCK_STREAM, /* reliable, bidirectional: TCP */
+ 0); /* system picks underlying protocol */
+ if (fd < 0) report("socket", 1); /* terminate */
+
+ /* bind the server's local address in memory */
+ struct sockaddr_in saddr;
+ memset(&saddr, 0, sizeof(saddr)); /* clear the bytes */
+ saddr.sin_family = AF_INET; /* versus AF_LOCAL */
+ saddr.sin_addr.s_addr = htonl(INADDR_ANY); /* host-to-network endian */
+ saddr.sin_port = htons(PortNumber); /* for listening */
+
+ if (bind(fd, (struct sockaddr *) &saddr, sizeof(saddr)) < 0)
+ report("bind", 1); /* terminate */
+
+ /* listen to the socket */
+ if (listen(fd, MaxConnects) < 0) /* listen for clients, up to MaxConnects */
+ report("listen", 1); /* terminate */
+
+ fprintf(stderr, "Listening on port %i for clients...\n", PortNumber);
+ /* a server traditionally listens indefinitely */
+ while (1) {
+ struct sockaddr_in caddr; /* client address */
+ int len = sizeof(caddr); /* address length could change */
+
+ int client_fd = accept(fd, (struct sockaddr*) &caddr, &len); /* accept blocks */
+ if (client_fd < 0) {
+ report("accept", 0); /* don't terminated, though there's a problem */
+ continue;
+ }
+
+ /* read from client */
+ int i;
+ for (i = 0; i < ConversationLen; i++) {
+ char buffer[BuffSize + 1];
+ memset(buffer, '\0', sizeof(buffer));
+ int count = read(client_fd, buffer, sizeof(buffer));
+ if (count > 0) {
+ puts(buffer);
+ write(client_fd, buffer, sizeof(buffer)); /* echo as confirmation */
+ }
+ }
+ close(client_fd); /* break connection */
+ } /* while(1) */
+ return 0;
+}
+```
+
+上面的服务器端程序执行典型的 4 个步骤来准备回应客户端的请求,然后接受其他的独立请求。这里每一个步骤都以服务器端程序调用的系统函数来命名。
+
+ 1. `socket(…)` : 为套接字连接获取一个文件描述符
+ 2. `bind(…)` : 将套接字和服务器主机上的一个地址进行绑定
+ 3. `listen(…)` : 监听客户端请求
+ 4. `accept(…)` :接受一个特定的客户端请求
+
+上面的 `socket` 调用的完整形式为:
+
+```
+int sockfd = socket(AF_INET, /* versus AF_LOCAL */
+ SOCK_STREAM, /* reliable, bidirectional */
+ 0); /* system picks protocol (TCP) */
+```
+
+第一个参数特别指定了使用的是一个网络套接字,而不是 IPC 套接字。对于第二个参数有多种选项,但 `SOCK_STREAM` 和 `SOCK_DGRAM`(数据报)是最为常用的。基于流的套接字支持可信通道,在这种通道中如果发生了信息的丢失或者更改,都将会被报告。这种通道是双向的,并且从一端到另外一端的有效载荷在大小上可以是任意的。相反的,基于数据报的套接字大多是不可信的,没有方向性,并且需要固定大小的载荷。`socket` 的第三个参数特别指定了协议。对于这里展示的基于流的套接字,只有一种协议选择:TCP,在这里表示的 `0`;。因为对 `socket` 的一次成功调用将返回相似的文件描述符,一个套接字将会被读写,对应的语法和读写一个本地文件是类似的。
+
+对 `bind` 的调用是最为复杂的,因为它反映出了在套接字 API 方面上的各种改进。我们感兴趣的点是这个调用将一个套接字和服务器端所在机器中的一个内存地址进行绑定。但对 `listen` 的调用就非常直接了:
+
+```
+if (listen(fd, MaxConnects) < 0)
+```
+
+第一个参数是套接字的文件描述符,第二个参数则指定了在服务器端处理一个拒绝连接错误之前,有多少个客户端连接被允许连接。(在头文件 `sock.h` 中 `MaxConnects` 的值被设置为 `8`。)
+
+`accept` 调用默认将是一个拥塞等待:服务器端将不做任何事情直到一个客户端尝试连接它,然后进行处理。`accept` 函数返回的值如果是 `-1` 则暗示有错误发生。假如这个调用是成功的,则它将返回另一个文件描述符,这个文件描述符被用来指代另一个可读可写的套接字,它与 `accept` 调用中的第一个参数对应的接收套接字有所不同。服务器端使用这个可读可写的套接字来从客户端读取请求然后写回它的回应。接收套接字只被用于接受客户端的连接。
+
+在设计上,一个服务器端可以一直运行下去。当然服务器端可以通过在命令行中使用 `Ctrl+C` 来终止它。
+
+#### 示例 2. 使用套接字的客户端
+
+```c
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include "sock.h"
+
+const char* books[] = {"War and Peace",
+ "Pride and Prejudice",
+ "The Sound and the Fury"};
+
+void report(const char* msg, int terminate) {
+ perror(msg);
+ if (terminate) exit(-1); /* failure */
+}
+
+int main() {
+ /* fd for the socket */
+ int sockfd = socket(AF_INET, /* versus AF_LOCAL */
+ SOCK_STREAM, /* reliable, bidirectional */
+ 0); /* system picks protocol (TCP) */
+ if (sockfd < 0) report("socket", 1); /* terminate */
+
+ /* get the address of the host */
+ struct hostent* hptr = gethostbyname(Host); /* localhost: 127.0.0.1 */
+ if (!hptr) report("gethostbyname", 1); /* is hptr NULL? */
+ if (hptr->h_addrtype != AF_INET) /* versus AF_LOCAL */
+ report("bad address family", 1);
+
+ /* connect to the server: configure server's address 1st */
+ struct sockaddr_in saddr;
+ memset(&saddr, 0, sizeof(saddr));
+ saddr.sin_family = AF_INET;
+ saddr.sin_addr.s_addr =
+ ((struct in_addr*) hptr->h_addr_list[0])->s_addr;
+ saddr.sin_port = htons(PortNumber); /* port number in big-endian */
+
+ if (connect(sockfd, (struct sockaddr*) &saddr, sizeof(saddr)) < 0)
+ report("connect", 1);
+
+ /* Write some stuff and read the echoes. */
+ puts("Connect to server, about to write some stuff...");
+ int i;
+ for (i = 0; i < ConversationLen; i++) {
+ if (write(sockfd, books[i], strlen(books[i])) > 0) {
+ /* get confirmation echoed from server and print */
+ char buffer[BuffSize + 1];
+ memset(buffer, '\0', sizeof(buffer));
+ if (read(sockfd, buffer, sizeof(buffer)) > 0)
+ puts(buffer);
+ }
+ }
+ puts("Client done, about to exit...");
+ close(sockfd); /* close the connection */
+ return 0;
+}
+```
+
+客户端程序的设置代码和服务器端类似。两者主要的区别既不是在于监听也不在于接收,而是连接:
+
+```
+if (connect(sockfd, (struct sockaddr*) &saddr, sizeof(saddr)) < 0)
+```
+
+对 `connect` 的调用可能因为多种原因而导致失败,例如客户端拥有错误的服务器端地址或者已经有太多的客户端连接上了服务器端。假如 `connect` 操作成功,客户端将在一个 `for` 循环中,写入它的响应然后读取返回的响应。在经过会话后,服务器端和客户端都将调用 `close` 去关闭可读可写套接字,尽管其中一个关闭操作已经足以关闭他们之间的连接,但此时客户端可能就此关闭,但正如前面提到的那样,服务器端将一直保持开放以处理其他事务。
+
+从上面的套接示例中,我们看到了请求信息被返回给客户端,这使得客户端和服务器端之间拥有进行丰富对话的可能性。也许这就是套接字的主要魅力。在现代系统中,客户端应用(例如一个数据库客户端)和服务器端通过套接字进行通信非常常见。正如先前提及的那样,本地 IPC 套接字和网络套接字只在某些实现细节上面有所不同,一般来说,IPC 套接字有着更低的消耗和更好的性能。它们的通信 API 基本是一样的。
+
+### 信号
+
+一个信号中断了一个正在执行的程序,在这种意义下,就是用信号与这个程序进行通信。大多数的信号要么可以被忽略(阻塞)或者被处理(通过特别设计的代码)。`SIGSTOP` (暂停)和 `SIGKILL`(立即停止)是最应该提及的两种信号。符号常数拥有整数类型的值,例如 `SIGKILL` 对应的值为 `9`。
+
+信号可以在与用户交互的情况下发生。例如,一个用户从命令行中敲了 `Ctrl+C` 来从命令行中终止一个程序;`Ctrl+C` 将产生一个 `SIGTERM` 信号。针对终止,`SIGTERM` 信号可以被阻塞或者被处理,而不像 `SIGKILL` 信号那样。一个进程也可以通过信号和另一个进程通信,这样使得信号也可以作为一种 IPC 机制。
+
+考虑一下一个多进程应用,例如 Nginx 网络服务器是如何被另一个进程优雅地关闭的。`kill` 函数:
+
+```
+int kill(pid_t pid, int signum); /* declaration */
+```
+bei
+可以被一个进程用来终止另一个进程或者一组进程。假如 `kill` 函数的第一个参数是大于 `0` 的,那么这个参数将会被认为是目标进程的 pid(进程 ID),假如这个参数是 `0`,则这个参数将会被识别为信号发送者所属的那组进程。
+
+`kill` 的第二个参数要么是一个标准的信号数字(例如 `SIGTERM` 或 `SIGKILL`),要么是 `0` ,这将会对信号做一次询问,确认第一个参数中的 pid 是否是有效的。这样将一个多进程应用的优雅地关闭就可以通过向组成该应用的一组进程发送一个终止信号来完成,具体来说就是调用一个 `kill` 函数,使得这个调用的第二个参数是 `SIGTERM` 。(Nginx 主进程可以通过调用 `kill` 函数来终止其他 worker 进程,然后再停止自己。)就像许多库函数一样,`kill` 函数通过一个简单的可变语法拥有更多的能力和灵活性。
+
+#### 示例 3. 一个多进程系统的优雅停止
+
+```c
+#include
+#include
+#include