Merge remote-tracking branch 'LCTT/master'

This commit is contained in:
Xingyu Wang 2019-10-04 10:51:47 +08:00
commit 60f2de229a
10 changed files with 1339 additions and 2 deletions

View File

@ -1,8 +1,8 @@
[#]: collector: (lujun9972)
[#]: translator: (wxy)
[#]: reviewer: (wxy)
[#]: publisher: ( )
[#]: url: ( )
[#]: publisher: (wxy)
[#]: url: (https://linux.cn/article-11420-1.html)
[#]: subject: (The Earliest Linux Distros: Before Mainstream Distros Became So Popular)
[#]: via: (https://itsfoss.com/earliest-linux-distros/)
[#]: author: (Avimanyu Bandyopadhyay https://itsfoss.com/author/avimanyu/)

View File

@ -0,0 +1,90 @@
[#]: collector: (lujun9972)
[#]: translator: ( )
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (Earning, spending, saving: The currency of influence in open source)
[#]: via: (https://opensource.com/open-organization/19/10/gaining-influence-open-community)
[#]: author: (ldimaggi https://opensource.com/users/ldimaggi)
Earning, spending, saving: The currency of influence in open source
======
In open organizations, people gain influence primarily through
contribution—not formal title or position in a hierarchy. To make an
impact in yours, start here.
![Bees on a hive, connected by dots][1]
The acquisition and application of influence is a vital aspect of any organization. But the manner in which people acquire influence can vary widely. In traditional, hierarchical organizations, for example, someone might acquire influence by virtue of their title or position in a hierarchy. In government organizations, someone might acquire influence by virtue of being elected. On social media, someone might acquire influence through endless self-promotion. Or someone might acquire influence through inheritance or wealth.
In open source communities, influence operates differently. It can't be bought, inherited, elected through a ballot, bestowed through a job title, or gained through celebrity. In this world, influence must be _earned_ through the merit of the contributions one makes to a team, organization, or community.
In [open organizations][2]—which often look to open source communities as models for a more dynamic, inclusive, and innovative way to operate, as Jim Whitehurst explains in _The Open Organization_—[influence operates the same way][3]. "Everyone has the ability to earn influence and to get his or her ideas heard," Whitehurst writes. "It simply related to how effective you are at presenting and getting people behind your ideas, throughout the organization." So anyone hoping to succeed in an open organization must understand how to acquire, manage, and leverage influence in ways that may not come naturally to them.
In this two-part series, we'll draw on our experiences in open source software development to examine the mechanics of influence in open organizations. In this installment, we'll explain how influence is acquired in an open organization. We'll also offer advice on ways one might _earn_ influence in these organizations—and some tips on behaviors to avoid.
### The currency of influence
Even though you can't buy it, influence behaves like a form of virtual currency in an open source community: a scarce resource, always needed, but also always in short supply. One must earn it through contributions to an open source project or community. In contrast to monetary currency, however, influence is not _transferable_. You must earn it for yourself. You can neither give nor receive it as a gift.
In traditional organizational structures, influence follows an organization's top-down, command and control pattern—and influence is largely the result of one's position in a hierarchy. People at the top of those hierarchical structures make decisions, and those decisions flow downward to everyone else. The model is relatively stable, frequently rigid, and [can encounter difficulties when conditions change][4].
But as Eric Raymond argues in _The Cathedral and the Bazaar,_ open source communities don't operate in this "cathedral"-style manner. They work more like "bazaars," where act activity, power, and influence cut across formal lines of command and control. In an open organization therefore, influence _must be earned_. Influence _not_ earned can be corrosive in an open organization.
That's because open organizations [are more communal][2]. The modern word "community" has as its root the Latin word "communitas," which has as part of its definition "public spirit, a sense of duty and willingness to serve one's community." This definition (and how it relates to your motivation for being involved in a community) is an important place to begin thinking about what it means to have influence in an open organization—and how you can acquire that influence.
### Acquiring influence
In open source communities, influence operates differently. It can't be bought, inherited, elected through a ballot, bestowed through a job title, or gained through celebrity.
When starting out—in an open source community or an open organization—you'll need a level of interest in and an honest commitment to the goals and mission of the community.
Note our careful and intentional choice of the word "honest." Your intentions for acquiring influence must have at their root the goal of furthering the mission of the community. Your commitment must be to the _community itself_—not to the community insofar as it functions like a vehicle for self-promotion or padding your resume. Any attempts to use the community as a stepping stone will probably fail, as other members of the community will quickly discover your true motives. The open nature of an open source community means that insincerity has no place to hide, and when found, will be exposed. The "glue" that holds an open source community together is a commitment to the community's goals, the value that the community's projects provide, and ultimately, the community's output (most notably, the code it creates). The same is true in any open organization, no matter what it aims to produce.
As with any durable and meaningful relationship, making a commitment to a community takes time. In order to acquire influence in a community, you'll need to _invest_ in that community. You cannot "parachute into" a community and acquire influence overnight.
So how _can_ you begin?
In open source communities, before you start churning out code and documentation, you have to _watch, listen, and learn_ before you act. You don't want to act in such a way that community members will think of you as an uninvited guest. Successful contributors are those that study a project and understand its goals, accomplishments, and challenges. They watch how the community _functions_. They figure out who the most active members are. They understand the types of contributions that accepted and which get rejected. Only then can they be ready to contribute.
When preparing to attain influence in an open organization, look for problems that need solving. That way, your contributions take the form of _solutions_ as opposed to unwanted *additions (*new features, etc., in software communities). Occasionally you can make progress faster by moving _slowly_—easing into the community, as opposed to jumping into the pool and trying to make a big splash (you end up just spilling water into everyone's drinks).
The level of influence that you can earn is directly proportional to the scope and value of the contributions that you make to the community. By becoming a _contributor_ to an open community, you also earn the _credibility_ you'll need to achieve some level of influence in that community and on its projects.
Having your contributions noticed in and embraced by the community is always nice. When this happens, you will receive some notoriety (in open source code communities, for example, this can come in the form of pull request comments, recognition in blog posts, or other online acknowledgements and thanks). While it's fine for you to publicize these accomplishments and the growing influence in the community that these that these represent, refrain from public self-congratulations and self-promotion. The community should remain the center of attention.
### Meritocracy != democracy
When acquiring influence in an open community, always pay attention to that community's governance model. Most open source coding communities, for example, aren't democracies; [they're meritocracies][5]. Ideas presented to the teams must be vetted and critically reviewed by the team in order to ensure that they provide value to the community. Changes do not take place in a vacuum, as they can affect many other people's work.
Practically speaking, this means that in open organizations everyone and anyone has the ability to voice an opinion. Transparency rules, and it's the key to giving everyone a fair opportunity to express opinions and thoughts. In an open source software project, for instance, anyone can open issues, respond to issues, provide code for features, influence new features, and so on. "Open" means, anyone and everyone can see the code, comment on it, raise issues against it, and provide fixes and features. Leaders in open source software communities derive their leadership capabilities from the merit of their contributions and respect these have garnered them from the community.
When preparing to attain influence in an open organization, look for problems that need solving. That way, your contributions take the form of solutions as opposed to unwanted additions.
However, these leaders don't _command_ the open source software communities or impose arbitrary rules or opinions—mainly because everyone would ignore their commands and leave if they tried to do so. Transparency and partnership is what attracts community members to a project and grows a community successfully.
In the end, a leader in an open organization would fail miserably if he or she had to deliver everything personally. In fact, it's a mistake for a leader to attempt to do this. Contributions from the community are not a luxury "extra" for an open organization; they're vital to its success.
### Patience and perseverance
Think of a world-class athlete, someone born with an innate skill may quickly rise to the top of his or her sport at a young age. Overcoming a serious injury might force that athlete to learn patience (and perhaps some humility, too) during a long rehabilitation, where even small steps forwards are painful and time-consuming.
Likewise, building credibility in an open source community is a long process. Influence can take years to develop. So patience and persistence are _crucial_. Early on, the process can seem daunting; the whole world is available to be influenced, yet you deploy patience by taking a step by step approach to starting small and thinking big. Like ripples in a pond when you drop a stone, your influence in your immediate circle of connections can grow through those connections to other people too and spread over time. In the second installment, then, we'll explain how influence, once acquired, can be applied in an open organization.
--------------------------------------------------------------------------------
via: https://opensource.com/open-organization/19/10/gaining-influence-open-community
作者:[ldimaggi][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/ldimaggi
[b]: https://github.com/lujun9972
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/OSDC_bees_network.png?itok=NFNRQpJi (Bees on a hive, connected by dots)
[2]: https://opensource.com/open-organization/resources/open-org-definition
[3]: https://opensource.com/open-organization/16/8/how-make-meritocracy-work
[4]: https://opensource.com/open-organization/16/3/fastest-result-isnt-always-best-result
[5]: https://opensource.com/open-organization/17/2/new-perspective-meritocracy

View File

@ -0,0 +1,100 @@
[#]: collector: (lujun9972)
[#]: translator: ( )
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (How to keep your messages private with an open source app)
[#]: via: (https://opensource.com/article/19/10/secure-private-messaging)
[#]: author: (Chris Hermansen https://opensource.com/users/clhermansen)
How to keep your messages private with an open source app
======
Even encrypted messaging apps are leveraging your private data to sell
you things.
![Chat via email][1]
Messaging apps have changed how we communicate. Where would we be today without [SMS][2]? Can you imagine returning to a world where near-instant communication is not pervasive?
We have lots of messaging options in addition to SMS and [MMS][3]. There are [Skype][4], [iMessage][5], [Facebook Messenger][6], [Twitter][7] (with and without direct messages), [WeChat][8], [WhatsApp][9], [SnapChat][10], and more. Many of them are encrypted, and many people presume that their communications on these apps are private and secure. But are they really? Cloud-hosted applications that are harvesting metadata from your conversations, then using it to sell you products that support their services, may not be your friends after all.
### Risks of using messaging systems
Fellow Opensource.com Community Moderator [Chris Hermansen][11] shares my concern about the growing invasion of our privacy by online communication tools. Chris says, "in my household, it's safe to say that we're not comfortable with commercial interests recording our every online move and using every possible gap to promote goods, services, points of view, and so on, or to promote themselves to others based on using our data."
[Employers are using social media account information][12] within their hiring and firing decision-making process, he says. And it's not just to check whether the candidate's or employee's online personality conflicts with company values; in many cases, candidates who don't have a social media presence are unlikely to get an interview.
He is also concerned about certain apps that allow message senders to see when recipients open their messages. He says, "I did not opt into that kind of sharing, and it seems the only way to opt out is to use software that is specifically designed to block this kind of unauthorized abuse, which may, in turn, block me from other, legitimate web content."
### Hide those prying eyes
Chris recently told me about [Signal][13], which ticks all the right boxes for those of us who have had enough of these prying eyes. The organization behind Signal is open, so we can know what it's doing with our data. (The answer? [Not very much at all][14].) Moreover, the organization is dedicated to broadening the use of Signal without harvesting user data, and all communications are encrypted end-to-end with the keys stored on users' devices.
In addition, the mobile app is robust and reliable and enables users to make video and voice calls over the internet. [Chris' family has been using Signal for the past 18 months][15] or so to communicate around the world, and he says that "the call quality is far, far better than with the competition." I also find that Signal provides extremely high voice and video call quality, even over long-distance connections that often bamboozle other communications applications.
"I prefer to have Signal also manage my SMS traffic," says Chris, "and I'll often open my Signal app to make a call to a fellow Signal user rather than telephoning."
Chris and I aren't the only ones who like using Signal. In 2017, the U.S. Senate Sergeant-at-Arms [approved][16] the app for lawmakers and their staffs to use.
Chris has only a couple of complaints about Signal. The first is that the desktop application (in Linux, anyway) isn't as full-featured as the mobile application. For instance, the desktop app can't make video or voice calls nor send or receive SMS. This isn't a show-stopper, but it would surely be nice when your cellphone battery is low or when it's easier to use your big screen and headset than a small mobile device.
### Using Signal
It is easy to [install Signal][17] on [Android][18], [iOS][19], Windows, MacOS, and Debian-based Linux distributions, and it offers excellent support [documentation][20] with detailed installation instructions for each operating system. You can also link devices, like laptops and desktops, that run one of the supported operating systems.
Signal uses your existing mobile number, provided it can send and receive SMS and phone calls. The first time you set Signal up on your mobile phone, the application can search your address book for any of your contacts who use it.
Signal is openly licensed with the [GNU Public License 3.0][21], and you can inspect the source code on [GitHub][22].
### Signal's future
In early 2018, Signal received $50 million in funding from WhatsApp co-founder [Brian Acton][23]. With that cash infusion, Signal founder [Moxie Marlinspike][24] and Acton founded a new non-profit, 501(c)(3) organization named the [Signal Foundation][25].
Marlinspike says Signal plans to use Acton's investment to "increase the size of our team, our capacity, and our ambitions. This means reduced uncertainty on the path to sustainability, and the strengthening of our long-term goals and values. Perhaps most significantly, the addition of Brian brings an incredibly talented engineer and visionary with decades of experience building successful products to our team."
Signal is currently looking for [developers][26] who have skills with iOS, Rust, Android, and more, as well as people interested in supporting it with financial [donations][27].
To learn more, you can follow Signal on [Twitter][28], [Instagram][29], and its [blog][30].
--------------------------------------------------------------------------------
via: https://opensource.com/article/19/10/secure-private-messaging
作者:[Chris Hermansen][a]
选题:[lujun9972][b]
译者:[译者ID](https://github.com/译者ID)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://opensource.com/users/clhermansen
[b]: https://github.com/lujun9972
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/email_chat_communication_message.png?itok=LKjiLnQu (Chat via email)
[2]: https://en.wikipedia.org/wiki/SMS
[3]: https://en.wikipedia.org/wiki/Multimedia_Messaging_Service
[4]: https://www.skype.com/en/
[5]: https://en.wikipedia.org/wiki/IMessage
[6]: https://www.messenger.com/
[7]: https://twitter.com/?lang=en
[8]: https://play.google.com/store/apps/details?id=com.tencent.mm&hl=en
[9]: https://www.whatsapp.com/
[10]: https://www.snapchat.com/
[11]: https://opensource.com/users/clhermansen
[12]: https://www.businessnewsdaily.com/2377-social-media-hiring.html
[13]: https://signal.org/
[14]: https://en.wikipedia.org/wiki/Signal_(software)
[15]: https://opensource.com/article/19/3/open-messenger-client
[16]: https://thehill.com/policy/cybersecurity/333802-sen-staff-can-use-signal-for-encrypted-chat
[17]: https://signal.org/download/
[18]: https://play.google.com/store/apps/details?id=org.thoughtcrime.securesms&referrer=utm_source%3DOWS%26utm_medium%3DWeb%26utm_campaign%3DNav
[19]: https://apps.apple.com/us/app/signal-private-messenger/id874139669
[20]: https://support.signal.org
[21]: https://github.com/signalapp/Signal-iOS/blob/master/LICENSE
[22]: https://github.com/signalapp
[23]: https://en.wikipedia.org/wiki/Brian_Acton
[24]: https://moxie.org/
[25]: https://signal.org/blog/signal-foundation/
[26]: https://signal.org/workworkwork/
[27]: https://signal.org/donate/
[28]: https://twitter.com/signalapp
[29]: https://www.instagram.com/signal_app/
[30]: https://signal.org/blog/

View File

@ -0,0 +1,143 @@
[#]: collector: (lujun9972)
[#]: translator: ( )
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (The monumental impact of C)
[#]: via: (https://opensource.com/article/19/10/command-line-heroes-c)
[#]: author: (Matthew Broberg https://opensource.com/users/mbbroberg)
The monumental impact of C
======
The season finale of Command Line Heroes offers a lesson in how a small
community of open source enthusiasts can change the world.
![In the finale of Command Line Heroes, we learn about the significant impact of C][1]
C is the original general-purpose programming language. The Season 3 finale of the [Command Line Heroes][2] podcast explores C's origin story in a way that showcases the longevity and power of its design. It's a perfect synthesis of all the languages discussed throughout the podcast's third season and this [series of articles][3].
![The original C programming guide by two of the language authors, circa 1978][4]
C is such a fundamental language that many of us forget how much it has changed. Technically a "high-level language," in the sense that it requires a compiler to be runnable, it's as close to assembly language as people like to get these days (outside of specialized, low-memory environments). It's also considered to be the language that made nearly all languages that came after it possible.
### The path to C began with failure
While the myth persists that all great inventions come from highly competitive garage dwellers, C's story is more fit for the Renaissance period.
In the 1960s, Bell Labs in suburban New Jersey was one of the most innovative places of its time. Jon Gertner, author of [_The idea factory_][5], describes the culture of the time marked by optimism and the excitement to solve tough problems. Instead of monetization pressures with tight timelines, Bell Labs offered seemingly endless funding for wild ideas. It had a research and development ethos that aligns well with today's [open leadership principles][6]. The results were significant and prove that brilliance can come without the promise of VC funding or an IPO.
The challenge back then was terminal sharing: finding a way for lots of people to access the (very limited number of) available computers. Before there was a scalable answer for that, and long before we had [a shell like Bash][7], there was the Multics project. It was a hypothetical operating system where hundreds or even thousands of developers could share time on the same system. This was a dream of John McCarty, creator of Lisp and the term artificial intelligence (AI), as I [recently explored][8].
Joy Lisi Ranken, author of [_A people's history of computing in the United States_][9], describes what happened next. There was a lot of public interest in driving forward with Multics' vision of more universally available timesharing. Academics, scientists, educators, and some in the broader public were looking forward to this computer-powered future. Many advocated for computing as a public utility, akin to electricity, and the push toward timesharing was a global movement.
Up to that point, high-end mainframes topped out at 40-50 terminals per system. The change of scale was ambitious and eventually failed, as Warren Toomey writes in [IEEE Spectrum][10]:
> "Over five years, AT&T invested millions in the Multics project, purchasing a GE-645 mainframe computer and dedicating to the effort many of the top researchers at the company's renowned Bell Telephone Laboratories—including Thompson and Ritchie, Joseph F. Ossanna, Stuart Feldman, M. Douglas McIlroy, and the late Robert Morris. But the new system was too ambitious, and it fell troublingly behind schedule. In the end, AT&T's corporate leaders decided to pull the plug."
Bell Labs pulled out of the Multics program in 1969. Multics wasn't going to happen.
### The fellowship of the C
Funding wrapped up, and the powerful GE645 mainframe was assigned to other tasks inside Bell Labs. But that didn't discourage everyone.
Among the last holdouts from the Multics project were four men who felt passionately tied to the project: Ken Thompson, Dennis Ritchie, Doug McIlroy, and J.F. Ossanna. These four diehards continued to muse and scribble ideas on paper. Thompson and Ritchie developed a game called Space Travel for the PDP-7 minicomputer. While they were working on that, Thompson started implementing all those crazy hand-written ideas about filesystems they'd developed among the wreckage of Multics.
![A PDP-7 minicomputer][11]
A PDP-7 minicomputer was not top of line technology at the time, but the team implemented foundational technologies that change the future of programming languages and operating systems alike.
That's worth emphasizing: Some of the original filesystem specifications were written by hand and then programmed on what was effectively a toy compared to the systems they were using to build Multics. [Wikipedia's Ken Thompson page][12] dives deeper into what came next:
> "While writing Multics, Thompson created the Bon programming language. He also created a video game called [Space Travel][13]. Later, Bell Labs withdrew from the MULTICS project. In order to go on playing the game, Thompson found an old [PDP-7][14] machine and rewrote Space Travel on it. Eventually, the tools developed by Thompson became the [Unix][15] [operating system][16]: Working on a PDP-7, a team of Bell Labs researchers led by Thompson and Ritchie, and including Rudd Canaday, developed a [hierarchical file system][17], the concepts of [computer processes][18] and [device files][19], a [command-line interpreter][20], [pipes][21] for easy inter-process communication, and some small utility programs. In 1970, [Brian Kernighan][22] suggested the name 'Unix,' in a pun on the name 'Multics.' After initial work on Unix, Thompson decided that Unix needed a system programming language and created [B][23], a precursor to Ritchie's [C][24]."
As Walter Toomey documented in the IEEE Spectrum article mentioned above, Unix showed promise in a way the Multics project never materialized. After winning over the team and doing a lot more programming, the pathway to Unix was paved.
### Getting from B to C in Unix
Thompson quickly created a Unix language he called B. B inherited much from its predecessor BCPL, but it wasn't enough of a breakaway from older languages. B didn't know data types, for starters. It's considered a typeless language, which meant its "Hello World" program looked like this:
```
main( ) {
extrn a, b, c;
putchar(a); putchar(b); putchar(c); putchar('!*n');
}
a 'hell';
b 'o, w';
c 'orld';
```
Even if you're not a programmer, it's clear that carving up strings four characters at a time would be limiting. It's also worth noting that this text is considered the original "Hello World" from Brian Kernighan's 1972 book, [_A tutorial introduction to the language B_][25] (although that claim is not definitive).
[![A diagram showing the key Unix and Unix-like operating systems][26]][27]
Typelessness aside, B's assembly-language counterparts were still yielding programs faster than was possible using the B compiler's threaded-code technique. So, from 1971 to 1973, Ritchie modified B. He added a "character type" and built a new compiler so that it didn't have to use threaded code anymore. After two years of work, B had become C.
### The right abstraction at the right time
C's use of types and ease of compiling down to efficient assembly code made it the perfect language for the rise of minicomputers, which speak in bytecode. B was eventually overtaken by C. Once C became the language of Unix, it became the de facto standard across the budding computer industry. Unix was _the_ sharing platform of the pre-internet days. The more people wrote C, the better it got, and the more it was adopted. It eventually became an open standard itself. According to the [Brief history of C programming language][28]:
> "For many years, the de facto standard for C was the version supplied with the Unix operating system. In the summer of 1983 a committee was established to create an ANSI (American National Standards Institute) standard that would define the C language. The standardization process took six years (much longer than anyone reasonably expected)."
How influential is C today? A [quick review][29] reveals:
* Parts of all major operating systems are written in C, including macOS, Windows, Linux, and Android.
* The world's most prolific databases, including DB2, MySQL, MS SQL, and PostgreSQL, are written in C.
* Many programming-language specifics begun in C, including Python, Go, Perl's core interpreter, and the R statistical language.
Decades after they started as scrappy outsiders, Thompson and Ritchie are praised as titans of the programming world. They shared 1983's Turing Award, and in 1998, received the [National Medal of Science][30] for their work on the C language and Unix. 
![Ritchie and Thompson receiving the National Medal of Technology from President Clinton, 1998][31]
But Doug McIlroy and J.F. Ossanna deserve their share of praise, too. All four of them are true Command Line Heroes.
### Wrapping up the season
[Command Line Heroes][2] has completed an entire season of insights into the programming languages that affect how we code today. It's been a joy to learn about these languages and share them with you. I hope you've enjoyed it as well!
--------------------------------------------------------------------------------
via: https://opensource.com/article/19/10/command-line-heroes-c
作者:[Matthew Broberg][a]
选题:[lujun9972][b]
译者:[译者ID](https://github.com/译者ID)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://opensource.com/users/mbbroberg
[b]: https://github.com/lujun9972
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/commnad_line_hereos_ep8_header_opensourcedotcom.png?itok=d7MJQHFJ (In the finale of Command Line Heroes, we learn about the significant impact of C)
[2]: https://www.redhat.com/en/command-line-heroes
[3]: https://opensource.com/tags/command-line-heroes-podcast
[4]: https://opensource.com/sites/default/files/uploads/2482009942_6caea217e0_c.jpg (The original C programming guide by two of the language authors, circa 1978)
[5]: https://en.wikipedia.org/wiki/The_Idea_Factory
[6]: https://opensource.com/open-organization/18/12/what-is-open-leadership
[7]: https://opensource.com/19/9/command-line-heroes-bash
[8]: https://opensource.com/article/19/9/command-line-heroes-lisp
[9]: https://www.hup.harvard.edu/catalog.php?isbn=9780674970977
[10]: https://spectrum.ieee.org/tech-history/cyberspace/the-strange-birth-and-long-life-of-unix
[11]: https://opensource.com/sites/default/files/uploads/800px-pdp7-oslo-2005.jpeg (A PDP-7 minicomputer)
[12]: https://en.wikipedia.org/wiki/Ken_Thompson
[13]: https://en.wikipedia.org/wiki/Space_Travel_(video_game)
[14]: https://en.wikipedia.org/wiki/PDP-7
[15]: https://en.wikipedia.org/wiki/Unix
[16]: https://en.wikipedia.org/wiki/Operating_system
[17]: https://en.wikipedia.org/wiki/File_system#Aspects_of_file_systems
[18]: https://en.wikipedia.org/wiki/Process_(computing)
[19]: https://en.wikipedia.org/wiki/Device_file
[20]: https://en.wikipedia.org/wiki/Command-line_interface#Command-line_interpreter
[21]: https://en.wikipedia.org/wiki/Pipeline_(Unix)
[22]: https://en.wikipedia.org/wiki/Brian_Kernighan
[23]: https://en.wikipedia.org/wiki/B_(programming_language)
[24]: https://en.wikipedia.org/wiki/C_(programming_language)
[25]: https://www.bell-labs.com/usr/dmr/www/btut.pdf
[26]: https://opensource.com/sites/default/files/uploads/640px-unix_history-simple.svg_.png (A diagram showing the key Unix and Unix-like operating systems)
[27]: https://commons.wikimedia.org/w/index.php?curid=1801948
[28]: http://cs-fundamentals.com/c-programming/history-of-c-programming-language.php
[29]: https://www.toptal.com/c/after-all-these-years-the-world-is-still-powered-by-c-programming
[30]: https://www.nsf.gov/od/nms/medal.jsp
[31]: https://opensource.com/sites/default/files/uploads/medal.jpeg (Ritchie and Thompson receiving the National Medal of Technology from President Clinton, 1998)

View File

@ -0,0 +1,85 @@
[#]: collector: (lujun9972)
[#]: translator: ( )
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (Sharing vs. free vs. public: The real definition of open source)
[#]: via: (https://opensource.com/article/19/10/shareware-vs-open-source)
[#]: author: (Jeffrey Robert Kaufman https://opensource.com/users/jkaufman)
Sharing vs. free vs. public: The real definition of open source
======
If you think open source is synonymous with shareware, freeware, and
public domain, you are not alone.
![Person in a field of dandelions][1]
When you hear the term open source, do you think this is synonymous with terms such as shareware, freeware, or public domain? If so, you are not alone. Many people, both within and without the technology industry, think of these terms as one and the same. This article illustrates how these terms are different and how open source is a transformative licensing and development model. Perhaps the best way to explore the differences will be to share my experience with software provided under one of the above models.
### Shareware and freeware
My early years as a computer programmer started when I began to code in BASIC on my Apple II Plus in 1982. I recall going to the local computer store in my hometown and finding floppy diskettes in plastic bags containing software games and utilities for what seemed to be extraordinarily high prices. Keep in mind, this was from the perspective of a middle-schooler.
There was, however, some software that was available for free or at a minimal price; this was referred to as shareware or freeware, depending on the exact licensing model. Under the shareware model, you could use the software for only a certain amount of time, and/or if you found it useful, then there was a request that you send in a check to the author of that software.
Some shareware software, however, actually encouraged you to also make a copy and give it to your friends. This model is often referred to as freeware. That said, the exact definitions and differences between shareware and freeware are a bit soft, so it's collectively easiest to refer to both simply as "shareware." I cannot say for certain, but I doubt I ever provided money to any of the software authors for using their shareware, mainly because I had no money as an early teenager, but I sure enjoyed using these software programs and learned a lot about computers along the way.
In retrospect, I realize now that I could have learned and accomplished so much more in my growth as a budding programmer if the software had been provided under open source license terms instead of shareware terms. This is because the source code (i.e., the human-readable form of software) is almost never provided with shareware. Shareware also contains licensing restrictions that prohibit the recipient from attempting to reveal the source code. Without access to the source code, it is extraordinarily difficult to learn how the software actually works, making it very difficult to expand or change its functionality. This leaves the end user completely dependent on the original shareware author for any changes or improvements.
With the shareware model, it is practically impossible to enable any community of developers to leverage and further innovate around the code. There can also be further restrictions on redistribution and commercial usage. Although the shareware may be free in terms of price (at least initially), _it is not free in terms of freedom_ and does not allow you to learn and innovate by exploring the inner workings of the code.
Which leads me to the big question: _How is this different from open source software?_
### The basics of open source licensing
First, we need to understand that "open source" refers to a _licensing_ and a _software development model_ that are both significantly different than shareware. Under one form of open source called non-copyleft open source licensing, the user is provided key freedoms such as no restrictions on accessing source code; selling, using, or giving away the software for any purpose; or modifying the software.
This form of license also does not require payment of any fee or royalty for use. One amazing outcome of this licensing model is its unique ability to enable countless software developers to collaborate on new and useful changes and innovations to the code because the license is highly permissive, requiring no negotiations for use. Although the source code is technically not required to be provided under such a license, it is almost always available for everyone to view, learn from, modify, and distribute to others.
Another aspect of non-copyleft open source licensing is that any recipient of such software may add additional license restrictions. This means that the initial author that licensed the code under this form of license has no assurances that the recipient may not further license to others under more restrictive terms. For example:
> _Let us assume an author, Noah, wrote some software and distributed it under a non-copyleft open source license to a recipient, Aviva. Aviva then modifies and improves Noah's software, which she is entitled to do under the non-copyleft open source license terms. Aviva could then decide to add further restrictions to any recipients of her software that could limit its use, such as where or how it may be used (e.g., Aviva could add in a restriction that the software may only be used within the geographical boundaries of California and never in any nuclear power plant). Aviva could also opt to never release the modified source code to others even though she had access to the source code._
Sadly, there are countless proprietary software companies that use non-copyleft open source licensed software in the way described immediately above. In fact, a shareware program could use non-copyleft open source licensed software by adding shareware-type restrictions (e.g., no access to source code or excluding commercial use) thereby converting non-copyleft open source licensed code to a shareware licensing model.
Fortunately, many proprietary companies using non-copyleft open source licensed software see the benefits of releasing source code. These organizations often continue to perpetuate the open source model by providing their modified source code to their recipients or the broader open source community via software repositories like GitHub to enable a virtuous cycle of innovation. This isn't entirely out of benevolence (or at least it normally isn't): These companies want to encourage community innovation and further enhancements, which can benefit them further.
At the same time, many proprietary companies do not opt to do this, which is well within the terms of non-copyleft open source licenses.
### Copyleft-licensed open source software
In 1989, a new open source license named the GNU General Public License, also known commonly as the GPL license, was developed with the objective to ensure that software should be inherently free (as in free speech) and that that these freedoms must always persist, unlike what sometimes happens with non-copyleft open source licensed software. In a unique application of copyright law, the GPL uses copyright law to ensure perpetual software freedoms, so long as the rules are followed (more on that later). This unique use of copyright is called copy**left**.
Like non-copyleft open source software, this license allows recipients to use the software without restriction, examine the source code, change the software, and make further distributions of the original or modified software to other recipients. _Unlike_ a non-copyleft open source license, the copyleft open source license absolutely requires that any recipients are also provided these same freedoms. They can never be taken away unless the rules are not followed.
What makes the copyleft open source license enforceable and an incentive for compliance is the application of copyright law. If one of the recipients of copyleft code does not comply with the license terms (e.g., by adding any additional restrictions on the use of the software or not providing the source code), then their license terminates, and they become a copyright infringer because they no longer have legal permission to use the software. In this way, the software freedoms are ensured for any downstream recipients of that copyleft software.
### Beyond the basics: Other software license models
I mentioned public domain earlier—while it's commonly conflated with open source, this model is a bit different. Public domain means that steps have been taken to see that there are no applicable copyright rights associated with the software, which most often happens when the software copyright expires or is disclaimed by the author. (In many countries, the mechanism to disclaim copyright is unclear, which is why some public domain software may provide an option to obtain an open source-type license as a fallback.) No license is required to use public domain software; whether this makes it "open source" or not is the subject of much debate, though many would consider public domain a form of open source if the source code were made available.
Interestingly, there are a significant number of open source projects that make use of small modules of public domain software for certain functions. There are even entire programs that claim to be in the public domain, such as SQLite, which implements a SQL database engine and is used in many applications and devices. It is also common to see software with no license terms.
Many people incorrectly assume that such unlicensed software is open source, in the public domain, or otherwise free to use without restriction. In most countries, including the United States, copyright in software exists when it is created. This means that it cannot be used without permission in the form of a license, unless the copyright is somehow disclaimed, rendering it in the public domain. Some exceptions exist to this general rule, like the laws of implied licenses or fair use, but these are quite complex in how they may apply to a specific situation. I do not recommend providing software with no license terms when the intention is for it to be under open source license terms as this leads to confusion and potential misuse.
### Benefits of open source software
As I said previously, open source enables an efficient software development model with enormous ability to drive innovation. But what does this really mean?
One of the benefits of the open source licensing model is a significant reduction in the friction around innovation, especially innovation done by other users beyond the original creator. This friction is limited because using open source code generally does not require the negotiation of license terms, thereby greatly simplifying and lowering any cost burden for use. In turn, this creates a type of open source ecosystem that encourages rapid modification and combination of existing technologies to form something new. These changes are often provided back into this open source ecosystem, creating a cycle of innovation.
There is an innumerable number of software programs that run everything from your toaster to Mars-going spacecraft that are the direct result of this effortless ability to combine various programs together… all enabled by the open source development model.
--------------------------------------------------------------------------------
via: https://opensource.com/article/19/10/shareware-vs-open-source
作者:[Jeffrey Robert Kaufman][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/jkaufman
[b]: https://github.com/lujun9972
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/OSDC_dandelion_520x292.png?itok=-xhFQvUj (Person in a field of dandelions)

View File

@ -0,0 +1,117 @@
[#]: collector: (lujun9972)
[#]: translator: ( )
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (Chuwi GBox Pro Mini PC Review for Linux Users)
[#]: via: (https://itsfoss.com/chuwi-gbox-pro-review/)
[#]: author: (John Paul https://itsfoss.com/author/john/)
Chuwi GBox Pro Mini PC Review for Linux Users
======
Early computers filled entire rooms. Since then, there has been a huge drive among computer manufacturers to make things smaller and smaller. Even the regular desktops can be replaced with mini PCs these days.
We have covered several [Linux mini-PCs][1] in the past. Today we shall take a look at Chuwi GBox Pro.
Chuwi is a computer manufacturer based in China. They are known for making good-looking but inexpensive devices. A few years back, some resellers used to rebrand Chuwi computers and sell them under their own brand name. Chuwi is now trying to expand its own brand visibility by selling Chuwi systems to a global audience.
Chuwi contacted Its FOSS and offered us the GBox Pro device to review for Linux users. Just because they offered something for free, it doesnt mean we are going to favor them unnecessarily. I used the sample GBox Pro device with Linux and I am sharing my experience with this device. Its up to you to make a decision about purchasing this gadget.
_The Amazon links in the article are affiliate links. Please_ [_read our affiliate policy_][2]_._
### Chuwi GBox Pro
The [Chuwi GBox Pro][3] has a pretty small form factor. At 7.4 x 5.4 x 1.5 inches, it is about the size of a hardcover book. The body is made out of aluminum, so it is light. weighing only 1 lb 4 oz. It comes with an Intel Atom X7-E3950 quad-core CPU, Intel HD 505 graphics, 4 GB of DDR3 RAM, and 64 GB of storage on an eMMC. If that is not enough storage, you can add a 2.5 inch SATA drive to increase storage.
![Chuwi GBox Pro on my desk][4]
The GBox Pro is a fanless computer, so it depends on its special design to keep it cool. It has vents around the top and bottom to let air circulate.
Besides using it as a desktop computer, you can also use the GBox Pro as a media center. It comes with a VESA mount so you can attach to a wall or behind or TV or monitor. Then, all youd need is a No products found..
![Ubuntu On Gbox Pro][5]
The GBox Pro comes with a good number of ports. It has 5 USB ports total: one for type C, two for USB 2.0 and two for USB 3.0. It also has a built-in MicroSD reader. For video output, you can choose between VGA and HDMI. It also has an Ethernet jack and an audio out port. It also has support for Bluetooth.
![Chuwi GBox Pro Ports][6]
### Installation
The system came with Windows 10 preinstalled, but they mention on their website that it also supports Linux. So, I tested it with two distros: Ubuntu and Manjaro.
Overwriting Windows 10 with stock Ubuntu was fairly easy. The only worry I had during the install was a message that one of the partitions was mounted and needed to be unmounted to continue. This was the first time I install Linux on an eMMC and I wonder if that was the issue.
![Super Tux Kart On Gbox Pro][7]
The GBox Pro didnt run Ubuntu as well as I would have liked. I think GNOME might have been a little heavy for it. Overall performance wasnt too bad, but when I had a couple of processes running at once (such as installing snaps and watching videos on YouTube) I felt a noticeable slowdown. Keep in mind, the GBox Pro has an Intel Atom CPU, not the more powerful core i3 or core i5.
After I installed the [Manjaro Xfce edition][8], I didnt feel like the bottom was dragging. Its probably because [Xfce][9] is lighter than GNOME. On Manjaro, the system did everything I wanted quickly.
![Manjaro Xfce on GBox Pro][10]
### Experiencing Linux on Chuwi GBox Pro
Overall, the GBox Pro is a nice little device with a few niggles that should be expected for this form-factor, chip setup, and general price.
One of the main talking points of the GBox Pro is its ability to run high-quality graphics, both for movies and games. I tried out several games, including Super Tux Kart, Warzone 2100, and Mr. Rescue. (Yes, Im not much of a gamer.) These games ran fine, except I ran into an issue with Super Tux Kart where some of the maps flickered so much that they were almost unplayable.
![Rifftrax On Gbox Pro][11]
I also wanted to try HD movie playback. I dont own a lot of digital movies and the one site I do use isnt quite Linux friendly. However, I was able to watch a couple of 1080p videos on [Rifftrax][12] without issue. Chuwi claims that GBox Pro supports 4K hard-decoding. I couldnt test it though.
As I mentioned above, you can add storage space by adding a SATA drive. I did not realize that was a feature until I started writing this review and I was looking at the pictures on the [GBox Pro's Amazon page][13]. As a result, I removed the bottom panel to take a look. I like the fact that this is an option, unfortunately, they used six tiny screws to hold the bottom panel in place. I was worried Id lose a couple. It also looks like the bottom panel keeps the drive in place. There is no room to screw it into the mounts.
### Final Thoughts on Chuwi GBox Pro
![Chuwi GBox Pro is fanless and thermal conductive aluminum alloy provide effective cooling][14]
Overall, I like the GBox Pro. It has a nice small form factor, which makes it easy to set up and move. On the website, they say that you can carry it in your pocket, but I would not want to risk it. The case has a cool design and I like the fact that it has a place to add a larger drive.
It may not be as powerful as the [Intel NUC][15] but it is still a good enough device considering its modest price tag. You can use it for a [media server][16] or for medium to light computing. I didnt use it as media server but it works well for an entry-level desktop system.
Its FOSS has also requested Chuwi team to launch Linux version of their devices with a relatively reduced pricing than the Windows ones. Lets see if they consider it in future.
If you think [Chuwi GBox Pro][17] is a good fit for your needs, it is available to order from Aliexpress and Amazon. I recommend ordering on Amazon though. Please refer to this page for [warranty information][18].
Preview | Product | Price |
---|---|---|---
![CHUWI GBox Pro Fanless Mini PC, Intel Atom X7-E3950,Win10 \(64-bit\) Desktop Computer with 4GB DDR4/64GB eMMC, Support Gigabit Ethernet, Linux, BT 4.0, 4K, Dual WiFi][19] ![CHUWI GBox Pro Fanless Mini PC, Intel Atom X7-E3950,Win10 \(64-bit\) Desktop Computer with 4GB DDR4/64GB eMMC, Support Gigabit Ethernet, Linux, BT 4.0, 4K, Dual WiFi][19] | [CHUWI GBox Pro Fanless Mini PC, Intel Atom X7-E3950,Win10 (64-bit) Desktop Computer with 4GB...][20] | $189.99[][21] | [Buy on Amazon][22]
Have you ever used the GBox Pro or any other Chuwi products? Please share your experience with us in the comment section.
--------------------------------------------------------------------------------
via: https://itsfoss.com/chuwi-gbox-pro-review/
作者:[John Paul][a]
选题:[lujun9972][b]
译者:[译者ID](https://github.com/译者ID)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://itsfoss.com/author/john/
[b]: https://github.com/lujun9972
[1]: https://itsfoss.com/linux-based-mini-pc/
[2]: https://itsfoss.com/affiliate-policy/
[3]: https://www.chuwi.com/product/items/Chuwi-GBox-Pro.html
[4]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/09/Chuwi-GBox-Pro.jpg?ssl=1
[5]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/09/Ubuntu-on-GBox-Pro.jpg?ssl=1
[6]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/10/chuwi-gbox-pro-ports.jpg?resize=800%2C230&ssl=1
[7]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/09/Super-Tux-Kart-on-GBox-Pro.jpg?ssl=1
[8]: https://manjaro.org/download/xfce/
[9]: https://xfce.org/
[10]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/09/Manjaro-on-GBox-Pro.jpg?resize=800%2C470&ssl=1
[11]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/09/RiffTrax-on-GBox-Pro.jpg?resize=800%2C450&ssl=1
[12]: https://www.rifftrax.com/
[13]: https://www.amazon.com/CHUWI-Fanless-X7-E3950-Computer-Ethernet/dp/B07THWPRS1?SubscriptionId=AKIAJ3N3QBK3ZHDGU54Q&tag=chmod7mediate-20&linkCode=xm2&camp=2025&creative=165953&creativeASIN=B07THWPRS1 (GBox Pro's Amazon page)
[14]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/10/chuwi-gbox-pro.jpg?ssl=1
[15]: https://itsfoss.com/install-linux-on-intel-nuc/
[16]: https://itsfoss.com/best-linux-media-server/
[17]: https://www.chuwi.com/product/buy/Chuwi-GBox-Pro.html
[18]: https://www.chuwi.com/warranty.html
[19]: https://i2.wp.com/images-na.ssl-images-amazon.com/images/I/41ZyikLlCGL._SL160_.jpg?ssl=1
[20]: https://www.amazon.com/CHUWI-Fanless-X7-E3950-Computer-Ethernet/dp/B07THWPRS1?SubscriptionId=AKIAJ3N3QBK3ZHDGU54Q&tag=chmod7mediate-20&linkCode=xm2&camp=2025&creative=165953&creativeASIN=B07THWPRS1 (CHUWI GBox Pro Fanless Mini PC, Intel Atom X7-E3950,Win10 (64-bit) Desktop Computer with 4GB DDR4/64GB eMMC, Support Gigabit Ethernet, Linux, BT 4.0, 4K, Dual WiFi)
[21]: https://www.amazon.com/gp/prime/?tag=chmod7mediate-20 (Amazon Prime)
[22]: https://www.amazon.com/CHUWI-Fanless-X7-E3950-Computer-Ethernet/dp/B07THWPRS1?SubscriptionId=AKIAJ3N3QBK3ZHDGU54Q&tag=chmod7mediate-20&linkCode=xm2&camp=2025&creative=165953&creativeASIN=B07THWPRS1 (Buy on Amazon)

View File

@ -0,0 +1,152 @@
[#]: collector: (lujun9972)
[#]: translator: ( )
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (3 command line games for learning Bash the fun way)
[#]: via: (https://opensource.com/article/19/10/learn-bash-command-line-games)
[#]: author: (Seth Kenlon https://opensource.com/users/seth)
3 command line games for learning Bash the fun way
======
Learning useful Bash skills can be fun with these command line games.
![connecting yellow dots in a maze][1]
Learning is hard work, and nobody likes work. That means no matter how easy it is to learn Bash, it still might feel like work to you. Unless, of course, you learn through gaming.
You wouldn't think there would be many games out there to teach you how to use a Bash terminal, and you'd be right. Serious PC gamers know that the Fallout series features terminal-based computers in the vaults, which helps normalize the idea of interfacing with a computer through text, but in spite of featuring applications more or less like [Alpine][2] or [Emacs][3], playing Fallout doesn't teach you commands or applications you can use in real life. The Fallout series was never ported to Linux directly (although it is playable through Steam's open source [Proton][4]. The modern entries into the [Wasteland series][5] that served as predecessors to Fallout, however, do target Linux, so if you want to experience in-game terminals, you can play [Wasteland 2][6] and [Wasteland 3][7] on your Linux gaming PC. The [Shadowrun][8] series also targets Linux, and it features a lot of terminal-based interactions, although it's admittedly often overshadowed by blazing [hot sim][9] sequences. 
While those games take a fun approach to computer terminals, and they run on open source systems, none are open source themselves. There are, however, at least two games that take a serious, and seriously fun, approach to teaching people how to interact with systems through text commands. And best of all, they're open source.
### Bashcrawl
You may have heard of [Colossal Cave Adventure][10], an old text-based, interactive game in the style of "choose your own adventure" books. Early computerists played these obsessively at the DOS or ProDOS command line, struggling to find the right combination of valid syntax and zany fantasy logic (as interpreted by a sardonic hacker) to beat the game. Imagine how productive such a struggle could be if the challenge, aside from exploring a virtual medieval dungeon, was to recall valid Bash commands. That's the pitch for **[Bashcrawl][11]**, a Bash-based dungeon crawl you play by learning and using Bash commands.
In Bashcrawl, a "dungeon" is created in the form of directories and files on your computer. You explore the dungeon by using the **cd** command to change directory into each room of the dungeon. As you [proceed through directories][12], you examine files with **[ls -F][13]**, read files with **[cat][14]**, [set variables][15] to collect treasure, and run scripts to fight monsters. Everything you do in the game is a valid Bash command that you can use later in real life, and playing the game provides Bash practice because the "game" is made out of actual directories and files on your computer.
```
$ cd entrance/
$ ls
cellar  scroll
$ cat scroll
It is pitch black in these catacombs.
You have a magical spell that lists all items in a room.
To see in the dark, type:     ls
To move around, type:         cd <directory>
Try looking around this room.
Then move into one of the next rooms.
EXAMPLE:
$ ls
$ cd cellar
Remember to cast ``ls`` when you get into the next room!
$
```
#### Install Bashcrawl
Before you can play Bashcrawl, you must have Bash or [Zsh][16] on your system. Linux, BSD, and MacOS ship with Bash included. Windows users can download and install [Cygwin][17] or [WSL][18] or [try Linux][19].
To install Bashcrawl, navigate to [GitLab][11] in Firefox or your web browser of choice. On the right side of the page, click the **Download** icon (to the right of the **Find file** button).
In the **Download** pop-up menu, click the **Zip** button to download the latest version of the game.
* * *
* * *
* * *
**![Download a zip from Gitlab][20]**
Once it's downloaded, unzip the archive.
Alternatively, if you want to start working in the terminal right away, you can use [Git][21]:
```
`$ git clone https://gitlab.com/slackermedia/bashcrawl.git bashcrawl`
```
#### Getting started
As with almost any new software package you download, the first thing you must do is read the README file. You can do this by double-clicking on the **README.md** file in the **bashcrawl** directory. On a Mac, your computer may not know what application to use to open the file; you can use any text editor or LibreOffice. **README.md** tells you exactly how to start playing the game, including how to get to the game in your terminal and the first command you must issue to start the game. If you fail to read the README file, the game wins by default (although it can't tell you that because you won't have played it).
Bashcrawl isn't meant to be overly clever or advanced. On the contrary, it's as simple as it possibly can be in the interest of being transparent to new users. Ideally, a new Bash user can learn some of the basics of Bash from the game, and then stumble upon the mechanics of the game, including the simple scripts that make it run, and learn still more Bash. Additionally, new Bash users can design their own dungeon by following the examples of Bashcrawl's existing content, and there's no better way to learn to code than to make a game.
### Command Line Heroes: BASH
Bashcrawl is meant for absolute beginners. If you use Bash on a regular basis, you'll very likely try to outsmart Bashcrawl by looking at files in ways that a beginner doesn't know yet. If you're an intermediate or advanced Bash user, then you should try **[Command Line Heroes: BASH][22]**.
The game is simple: Type in as many valid commands you can think of during a given amount of time. It sounds simple. As a Bash user, you use lots of commands every day. As a Linux user, you know where to find lists of commands; the **util-linux** package alone contains over 100 commands! The question is, are any of those commands available at your fingertips under the pressure of a countdown?
![Command Line Heroes: BASH][23]
This game sounds simple because it is! In principle, it's similar to flashcards, only in reverse. In practice, it's a fun way to test your knowledge and recall. And of course, it's open source, having been developed by the creators of [Open Jam][24].
#### Installing
You can play Command Line Heroes: Bash [online][25], or you can download the source code from [GitHub][26].
The game is written in Node.js, so unless you want to help develop the game, it makes sense to just play it online.
### Minesweeper in Bash
If you're an advanced Bash user, and you've written several Bash scripts, then you're probably beyond just learning Bash. For a real challenge, you might try programming a game instead of playing one. With a little thought and an afternoon or three of work, the popular game **Minesweeper** can be implemented entirely in Bash. You can try writing the game yourself first, then refer to [Abhishek Tamrakar's][27] article for an overview of how he accomplished it.
![][28]
Sometimes programming doesn't have a purpose but to educate. Programming a game in Bash may not be the project you'll stake your online reputation on, but the process can be fun and enlightening. And facing a problem you never expected to face is a great way to learn new tricks.
### Learn Bash; have fun
Regardless of how you approach learning it, Bash is a powerful interface because it gives you the ability to direct your computer to do what you want without going through the "middleman" interface of a GUI application. Sometimes a GUI is very helpful, but other times you want to graduate from something you know all too well and move to something you can do quickly or through automation. Because Bash is text-based, it's easy to script, making it a great starting point for automated jobs.
Learn Bash to start becoming a power user. But make sure you have fun doing it.
--------------------------------------------------------------------------------
via: https://opensource.com/article/19/10/learn-bash-command-line-games
作者:[Seth Kenlon][a]
选题:[lujun9972][b]
译者:[译者ID](https://github.com/译者ID)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://opensource.com/users/seth
[b]: https://github.com/lujun9972
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/LAW_maze.png?itok=mZ5LP4-X (connecting yellow dots in a maze)
[2]: https://opensource.com/article/17/10/alpine-email-client
[3]: http://www.gnu.org/software/emacs
[4]: https://github.com/ValveSoftware/Proton/
[5]: https://www.gog.com/game/wasteland_the_classic_original
[6]: https://www.inxile-entertainment.com/wasteland2
[7]: https://www.inxile-entertainment.com/wasteland3
[8]: http://harebrained-schemes.com/games/
[9]: https://forums.shadowruntabletop.com/index.php?topic=21804.0
[10]: https://opensource.com/article/18/12/linux-toy-adventure
[11]: https://gitlab.com/slackermedia/bashcrawl
[12]: https://opensource.com/article/19/8/understanding-file-paths-linux
[13]: https://opensource.com/article/19/7/master-ls-command
[14]: https://opensource.com/article/19/2/getting-started-cat-command
[15]: https://opensource.com/article/19/8/using-variables-bash
[16]: https://opensource.com/article/19/9/getting-started-zsh
[17]: https://www.cygwin.com/
[18]: https://docs.microsoft.com/en-us/windows/wsl/wsl2-about
[19]: https://opensource.com/article/19/7/ways-get-started-linux
[20]: https://opensource.com/sites/default/files/images/education/screenshot_from_2019-09-28_10-49-49.png (Download a zip from Gitlab)
[21]: https://opensource.com/life/16/7/stumbling-git
[22]: https://www.redhat.com/en/command-line-heroes/bash/index.html?extIdCarryOver=true&sc_cid=701f2000001OH79AAG
[23]: https://opensource.com/sites/default/files/uploads/commandlineheroes-bash.jpg (Command Line Heroes: BASH)
[24]: http://openjam.io/
[25]: https://www.redhat.com/en/command-line-heroes/bash/index.html
[26]: https://github.com/CommandLineHeroes/clh-bash/
[27]: https://opensource.com/article/19/9/advanced-bash-building-minesweeper
[28]: https://opensource.com/sites/default/files/uploads/extractmines.png

View File

@ -0,0 +1,236 @@
[#]: collector: (lujun9972)
[#]: translator: ( )
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (7 Bash history shortcuts you will actually use)
[#]: via: (https://opensource.com/article/19/10/bash-history-shortcuts)
[#]: author: (Ian Miell https://opensource.com/users/ianmiell)
7 Bash history shortcuts you will actually use
======
Save time on the command line with these essential Bash shortcuts.
![Command line prompt][1]
Most guides to Bash history shortcuts exhaustively list every single one available. The problem with that is I would use a shortcut once, then glaze over as I tried out all the possibilities. Then I'd move onto my working day and completely forget them, retaining only the well-known [**!!** trick][2] I learned when I first started using Bash.
So most of them were never committed to memory.
This article outlines the shortcuts I _actually use_ every day. It is based on some of the contents of my book, [_Learn Bash the hard way_][3]; (you can read a [preview][4] of it to learn more).
When people see me use these shortcuts, they often ask me, "What did you do there!?" There's minimal effort or intelligence required, but to really learn them, I recommend using one each day for a week, then moving to the next one. It's worth taking your time to get them under your fingers, as the time you save will be significant in the long run.
### 1\. The "last argument" one: !$
If you only take one shortcut from this article, make it this one. It substitutes in the last argument of the last command into your line.
Consider this scenario:
```
$ mv /path/to/wrongfile /some/other/place
mv: cannot stat '/path/to/wrongfile': No such file or directory
```
Ach, I put the **wrongfile** filename in my command. I should have put **rightfile** instead.
You might decide to retype the last command and replace wrongfile with rightfile completely. Instead, you can type:
```
$ mv /path/to/rightfile !$
mv /path/to/rightfile /some/other/place
```
and the command will work.
There are other ways to achieve the same thing in Bash with shortcuts, but this trick of reusing the last argument of the last command is one I use the most.
### 2\. The "_n_th argument" one: !:2
Ever done anything like this?
```
$ tar -cvf afolder afolder.tar
tar: failed to open
```
Like many others, I get the arguments to **tar** (and **ln**) wrong more often than I would like to admit.
[![xkcd comic][5]][6]
When you mix up arguments like that, you can run:
```
$ !:0 !:1 !:3 !:2
tar -cvf afolder.tar afolder
```
and your reputation will be saved.
The last command's items are zero-indexed and can be substituted in with the number after the **!:**.
Obviously, you can also use this to reuse specific arguments from the last command rather than all of them.
### 3\. The "all the arguments" one: !:1-$
Imagine I run a command like:
```
`$ grep '(ping|pong)' afile`
```
The arguments are correct; however, I want to match **ping** or **pong** in a file, but I used **grep** rather than **egrep**.
I start typing **egrep**, but I don't want to retype the other arguments. So I can use the **!:1$** shortcut to ask for all the arguments to the previous command from the second one (remember theyre zero-indexed) to the last one (represented by the **$** sign).
```
$ egrep !:1-$
egrep '(ping|pong)' afile
ping
```
You don't need to pick **1-$**; you can pick a subset like **1-2** or **3-9** (if you had that many arguments in the previous command).
### 4\. The "last but _n_" one: !-2:$
The shortcuts above are great when I know immediately how to correct my last command, but often I run commands _after_ the original one, which means that the last command is no longer the one I want to reference.
For example, using the **mv** example from before, if I follow up my mistake with an **ls** check of the folder's contents:
```
$ mv /path/to/wrongfile /some/other/place
mv: cannot stat '/path/to/wrongfile': No such file or directory
$ ls /path/to/
rightfile
```
I can no longer use the **!$** shortcut.
In these cases, I can insert a **-_n_:** (where _**n**_ is the number of commands to go back in the history) after the **!** to grab the last argument from an older command:
```
$ mv /path/to/rightfile !-2:$
mv /path/to/rightfile /some/other/place
```
Again, once you learn it, you may be surprised at how often you need it.
### 5\. The "get me the folder" one: !$:h
This one looks less promising on the face of it, but I use it dozens of times daily.
Imagine I run a command like this:
```
$ tar -cvf system.tar /etc/system
 tar: /etc/system: Cannot stat: No such file or directory
 tar: Error exit delayed from previous errors.
```
The first thing I might want to do is go to the **/etc** folder to see what's in there and work out what I've done wrong.
I can do this at a stroke with:
```
$ cd !$:h
cd /etc
```
This one says: "Get the last argument to the last command (**/etc/system**) and take off its last filename component, leaving only the **/etc**."
### 6\. The "the current line" one: !#:1
For years, I occasionally wondered if I could reference an argument on the current line before finally looking it up and learning it. I wish I'd done so a long time ago. I most commonly use it to make backup files:
```
$ cp /path/to/some/file !#:1.bak
cp /path/to/some/file /path/to/some/file.bak
```
but once under the fingers, it can be a very quick alternative to …
### 7\. The "search and replace" one: !!:gs
This one searches across the referenced command and replaces what's in the first two **/** characters with what's in the second two.
Say I want to tell the world that my **s** key does not work and outputs **f** instead:
```
$ echo my f key doef not work
my f key doef not work
```
Then I realize that I was just hitting the **f** key by accident. To replace all the **f**s with **s**es, I can type:
```
$ !!:gs/f /s /
echo my s key does not work
my s key does not work
```
It doesn't work only on single characters; I can replace words or sentences, too:
```
$ !!:gs/does/did/
echo my s key did not work
my s key did not work
```
### Test them out
Just to show you how these shortcuts can be combined, can you work out what these toenail clippings will output?
```
$ ping !#:0:gs/i/o
$ vi /tmp/!:0.txt
$ ls !$:h
$ cd !-2:h
$ touch !$!-3:$ !! !$.txt
$ cat !:1-$
```
### **Conclusion**
Bash can be an elegant source of shortcuts for the day-to-day command-line user. While there are thousands of tips and tricks to learn, these are my favorites that I frequently put to use.
If you want to dive even deeper into all that Bash can teach you, pick up my book, [_Learn Bash the hard way_][3] or check out my online course, [Master the Bash shell][7].
* * *
_This article was originally posted on Ian's blog, [Zwischenzugs.com][8], and is reused with permission._
--------------------------------------------------------------------------------
via: https://opensource.com/article/19/10/bash-history-shortcuts
作者:[Ian Miell][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/ianmiell
[b]: https://github.com/lujun9972
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/command_line_prompt.png?itok=wbGiJ_yg (Command line prompt)
[2]: https://opensource.com/article/18/5/bash-tricks
[3]: https://leanpub.com/learnbashthehardway
[4]: https://leanpub.com/learnbashthehardway/read_sample
[5]: https://opensource.com/sites/default/files/uploads/tar_2x.png (xkcd comic)
[6]: https://xkcd.com/1168/
[7]: https://www.educative.io/courses/master-the-bash-shell
[8]: https://zwischenzugs.com/2019/08/25/seven-god-like-bash-history-shortcuts-you-will-actually-use/

View File

@ -0,0 +1,240 @@
[#]: collector: (lujun9972)
[#]: translator: ( )
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (How to create the user interface for your Corteza Low Code application)
[#]: via: (https://opensource.com/article/19/10/corteza-low-code-user-interface)
[#]: author: (Lenny Horstink https://opensource.com/users/lenny-horstink)
How to create the user interface for your Corteza Low Code application
======
Add a user-friendly interface to your application built in Corteza Low
Code, an open source alternative to Salesforce.
![metrics and data shown on a computer screen][1]
In the first two articles in this series, I explained how to use Corteza Low Code to [create an application][2] to track donations and [set up its data structure][3] with modules and fields. In the third article, I will explain how to create the graphical part of the Donations application.
**Pages** is the HTTP web layer of Corteza Low Code. For comfort of design and to ensure your application is responsive and mobile-ready by default, Pages are built-in blocks. Each block can be resized and dragged wherever you desire. In all blocks, you can define the title, the description, and the layout.
There are two types of pages: **Record** pages (which show data for or related to a single record) and **List** pages (which show a searchable list of multiple records). Each type is described below.
### Record pages
A module without a Record page cannot do anything. To store data inside a module, you need to create a Record page and add it to a module by selecting the appropriate **Page builder** button on the **Modules** page. This opens the drag-and-drop page editor.
The Donations application has four modules, and each one has the **Page builder** link:
![Page Builder Link][4]
First, create the record page for the **Contact** module. When you click on the **Page builder** link, an empty record page opens. Add blocks with the **\+ Add block** button.
![Add block button][5]
There are multiple block types available.
![Block types][6]
The "Contact" record page in the "Donations" application uses two block types: **Record** and **Record list**.
#### Record blocks
The **Record** block is the most important block for a Record page. You can select the block's layout and the fields you want to show. The **Contact** record page needs to show: _Name_, _Email_, _Phone,_ and _Address_. Select those fields and hit **Save and close**, and the block will be added.
![Form to change Record block][7]
When you view a record, the values of these fields are shown as strings, and when you add or edit a record, these fields turn into form-input fields.
Tip: You can drag-and-drop the fields and place them in any order you prefer.
#### Record list blocks
The **Contact** page will show the list of donation each contact has given. Create a list of records by selecting the **Record list** block.
Make **Donations** the title, and select the **ContactDonation** module in the **Module** field. After selecting a module, the columns that are available are populated automatically, and you can select the columns you want to show in the **Record list**: _Donation_, _Project_, and the system field _Created at_.
If you saved the **Record list** block right now, you would see all donations from all contacts. Because you want to show the donations related to a single contact record, you need to add a **prefilter**.
The **Prefilter records** field allows simplified SQL "Where" conditions, and variables like **${recordID}**, **${ownerID}**, and **${userID}** are evaluated (when available). For the **Record list**, you want to filter **ContactDonation** records by contact, so you need to fill in: **${recordID} = contactId**. Note: **contactId** is a **Record** field in the module **ContactDonation**. Take a look back at the [second article][3] in this series for more info about linking modules.
You also want to be able to sort a contact's donations by date. This can be done in the **Presort records** field by inserting **createdAt DESC**. This field supports simplified SQL _Order by_ condition syntax.
You can also select to hide or show the **New record** button and Search box, and you can define the number of records shown. A best practice is to adjust this number to the size of the block.
![Form to change Record list block][8]
To save the block and add it to the page, hit **Save and close**. Now the second block has been added to the page.
#### Other block types
Other block types are:
* **Content:** This block allows you to add fixed text, which you can create with a rich text editor. This is ideal for "help" texts or links to resources, such as the sales handbook on an intranet.
* **Chart:** Inserts charts that have been created with the chart builder. This is very useful when you are creating dashboards.
* **Social media feed:** You can show live content from Twitter here—either a fixed Twitter feed (which is shown in all records) or from a Module field that represents a Twitter link (which enables each record to have his own feed).
* **Automation:** In this block, you can add automation rules that have a manual trigger and that are available for the module, as well as automation rules with no primary module. They are shown to end users as buttons. You can format the automation rule buttons by inserting custom text and selecting a style, and you can change the order of them (when you have multiple buttons) with a drag-and-drop.
* **Calendar:** This block inserts a calendar, which can be shown in the following formats:
* Month
* Month agenda
* Week agenda
* Day agenda
* Month list
* Week list
* Day list The source of the calendar is a list of records from one or multiple modules. For each source, you can select which field represents the title, start date, and end date of the event.
* **File:** You can upload a file and show it on the page. Just like the **Content** block, the content of this block will be the same for all records. To have files that are related to a record, you need to use the **File** field type when creating fields in a module.
Next, add the Record pages for the other modules in the Donations application. Once that is done, you will see the following list under **Pages**:
![List of pages][9]
### Change the page layout
After adding blocks to pages, such as the **Contact Details** and **Donations** blocks in the **Contact** module's Record page, you can resize and position them to create the layout you want.
![Moving blocks around][10]
The end result is:
![Corteza layout][11]
Corteza Low-Code is responsive by default, so the blocks will resize and reposition automatically on devices with small screens.
### List pages
List pages are not related to any single record; rather, they show lists of records. This page type is used to create a home page, list of contacts, list of projects, dashboards, etc. List pages are important because you can't enter new records without viewing a list because the **Add new record** button is shown on lists.
For the Donations application, create the following list pages: _Home_, _Contacts_, and _Projects_.
To create a List page, you need to go to the **Pages** administrative page and enter a title in the **Create a new page** box at the top. When you submit this form, it opens the **Edit page** form, which allows you to add a page description (for internal use; the end user will not see it), and you can set the page to **Enabled** so it can be accessed.
Your list of pages will now look like:
![List of pages][12]
You can drag-and-drop to rearrange this to:
![List of pages][13]
Rearranging pages makes it easier to maintain the application. It also allows you to generate the application menu structure because List pages (but not Record pages) are shown as menu items.
Adding content to each List page is exactly the same as adding blocks to Record pages. The only difference is that you cannot select the **Record** block type (because it is related to a single record).
### Create a menu
The menu in a Corteza Low-Code application is automatically generated by the tree of pages on the admin page **Pages**. It only shows List pages and ignores Record pages.
To reorder the menu, simply drag-and-drop the pages in the desired order within the tree of pages.
### Add charts
Everybody loves charts and graphs. If pictures are worth 1,000 words, then you can create a priceless application in Corteza.
Corteza Low-Code comes with a chart builder that allows you to build line, bar, pie, and donut charts:
![Chart types available in Corteza Low Code][14]
As an example, add a chart that shows how many donations have been made to each Project. To begin, enter the **Charts** page in the admin menu.
![Corteza charts admin page][15]
To create a new chart, use the **Create a new chart** field.
Inside the chart builder, you will find the following fields:
* **Name:** Enter a name for the chart; e.g., _Donations_.
* **Module:** This is the module that provides the data to the chart.
* **Filters:** You can select one of the predefined filters, such as **Records created this year**, or add any custom filter (such as **status = "Active"**).
* **Dimensions:** These can be **Datetime** and **Select** fields. Datetime fields allow grouping (e.g., by day, by week, by month). The **Skip missing values** option is handy to remove values that would return null (e.g., records with incomplete data), and **Calculate how many labels can be shown** can avoid overlapping labels (which is useful for charts with many dates on the X-axis).
* **Metrics:** Metrics are numeric fields and have a predefined _count_ option. You can add multiple metric blocks and give each a different label, field (source), function (COUNTD, SUM, MAX, MIN, AVG, or STD, if possible), output (line or bar), and color.
This sample chart uses the **ContactDonation** module and shows total donations per day.
![Chart of donations per day][16]
The final step is to add a chart to a page. To add this chart to the home page:
* Enter **Pages** in the admin menu.
* Click on the **Page builder** link of the **Home** page.
* Add a page block of the type **Chart**, add a block title, and select the chart.
* Resize and reposition the block (or blocks) to make the layout look nice.
![Chart added][17]
When you save the page and enter your Donation application (via the **Public pages** link on the top right), you will see the home page with the chart.
![Chart displayed on Corteza UI][18]
### Add automation
Automation can make your Corteza Low Code application more efficient. With the Automation tool, you can create business logic that evaluates records automatically when they are created, updated, or deleted, or you can execute a rule manually.
Triggers are written in JavaScript, one of the most used programming languages in the world, enabling you to write simple code that can evaluate, calculate, and transform data (such as numbers, strings, or dates). Corteza Low Code comes with extra functions that allow you to access, create, save, or delete records; find users; send notifications via email; use Corteza Messaging; and more.
[Corteza CRM][19] has an extensive set of automation rules that can be used as examples. Some of them are:
* Account: Create new case
* Account: Create new opportunity
* Case: Insert case number
* Contract: Send contract to custom email
* Lead: Convert a lead into an account and opportunity
* Opportunity: Apply price book
* Opportunity: Generate new quote
* Quote: Submit quote for approval
A complete manual on how to use the automation module, together with code examples, is in development.
### Deploy an application
Deploying a Corteza Low Code application is very simple. As soon as it's Enabled, it's deployed and available in the Corteza Low Code Namespaces menu. Once deployed, you can start using your application!
### For more information
As I mentioned in parts 1 and 2 of this series, the complete Donations application created in this series is available on the [Corteza community server][20]. You need to be logged in or create a free Corteza community server account to check it out.
Also, check out the documentation on the [Corteza website][21] for other, up-to-date user and admin tutorials.
If you have any questions—or would like to contribute—please join the [Corteza Community][22]. After you log in, please introduce yourself in the #Welcome channel.
--------------------------------------------------------------------------------
via: https://opensource.com/article/19/10/corteza-low-code-user-interface
作者:[Lenny Horstink][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/lenny-horstink
[b]: https://github.com/lujun9972
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/metrics_data_dashboard_system_computer_analytics.png?itok=oxAeIEI- (metrics and data shown on a computer screen)
[2]: https://opensource.com/article/19/9/how-build-application-corteza-low-code-open-source-alternative-salesforce
[3]: https://opensource.com/article/19/9/creating-data-structure-corteza-low-code
[4]: https://opensource.com/sites/default/files/uploads/corteza_donationspagebuilderlink.png (Page Builder Link)
[5]: https://opensource.com/sites/default/files/uploads/corteza_addblock.png (Add block button)
[6]: https://opensource.com/sites/default/files/uploads/corteza_blocktypes.png (Block types)
[7]: https://opensource.com/sites/default/files/uploads/corteza_changerecordblock.png (Form to change Record block)
[8]: https://opensource.com/sites/default/files/uploads/corteza_changerecordlistblock.png (Form to change Record list block)
[9]: https://opensource.com/sites/default/files/uploads/corteza_pageslist.png (List of pages)
[10]: https://opensource.com/sites/default/files/uploads/corteza_movingblocks.png (Moving blocks around)
[11]: https://opensource.com/sites/default/files/uploads/corteza_layoutresult.png (Corteza layout)
[12]: https://opensource.com/sites/default/files/uploads/corteza_pageslist2.png (List of pages)
[13]: https://opensource.com/sites/default/files/uploads/corteza_pageslist3.png (List of pages)
[14]: https://opensource.com/sites/default/files/uploads/corteza_charttypes.png (Chart types available in Corteza Low Code)
[15]: https://opensource.com/sites/default/files/uploads/corteza_createachart.png (Corteza charts admin page)
[16]: https://opensource.com/sites/default/files/uploads/corteza_chartdonationsperday.png (Chart of donations per day)
[17]: https://opensource.com/sites/default/files/uploads/corteza_addchartpreview.png (Chart added)
[18]: https://opensource.com/sites/default/files/uploads/corteza_pageshowingchart.png (Chart displayed on Corteza UI)
[19]: https://cortezaproject.org/technology/core/corteza-crm/
[20]: https://latest.cortezaproject.org/compose/ns/donations/
[21]: https://www.cortezaproject.org/
[22]: https://latest.cortezaproject.org/

View File

@ -0,0 +1,174 @@
[#]: collector: (lujun9972)
[#]: translator: ( )
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (4 open source eBook readers for Android)
[#]: via: (https://opensource.com/article/19/10/open-source-ereaders-android)
[#]: author: (Scott Nesbitt https://opensource.com/users/scottnesbitt)
4 open source eBook readers for Android
======
Looking for a new eBook app? Check out these four solid, open source
eBook readers for Android.
![Computer browser with books on the screen][1]
Who doesn't like a good read? Instead of frittering away your time on social media or a [messaging app][2], you can enjoy a book, magazine, or another document on your Android-powered phone or tablet.
To do that, all you need is the right eBook reader app. So let's take a look at four solid, open source eBook readers for Android.
### Book Reader
Let's start off with my favorite open source Android eBook reader: [Book Reader][3]. It's based on the older, open source version of the now-proprietary FBReader app. Like earlier versions of its progenitor, Book Reader is simple and minimal, but it does a great job.
**Pros of Book Reader:**
* It's easy to use.
* The app's interface follows Android's [Material Design guidelines][4], so it's very clean.
* You can add bookmarks to an eBook and share text with other apps on your device.
* There's growing support for languages other than English.
**Cons of Book Reader:**
* Book Reader has a limited number of configuration options.
* There's no built-in dictionary or support for an external dictionary.
**Supported eBook formats:**
Book Reader supports EPUB, .mobi, PDF, [DjVu][5], HTML, plain text, Word documents, RTF, and [FictionBook][6].
![Book Reader Android app][7]
Book Reader's source code is licensed under the GNU General Public License version 3.0, and you can find it on [GitLab][8].
### Cool Reader
[Cool Reader][9] is a zippy and easy-to-use eBook app. While I think the app's icons are reminiscent of those found in Windows Vista, Cool Reader does have several useful features.
**Pros of Cool Reader:**
* It's highly configurable. You can change fonts, line and paragraph spacing, hyphenation, font sizes, margins, and background colors.
* You can override the stylesheet in a book. I found this useful with two or three books that set all text in small capital letters.
* It automatically scans your device for new books when you start it up. You can also access books on [Project Gutenberg][10] and the [Internet Archive][11].
**Cons of Cool Reader:**
* Cool Reader doesn't have the cleanest or most modern interface.
* While it's usable out of the box, you really need to do a bit of configuration to make Cool Reader comfortable to use.
* The app's default dictionary is proprietary, although you can swap it out for [an open one][12].
**Supported eBook formats:**
You can use Cool Reader to browse EPUB, FictionBook, plain text, RTF, HTML, [Compiled HTML Help][13] (.chm), and TCR (the eBook format for the Psion series of handheld computers) files.
![Cool Reader Android app][14]
Cool Reader's source code is licensed under the GNU General Public License version 2, and you can find it on [Sourceforge][15].
### KOReader
[KOReader][16] was originally created for [E Ink][17] eBook readers but found its way to Android. While testing it, I found KOReader to be both useful and frustrating in equal measures. It's definitely not a bad app, but it's not my first choice.
**Pros of KOReader:**
* It's highly configurable.
* It supports multiple languages.
* It allows you to look up words using a [dictionary][18] (if you have one installed) or Wikipedia (if you're connected to the internet).
**Cons of KOReader:**
* You need to change the settings for each book you read. KOReader doesn't remember settings when you open a new book.
* The interface is reminiscent of a dedicated eBook reader. The app doesn't have that Android look and feel.
**Supported eBook formats:**
You can view PDF, DjVu, CBT, and [CBZ][5] eBooks. It also supports EPUB, FictionBook, .mobi, Word documents, text files, and [Compiled HTML Help][13] (.chm) files.
![KOReader Android app][19]
KOReader's source code is licensed under the GNU Affero General Public License version 3.0, and you can find it on [GitHub][20].
### Booky McBookface
Yes, that really is the name of [this eBook reader][21]. It's the most basic of the eBook readers in this article but don't let that (or the goofy name) put you off. Booky McBookface is easy to use and does the one thing it does quite well.
**Pros of Booky McBookface:**
* There are no frills. It's just you and your eBook.
* The interface is simple and clean.
* Long-tapping the app's icon in the Android Launcher pops up a menu from which you can open the last book you were reading, get a list of unread books, or find and open a book on your device.
**Cons of Booky McBookface:**
* The app has few configuration options—you can change the size of the font and the brightness, and that's about it.
* You need to use the buttons at the bottom of the screen to navigate through an eBook. Tapping the edges of the screen doesn't work.
* You can't add bookmarks to an eBook.
**Supported eBook formats:**
You can read eBooks in EPUB, HTML, or plain text formats with Booky McBookface.
![Booky McBookface Android app][22]
Booky McBookface's source code is available under the GNU General Public License version 3.0, and you can find it [on GitHub][23].
Do you have a favorite open source eBook reader for Android? Share it with the community by leaving a comment.
Have you ever downloaded an Android app only to find that it wants access to all your phone's...
There is a rich and growing ecosystem of open source applications for mobile devices, just like the...
With these seven open source apps, you can play chess against your phone or an online opponent,...
--------------------------------------------------------------------------------
via: https://opensource.com/article/19/10/open-source-ereaders-android
作者:[Scott Nesbitt][a]
选题:[lujun9972][b]
译者:[译者ID](https://github.com/译者ID)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://opensource.com/users/scottnesbitt
[b]: https://github.com/lujun9972
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/computer_browser_program_books_read.jpg?itok=iNMWe8Bu (Computer browser with books on the screen)
[2]: https://opensource.com/article/19/3/open-messenger-client
[3]: https://f-droid.org/en/packages/com.github.axet.bookreader/
[4]: https://material.io/design/
[5]: https://opensource.com/article/19/3/comic-book-archive-djvu
[6]: https://en.wikipedia.org/wiki/FictionBook
[7]: https://opensource.com/sites/default/files/uploads/book_reader-book-list.png (Book Reader Android app)
[8]: https://gitlab.com/axet/android-book-reader/tree/HEAD
[9]: https://f-droid.org/en/packages/org.coolreader/
[10]: https://www.gutenberg.org/
[11]: https://archive.org
[12]: http://aarddict.org/
[13]: https://fileinfo.com/extension/chm
[14]: https://opensource.com/sites/default/files/uploads/cool_reader-icons.png (Cool Reader Android app)
[15]: https://sourceforge.net/projects/crengine/
[16]: https://f-droid.org/en/packages/org.koreader.launcher/
[17]: https://en.wikipedia.org/wiki/E_Ink
[18]: https://github.com/koreader/koreader/wiki/Dictionary-support
[19]: https://opensource.com/sites/default/files/uploads/koreader-lookup.png (KOReader Android app)
[20]: https://github.com/koreader/koreader
[21]: https://f-droid.org/en/packages/com.quaap.bookymcbookface/
[22]: https://opensource.com/sites/default/files/uploads/booky_mcbookface-menu.png (Booky McBookface Android app)
[23]: https://github.com/quaap/BookyMcBookface