From 8087a97a20cf846011c8dfb30acd0e545295d405 Mon Sep 17 00:00:00 2001 From: darksun Date: Thu, 25 Oct 2018 15:03:46 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E9=80=89=E9=A2=98:=20Why=20it=20matters=20?= =?UTF-8?q?that=20Microsoft=20released=20old=20versions=20of=20MS-DOS=20as?= =?UTF-8?q?=20open=20source?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...d old versions of MS-DOS as open source.md | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 sources/talk/20181024 Why it matters that Microsoft released old versions of MS-DOS as open source.md diff --git a/sources/talk/20181024 Why it matters that Microsoft released old versions of MS-DOS as open source.md b/sources/talk/20181024 Why it matters that Microsoft released old versions of MS-DOS as open source.md new file mode 100644 index 0000000000..3129e4b6f0 --- /dev/null +++ b/sources/talk/20181024 Why it matters that Microsoft released old versions of MS-DOS as open source.md @@ -0,0 +1,74 @@ +Why it matters that Microsoft released old versions of MS-DOS as open source +====== + +Microsoft's release of MS-DOS 1.25 and 2.0 on GitHub adopts an open source license that's compatible with GNU GPL. +![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/open_business_sign_store.jpg?itok=g4QibRqg) + +One open source software project I work on is the FreeDOS Project. It's a complete, free, DOS-compatible operating system that you can use to play classic DOS games, run legacy business software, or develop embedded systems. Any program that works on MS-DOS should also run on FreeDOS. + +So I took notice when Microsoft recently released the source code to MS-DOS 1.25 and 2.0 via a [GitHub repository][1]. This is a huge step for Microsoft, and I’d like to briefly explain why it is significant. + +### MS-DOS as open source software + +Some open source fans may recall that this is not the first time Microsoft has officially released the MS-DOS source code. On March 25, 2014, Microsoft posted the source code to MS-DOS 1.1 and 2.0 via the [Computer History Museum][2]. Unfortunately, this source code was released under a “look but do not touch” license that limited what you could do with it. According to the license from the 2014 source code release, users were barred from re-using it in other projects and could use it “[solely for non-commercial research, experimentation, and educational purposes.][3]” + +The museum license wasn’t friendly to open source software, and as a result, the MS-DOS source code was ignored. On the FreeDOS Project, we interpreted the “look but do not touch” license as a potential risk to FreeDOS, so we decided developers who had viewed the MS-DOS source code could not contribute to FreeDOS. + +But Microsoft’s recent MS-DOS source code release represents a significant change. This MS-DOS source code uses the MIT License (also called the Expat License). Quoting Microsoft’s [LICENSE.md][4] file on GitHub: + +> ## MS-DOS v1.25 and v2.0 Source Code +> +> Copyright © Microsoft Corporation. +> +> All rights reserved. +> +> MIT License. +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,TORT OR OTHERWISE, ARISING FROM OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +If that text looks familiar to you, it is because that’s the same text as the MIT License recognized by the [Open Source Initiative][5]. It’s also the same as the Expat License recognized by the [Free Software Foundation][6]. + +The Free Software Foundation (via GNU) says the Expat License is compatible with the [GNU General Public License][7]. Specifically, GNU describes the Expat License as “a lax, permissive non-copyleft free software license, compatible with the GNU GPL. It is sometimes ambiguously referred to as the MIT License.” Also according to GNU, when they say a license is [compatible with the GNU GPL][8], “you can combine code released under the other license [MIT/Expat License] with code released under the GNU GPL in one larger program.” + +Microsoft’s use of the MIT/Expat License for the original MS-DOS source code is significant because the license is not only open source software but free software. + +### What does it mean? + +This is great, but there’s a practical side to the source code release. You might think, “If Microsoft has released the MS-DOS source code under a license compatible with the GNU GPL, will that help FreeDOS?” + +Not really. Here's why: FreeDOS started from an original source code base, independent from MS-DOS. Certain functions and behaviors of MS-DOS were identified and documented in the comprehensive [Interrupt List by Ralf Brown][9], and we provided MS-DOS compatibility in FreeDOS by referencing the Interrupt List. But many significant fundamental technical differences remain between FreeDOS and MS-DOS. For example, FreeDOS uses a completely different memory structure and memory layout. You can’t simply forklift MS-DOS source code into FreeDOS and expect it to work. The code assumptions are quite different. + +There’s also the simple matter that these are very old versions of MS-DOS. For example, MS-DOS 2.0 was the first version to support directories and redirection. But these versions of MS-DOS did not yet include more advanced features, including networking, CDROM support, and ’386 support such as EMM386. These features have been standard in FreeDOS for a long time. + +So the MS-DOS source code release is interesting, but FreeDOS would not be able to reuse this code for any modern features anyway. FreeDOS has already surpassed these versions of MS-DOS in functionality and features. + +### Congratulations + +Still, it’s important to recognize the big step that Microsoft has taken in releasing these versions of MS-DOS as open source software. The new MS-DOS source code release on GitHub does away with the restrictive license from 2014 and adopts a recognized open source software license that is compatible with the GNU GPL. Congratulations to Microsoft for releasing MS-DOS 1.25 and 2.0 under an open source license! + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/18/10/microsoft-open-source-old-versions-ms-dos + +作者:[Jim Hall][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/jim-hall +[b]: https://github.com/lujun9972 +[1]: https://github.com/Microsoft/MS-DOS +[2]: http://www.computerhistory.org/press/ms-source-code.html +[3]: http://www.computerhistory.org/atchm/microsoft-research-license-agreement-msdos-v1-1-v2-0/ +[4]: https://github.com/Microsoft/MS-DOS/blob/master/LICENSE.md +[5]: https://opensource.org/licenses/MIT +[6]: https://directory.fsf.org/wiki/License:Expat +[7]: https://www.gnu.org/licenses/license-list.en.html#Expat +[8]: https://www.gnu.org/licenses/gpl-faq.html#WhatDoesCompatMean +[9]: http://www.cs.cmu.edu/~ralf/files.html From a441cfb2c4d63236074ba0bba27705f54035417b Mon Sep 17 00:00:00 2001 From: darksun Date: Thu, 25 Oct 2018 15:05:21 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E9=80=89=E9=A2=98:=205=20tips=20for=20faci?= =?UTF-8?q?litators=20of=20agile=20meetings?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...tips for facilitators of agile meetings.md | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 sources/talk/20181024 5 tips for facilitators of agile meetings.md diff --git a/sources/talk/20181024 5 tips for facilitators of agile meetings.md b/sources/talk/20181024 5 tips for facilitators of agile meetings.md new file mode 100644 index 0000000000..433140f684 --- /dev/null +++ b/sources/talk/20181024 5 tips for facilitators of agile meetings.md @@ -0,0 +1,60 @@ +5 tips for facilitators of agile meetings +====== +Boost your team's productivity and motivation with these agile principles. + +![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/diversity-women-meeting-team.png?itok=BdDKxT1w) + +As Agile practitioner, I often hear that the best way to have business meetings is to avoid more meetings, or to cancel them altogether. + +Do your meetings fail to keep attendees engaged or run longer than they should? Perhaps you have mixed feelings about participating in meetings—but don't want to be excluded? + +If all this sounds familiar, read on. + +### How do we fix meetings? + +To succeed in this role, you must understand that agile is not something that you do, but something that you can become. + +Meetings are an integral part of work culture, so improving them can bring important benefits. But improving how meetings are structured requires a change in how the entire organization is led and managed. This is where the agile mindset comes into play. + +An agile mindset is an _attitude that equates failure and problems with opportunities for learning, and a belief that we can all improve over time._ Meetings can bring great value to an organization, as long as they are not pointless. The best way to eliminate pointless meetings is to have a meeting facilitator with an agile mindset. The key attribute of agile-driven facilitation is to focus on problem-solving. + +Agile meeting facilitators confronting a complex problem start by breaking the meeting agenda down into modules. They also place more value on adapting to change than sticking to a plan. They work with meeting attendees to develop a solution based on feedback loops. This assures audience engagement and makes the meetings productive. The result is an integrated, agreed-upon solution that comprises a set of coherent action items aligned on a goal + +### What are the skills of an agile meeting facilitator? + +An agile meeting facilitator is able to quickly adapt to changing circumstances. He or she integrates all stakeholders and encourages them to share knowledge and skills. + +To succeed in this role, you must understand that agile is not something that you do, but something that you can become. As the [Manifesto for Agile Software Development][1] notes, tools and processes are important, but it is more important to have competent people working together effectively. + +### 5 tips for agile meeting facilitation + + 1. **Start with the problem in mind.** Identify the purpose of the meeting and narrow the agenda items to those that are most important. Stay tuned in and focused. + + 2. **Make sure that a senior leader doesn’t run the meeting.** Many senior leaders tend to create an environment in which the team expects to be told what to do. Instead, create an environment in which diverse ideas are the norm. Encourage open discussion in which leaders share where—but not how—innovation is needed. This reduces the layer of control and approval, increases the time focused on decision-making, and boosts the team’s motivation. + + 3. **Identify bottlenecks early.** Bureaucratic procedures or lack of collaboration between team members leads to meeting meltdowns and poor results. Anticipate how things might go wrong and be prepared to offer suggestions, not dictate solutions. + + 4. **Show, don’t tell.** Share the meeting goals and create the meeting agenda in advance. Allow time to adjust the agenda items and their order to achieve the best flow. Make sure that the meeting’s agenda is clear and visible to all attendees. + + 5. **Know when to wait.** Map out a clear timeline for the meeting and help keep the meeting on track. Understand when you should allow an item to go long versus when you should table a discussion. This will go a long way toward helping you stay on track. + + + + +The ultimate goal is to create a work environment that encourages contribution and empowers the team. Improving how meetings are run will help your organization transition from a traditional hierarchy to a more agile enterprise. + + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/18/10/agile-culture-5-tips-meeting-facilitators + +作者:[Dominika Bula][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/dominika +[b]: https://github.com/lujun9972 +[1]: http://agilemanifesto.org/ From 6d0a9479f848e4386ee4b2c8222f0dae8615c190 Mon Sep 17 00:00:00 2001 From: darksun Date: Thu, 25 Oct 2018 15:07:37 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E9=80=89=E9=A2=98:=20Getting=20started=20w?= =?UTF-8?q?ith=20functional=20programming=20in=20Python=20using=20the=20to?= =?UTF-8?q?olz=20library?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...mming in Python using the toolz library.md | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 sources/tech/20181023 Getting started with functional programming in Python using the toolz library.md diff --git a/sources/tech/20181023 Getting started with functional programming in Python using the toolz library.md b/sources/tech/20181023 Getting started with functional programming in Python using the toolz library.md new file mode 100644 index 0000000000..3d293a6d75 --- /dev/null +++ b/sources/tech/20181023 Getting started with functional programming in Python using the toolz library.md @@ -0,0 +1,92 @@ +Getting started with functional programming in Python using the toolz library +====== + +The toolz library allows you to manipulate functions, making it easier to understand and test code. + +![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/programming-code-keyboard-laptop-music-headphones.png?itok=EQZ2WKzy) + +In the second of a two-part series, we continue to explore how we can import ideas from functional programming methodology into Python to have the best of both worlds. + +In the previous post, we covered [immutable data structures][1]. Those allow us to write "pure" functions, or functions that have no side effects, merely accepting some arguments and returning a result while maintaining decent performance. + +In this post, we build on that using the `toolz` library. This library has functions that manipulate such functions, and they work especially well with pure functions. In the functional programming world, these are often referred to as "higher-order functions" since they take functions as arguments and return functions as results. + +Let's start with this: + +``` +def add_one_word(words, word): +    return words.set(words.get(word, 0) + 1) +``` + +This function assumes that its first argument is an immutable dict-like object, and it returns a new dict-like object with the relevant place incremented: It's a simple frequency counter. + +However, it is useful only if we apply it to a stream of words and reduce. We have access to a reducer in the built-in module `functools`. `functools.reduce(function, stream, initializer)`. + +We want a function that, applied to a stream, will return a frequency count. + +We start by using `toolz.curry`: + +``` +add_all_words = curry(functools.reduce, add_one_word) +``` + +With this version, we will need to supply the initializer. However, we can't just add `pyrsistent.m` to the `curry`; it is in the wrong order. + +``` +add_all_words_flipped = flip(add_all_words) +``` + +The `flip` higher-level function returns a function that calls the original, with arguments flipped. + +``` +get_all_words = add_all_words_flipped(pyrsistent.m()) +``` + +We take advantage of the fact that `flip` auto-curries its argument to give it a starting value: an empty dictionary. + +Now we can do `get_all_words(word_stream)` and get a frequency dictionary. However, how do we get a word stream? Python files are by line streams. + +``` +def to_words(lines): +    for line in lines: +        yield from line.split() +``` + +After testing each function by itself, we can combine them: + +``` +words_from_file = toolz.compose(get_all_words, to_words) +``` + +In this case, the composition being of just being two functions was straightforward to read: Apply `to_words` first, then apply `get_all_words` to the result. The prose, it seems, is in the inverse of the code. + +This matters when we start taking composability seriously. It is sometimes possible to write the code as a sequence of units, test each individually, and finally, compose them all. If there are several elements, the ordering of compose can get tricky to understand. + +The `toolz` library borrows from the Unix command line and uses `pipe` as a function that does the same, but in the reverse order. + +``` +words_from_file = toolz.pipe(to_words, get_all_words) +``` + +Now it reads more intuitively: Pipe the input into `to_words`, and pipe the results into `get_all_words`. On a command line, the equivalent would look like this: + +``` +$ cat files | to_words | get_all_words +``` + +The `toolz` library allows us to manipulate functions, slicing, dicing, and composing them to make our code easier to understand and to test. + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/18/10/functional-programming-python-toolz + +作者:[Moshe Zadka][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/moshez +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/article/18/10/functional-programming-python-immutable-data-structures From d3332559dc17661abe0964e6775ffea18b8ab394 Mon Sep 17 00:00:00 2001 From: darksun Date: Thu, 25 Oct 2018 15:09:58 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E9=80=89=E9=A2=98:=20Get=20organized=20at?= =?UTF-8?q?=20the=20Linux=20command=20line=20with=20Calcurse?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...at the Linux command line with Calcurse.md | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 sources/tech/20181024 Get organized at the Linux command line with Calcurse.md diff --git a/sources/tech/20181024 Get organized at the Linux command line with Calcurse.md b/sources/tech/20181024 Get organized at the Linux command line with Calcurse.md new file mode 100644 index 0000000000..b1f3c6d4d0 --- /dev/null +++ b/sources/tech/20181024 Get organized at the Linux command line with Calcurse.md @@ -0,0 +1,85 @@ +Get organized at the Linux command line with Calcurse +====== + +Keep up with your calendar and to-do list with Calcurse. + +![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/calendar.jpg?itok=jEKbhvDT) + +Do you need complex, feature-packed graphical or web applications to get and stay organized? I don't think so. The right command line tool can do the job and do it well. + +Of course, uttering the words command and line together can strike fear into the hearts of some Linux users. The command line, to them, is terra incognita. + +Organizing yourself at the command line is easy with [Calcurse][1]. Calcurse brings a graphical look and feel to a text-based interface. You get the simplicity and focus of the command line married to ease of use and navigation. + +Let's take a closer look at Calcurse, which is open sourced under the BSD License. + +### Getting the software + +If compiling code is your thing (it's not mine, generally), you can grab the source code from the [Calcurse website][1]. Otherwise, get the [binary installer][2] for your Linux distribution. You might even be able to get Calcurse from your Linux distro's package manager. It never hurts to check. + +Compile or install Calcurse (neither takes all that long), and you're ready to go. + +### Using Calcurse + +Crack open a terminal window and type **calcurse**. + +![](https://opensource.com/sites/default/files/uploads/calcurse-main.png) + +Calcurse's interface consists of three panels: + + * Appointments (the left side of the screen) + * Calendar (the top right) + * To-do list (the bottom right) + + + +Move between the panels by pressing the Tab key on your keyboard. To add a new item to a panel, press **a**. Calcurse walks you through what you need to do to add the item. + +One interesting quirk is that the Appointment and Calendar panels work together. You add an appointment by tabbing to the Calendar panel. There, you choose the date for your appointment. Once you do that, you tab back to the Appointments panel. I know … + +Press **a** to set a start time, a duration (in minutes), and a description of the appointment. The start time and duration are optional. Calcurse displays appointments on the day they're due. + +![](https://opensource.com/sites/default/files/uploads/calcurse-appointment.png) + +Here's what a day's appointments look like: + +![](https://opensource.com/sites/default/files/uploads/calcurse-appt-list.png) + +The to-do list works on its own. Tab to the ToDo panel and (again) press **a**. Type a description of the task, then set a priority (1 is the highest and 9 is the lowest). Calcurse lists your uncompleted tasks in the ToDo panel. + +![](https://opensource.com/sites/default/files/uploads/calcurse-todo.png) + +If your task has a long description, Calcurse truncates it. You can view long descriptions by navigating to the task using the up or down arrow keys on your keyboard, then pressing **v**. + +![](https://opensource.com/sites/default/files/uploads/calcurse-view-todo.png) + +Calcurse saves its information in text files in a hidden folder called **.calcurse** in your home directory—for example, **/home/scott/.calcurse**. If Calcurse stops working, it's easy to find your information. + +### Other useful features + +Other Calcurse features include the ability to set recurring appointments. To do that, find the appointment you want to repeat and press **r** in the Appointments panel. You'll be asked to set the frequency (for example, daily or weekly) and how long you want the appointment to repeat. + +You can also import calendars in [ICAL][3] format or export your data in either ICAL or [PCAL][4] format. With ICAL, you can share your data with other calendar applications. With PCAL, you can generate a Postscript version of your calendar. + +There are also a number of command line arguments you can pass to Calcurse. You can read about them [in the documentation][5]. + +While simple, Calcurse does a solid job of helping you keep organized. You'll need to be a bit more mindful of your tasks and appointments, but you'll be able to focus better on what you need to do and where you need to be. + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/18/10/calcurse + +作者:[Scott Nesbitt][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/scottnesbitt +[b]: https://github.com/lujun9972 +[1]: http://www.calcurse.org/ +[2]: http://www.calcurse.org/downloads/#packages +[3]: https://tools.ietf.org/html/rfc2445 +[4]: http://pcal.sourceforge.net/ +[5]: http://www.calcurse.org/files/manual.chunked/ar01s04.html#_invocation From 9dc8ff1a90d3892f48c9e5a70d08dee71146d7fe Mon Sep 17 00:00:00 2001 From: darksun Date: Thu, 25 Oct 2018 15:10:50 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E9=80=89=E9=A2=98:=204=20cool=20new=20proj?= =?UTF-8?q?ects=20to=20try=20in=20COPR=20for=20October=202018?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...rojects to try in COPR for October 2018.md | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 sources/tech/20181024 4 cool new projects to try in COPR for October 2018.md diff --git a/sources/tech/20181024 4 cool new projects to try in COPR for October 2018.md b/sources/tech/20181024 4 cool new projects to try in COPR for October 2018.md new file mode 100644 index 0000000000..465c6b2f50 --- /dev/null +++ b/sources/tech/20181024 4 cool new projects to try in COPR for October 2018.md @@ -0,0 +1,85 @@ +4 cool new projects to try in COPR for October 2018 +====== + +![](https://fedoramagazine.org/wp-content/uploads/2017/08/4-copr-945x400.jpg) + +COPR is a [collection][1] of personal repositories for software that isn’t carried in the standard Fedora repositories. Some software doesn’t conform to standards that allow easy packaging. Or it may not meet other Fedora standards, despite being free and open source. COPR can offer these projects outside the standard set of Fedora Fedora packages. Software in COPR isn’t supported by Fedora infrastructure or signed by the project. However, it can be a neat way to try new or experimental software. + +Here’s a set of new and interesting projects in COPR. + +### GitKraken + +[GitKraken][2] is a useful git client for people who prefer a graphical interface over command-line, providing all the features you expect. Additionally, GitKraken can create repositories and files, and has a built-in editor. A useful feature of GitKraken is the ability to stage lines or hunks of files, and to switch between branches fast. However, in some cases, you may experience performance issues with larger projects. +![][3] + +#### Installation instructions + +The repo currently provides GitKraken for Fedora 27, 28, 29 and Rawhide, and for OpenSUSE Tumbleweed. To install GitKraken, use these commands: + +``` +sudo dnf copr enable elken/gitkraken +sudo dnf install gitkraken +``` + +### Music On Console + +[Music On Console][4] player, or mocp, is a simple console audio player. It has an interface similar to the Midnight Commander and is easy use. You simply navigate to a directory with music files and select a file or directory to play. In addition, mocp provides a set of commands, allowing it to be controlled directly from command line. + +![][5] + +#### Installation instructions + +The repo currently provides Music On Console player for Fedora 28 and 29. To install mocp, use these commands: + +``` +sudo dnf copr enable Krzystof/Moc +sudo dnf install moc +``` + +### cnping + +[Cnping][6] is a small graphical ping tool for IPv4, useful for visualization of changes in round-trip time. It offers an option to control the time period between each packet as well as the size of data sent. In addition to the graph shown, cnping provides basic statistics on round-trip times and packet loss.![][7] + +#### Installation instructions + +The repo currently provides cnping for Fedora 27, 28, 29 and Rawhide. To install cnping, use these commands: + +``` +sudo dnf copr enable dreua/cnping +sudo dnf install cnping +``` + +### Pdfsandwich + +[Pdfsandwich][8] is a tool for adding text to PDF files which contain text in an image form — such as scanned books. It uses optical character recognition (OCR) to create an additional layer with the recognized text behind the original page. This can be useful for copying and working with the text. + +#### Installation instructions + +The repo currently provides pdfsandwich for Fedora 27, 28, 29 and Rawhide, and for EPEL 7. To install pdfsandwich, use these commands: + +``` +sudo dnf copr enable merlinm/pdfsandwich +sudo dnf install pdfsandwich +``` + +-------------------------------------------------------------------------------- + +via: https://fedoramagazine.org/4-cool-new-projects-try-copr-october-2018/ + +作者:[Dominik Turecek][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://fedoramagazine.org +[b]: https://github.com/lujun9972 +[1]: https://copr.fedorainfracloud.org/ +[2]: https://www.gitkraken.com/git-client +[3]: https://fedoramagazine.org/wp-content/uploads/2018/10/copr-gitkraken.png +[4]: http://moc.daper.net/ +[5]: https://fedoramagazine.org/wp-content/uploads/2018/10/copr-mocp.png +[6]: https://github.com/cnlohr/cnping +[7]: https://fedoramagazine.org/wp-content/uploads/2018/10/copr-cnping.png +[8]: http://www.tobias-elze.de/pdfsandwich/