mirror of
https://github.com/LCTT/TranslateProject.git
synced 2024-12-29 21:41:00 +08:00
Merge branch 'master' of github.com:LCTT/TranslateProject
This commit is contained in:
commit
9e60473b47
602
sources/tech/20161005 GETTING STARTED WITH ANSIBLE.md
Normal file
602
sources/tech/20161005 GETTING STARTED WITH ANSIBLE.md
Normal file
@ -0,0 +1,602 @@
|
||||
GETTING STARTED WITH ANSIBLE
|
||||
==========
|
||||
|
||||
|
||||
This is a crash course on Ansible that you can also use as a template for small projects or to get you into this awesome tool. By the end of this guide, you will know enough to automate server configurations, deployments and more.
|
||||
|
||||
### What is Ansible and why you should care ?
|
||||
|
||||
Ansible is a configuration management system known for its simplicity. You only need ssh access to your servers or equipment. It also differs from other options because it pushes changes instead of pulling like puppet or chef normally do. You can deploy code to any number of servers, configure network equipment or automate anything in your infrastructure.
|
||||
|
||||
#### Requirements
|
||||
|
||||
It’s assumed that you are using Mac or Linux as your workstation, Ubuntu Trusty for your servers and have some experience installing packages. Also, you will need the following software on your computer. So, if you don’t have them already, go ahead and install:
|
||||
|
||||
- Virtualbox
|
||||
- Vagrant
|
||||
- Mac users: Homebrew
|
||||
|
||||
#### Scenario
|
||||
We are going to emulate 2 web application servers connecting to a MySQL database. The web application uses Rails 5 with Puma.
|
||||
|
||||
### Preparations
|
||||
|
||||
#### Vagrantfile
|
||||
|
||||
Create a folder for this project and save the following content in a file called: Vagrantfile
|
||||
|
||||
```
|
||||
VMs = [
|
||||
[ "web1", "10.1.1.11"],
|
||||
[ "web2", "10.1.1.12"],
|
||||
[ "dbserver", "10.1.1.21"],
|
||||
]
|
||||
|
||||
Vagrant.configure(2) do |config|
|
||||
VMs.each { |vm|
|
||||
config.vm.define vm[0] do |box|
|
||||
box.vm.box = "ubuntu/trusty64"
|
||||
box.vm.network "private_network", ip: vm[1]
|
||||
box.vm.hostname = vm[0]
|
||||
box.vm.provider "virtualbox" do |vb|
|
||||
vb.memory = "512"
|
||||
end
|
||||
end
|
||||
}
|
||||
end
|
||||
```
|
||||
|
||||
### Configure your virtual network
|
||||
|
||||
We want our VMs to talk to each other, but don’t let that traffic go out to your real network, so we are going to create aHost-Only adapter in Virtualbox.
|
||||
|
||||
1. Open Virtualbox
|
||||
2. Go to Preferences
|
||||
3. Go to Network
|
||||
4. Click on Host-Only networks
|
||||
5. Click to add a network
|
||||
6. Click on Adapter
|
||||
7. Set IPv4 to 10.1.1.1, IPv4 Network Mark: 255.255.255.0
|
||||
8. Click Ok
|
||||
|
||||
#### Test your VMs and virtual network
|
||||
|
||||
In a terminal, in the directory for this project where you have the Vagrantfile, type the following command:
|
||||
|
||||
```
|
||||
vagrant up
|
||||
```
|
||||
|
||||
This will create your VMs so it may take a while. Check that everything worked by typing this command and verifying the output:
|
||||
|
||||
```
|
||||
$ vagrant status
|
||||
Current machine states:
|
||||
|
||||
web1 running (virtualbox)
|
||||
web2 running (virtualbox)
|
||||
master running (virtualbox)
|
||||
|
||||
This environment represents multiple VMs. The VMs are all listed
|
||||
above with their current state. For more information about a specific
|
||||
VM, run `vagrant status NAME`.
|
||||
```
|
||||
|
||||
Now log into each one of the VMs using user & password vagrant and the IPs in the Vagrantfile, this will validate the VMs and add their keys to your known hosts file.
|
||||
|
||||
```
|
||||
ssh vagrant@10.1.1.11 # password is `vagrant`
|
||||
ssh vagrant@10.1.1.12
|
||||
ssh vagrant@10.1.1.21
|
||||
```
|
||||
|
||||
Congratulations! Now you have servers to play with. Here comes the exiting part!
|
||||
|
||||
### Install Ansible
|
||||
|
||||
For Mac users:
|
||||
|
||||
```
|
||||
$ brew install ansible
|
||||
```
|
||||
|
||||
For Ubuntu users:
|
||||
|
||||
```
|
||||
$ sudo apt install ansible
|
||||
```
|
||||
|
||||
Make sure you got a recent version of ansible that is 2.1 or superior:
|
||||
|
||||
```
|
||||
$ ansible --version
|
||||
ansible 2.1.1.0
|
||||
```
|
||||
|
||||
### The Inventory
|
||||
|
||||
Ansible uses an inventory to know what servers to work with and how to group them to perform tasks(in parallel). Let’s create our inventory for this project and name it inventory in the same folder as the Vagrantfile:
|
||||
|
||||
```
|
||||
[all:children]
|
||||
webs
|
||||
db
|
||||
|
||||
[all:vars]
|
||||
ansible_user=vagrant
|
||||
ansible_ssh_pass=vagrant
|
||||
|
||||
[webs]
|
||||
web1 ansible_host=10.1.1.11
|
||||
web2 ansible_host=10.1.1.12
|
||||
|
||||
[db]
|
||||
dbserver ansible_host=10.1.1.21
|
||||
```
|
||||
|
||||
- `[all:children]` defines a group(all) of groups
|
||||
- `[all:vars]` defines variables that belong to the group all
|
||||
- `[webs]` defines a group just like [dbs]
|
||||
- The rest of the file is just declarations of hosts, with their names and IPs
|
||||
- A blank line means end of a declaration
|
||||
|
||||
Now that we have an inventory we can start using ansible from the command line, specifying a host or a group to perform commands. Here is a typical example of a command to check connectivity to your servers:
|
||||
|
||||
```
|
||||
$ ansible -i inventory all -m ping
|
||||
```
|
||||
|
||||
- `-i` specifies the inventory file
|
||||
- `all` specifies the server or group of servers to operate
|
||||
- `-m` specifies an ansible module, in this case ping
|
||||
|
||||
Here is the output of this command:
|
||||
|
||||
```
|
||||
dbserver | SUCCESS => {
|
||||
"changed": false,
|
||||
"ping": "pong"
|
||||
}
|
||||
web1 | SUCCESS => {
|
||||
"changed": false,
|
||||
"ping": "pong"
|
||||
}
|
||||
web2 | SUCCESS => {
|
||||
"changed": false,
|
||||
"ping": "pong"
|
||||
}
|
||||
```
|
||||
|
||||
Note that servers respond with a different order. This only depends on who responds first, but is not relevant, because ansible keeps the status of each server separate.
|
||||
|
||||
You can also run any command using another switch:
|
||||
|
||||
- `-a <command>`
|
||||
|
||||
```
|
||||
$ ansible -i inventory all -a uptime
|
||||
web1 | SUCCESS | rc=0 >>
|
||||
21:43:27 up 25 min, 1 user, load average: 0.00, 0.01, 0.05
|
||||
|
||||
dbserver | SUCCESS | rc=0 >>
|
||||
21:43:27 up 24 min, 1 user, load average: 0.00, 0.01, 0.05
|
||||
|
||||
web2 | SUCCESS | rc=0 >>
|
||||
21:43:27 up 25 min, 1 user, load average: 0.00, 0.01, 0.05
|
||||
```
|
||||
|
||||
Here is another example with only one server:
|
||||
|
||||
```
|
||||
$ ansible -i inventory dbserver -a "df -h /"
|
||||
dbserver | SUCCESS | rc=0 >>
|
||||
Filesystem Size Used Avail Use% Mounted on
|
||||
/dev/sda1 40G 1.4G 37G 4% /
|
||||
```
|
||||
|
||||
### Playbooks
|
||||
|
||||
Playbooks are just YAML files that associate groups of servers in an inventory with commands. The correct word in ansible is tasks, and it can be a desired state, a shell command, or many other options. For a list of all the things you can do with ansible take a look at the list of all modules.
|
||||
|
||||
Here is an example of a playbook for running a shell command, save this as playbook1.yml:
|
||||
|
||||
```
|
||||
---
|
||||
- hosts: all
|
||||
tasks:
|
||||
- shell: uptime
|
||||
```
|
||||
|
||||
- `---` is the start of the YAML file
|
||||
- `- hosts`: specifies what group is going to be used
|
||||
- `tasks`: marks the start of a list of tasks
|
||||
- `- shell`: specifies the first task using the shell module
|
||||
- REMEMBER: YAML requires indentation so make sure you are always following the correct structure in your playbooks
|
||||
|
||||
Run it with:
|
||||
|
||||
```
|
||||
$ ansible-playbook -i inventory playbook1.yml
|
||||
|
||||
PLAY [all] *********************************************************************
|
||||
|
||||
TASK [setup] *******************************************************************
|
||||
ok: [web1]
|
||||
ok: [web2]
|
||||
ok: [dbmaster]
|
||||
|
||||
TASK [command] *****************************************************************
|
||||
changed: [web1]
|
||||
changed: [web2]
|
||||
changed: [dbmaster]
|
||||
|
||||
PLAY RECAP *********************************************************************
|
||||
dbmaster : ok=2 changed=1 unreachable=0 failed=0
|
||||
web1 : ok=2 changed=1 unreachable=0 failed=0
|
||||
web2 : ok=2 changed=1 unreachable=0 failed=0
|
||||
```
|
||||
|
||||
As you can see ansible ran 2 tasks, instead of just one we have in our playbook. The TASK [setup] is an implicit task that runs first to capture information of the servers like hostnames, IPs, distributions, and many more details, that information can then be used to run conditional tasks.
|
||||
|
||||
There is also a final PLAY RECAP where ansible shows how many tasks ran and the corresponding state for each. In our case, since we ran a shell command, ansible doesn’t know the resulting state and it’s then considered as changed.
|
||||
|
||||
|
||||
### Installing Software
|
||||
|
||||
We are going to use apt to install software on our servers, for this we need to be root, so we have to use the become statement, save this content in playbook2.yml and run it(ansible-playbook playbook2.yml):
|
||||
|
||||
```
|
||||
---
|
||||
- hosts: webs
|
||||
become_user: root
|
||||
become: true
|
||||
tasks:
|
||||
- apt: name=git state=present
|
||||
```
|
||||
|
||||
There are statements you can apply to all modules in ansible; one is the name statement that let’s you print a more descriptive text about the task being executed. In order to use it you keep your task the same but add name: descriptive text as the first line, so our previous text will be:
|
||||
|
||||
```
|
||||
---
|
||||
- hosts: webs
|
||||
become_user: root
|
||||
become: true
|
||||
tasks:
|
||||
- name: This task will make sure git is present on the system
|
||||
apt: name=git state=present
|
||||
```
|
||||
|
||||
### Using `with_items`
|
||||
|
||||
When you are dealing with a list of items, packages to install, files to create, etc. ansible provides with_items. Here is how we use it in our playbook3.yml, adding at the same time some other statements we already know:
|
||||
|
||||
```
|
||||
---
|
||||
- hosts: all
|
||||
become_user: root
|
||||
become: true
|
||||
tasks:
|
||||
- name: Installing dependencies
|
||||
apt: name={{item}} state=present
|
||||
with_items:
|
||||
- git
|
||||
- mysql-client
|
||||
- libmysqlclient-dev
|
||||
- build-essential
|
||||
- python-software-properties
|
||||
```
|
||||
|
||||
### Using `template` and `vars`
|
||||
|
||||
`vars` is one statement that defines variables you can use either in `task` statements or inside `template` files. Jinja2 is the templating engine used in Ansible, but you don’t need to learn a lot about it to use it. Define variables in your playbook like this:
|
||||
|
||||
```
|
||||
---
|
||||
- hosts: all
|
||||
vars:
|
||||
- secret_key: VqnzCLdCV9a3jK
|
||||
- path_to_vault: /opt/very/deep/path
|
||||
tasks:
|
||||
- name: Setting a configuration file using template
|
||||
template: src=myconfig.j2 dest={{path_to_vault}}/app.conf
|
||||
```
|
||||
|
||||
As you can see I can use {{path_to_vault}} as part of the playbook, but also since I am using a template statement, I can use any variable inside the myconfig.j2 file, which has to be stored in a subfolder called templates. Your project tree should look like:
|
||||
|
||||
```
|
||||
├── Vagrantfile
|
||||
├── inventory
|
||||
├── playbook1.yml
|
||||
├── playbook2.yml
|
||||
└── templates
|
||||
└── myconfig.j2
|
||||
```
|
||||
|
||||
When ansible finds a template statement it will look into the templates folder and expand the variables surrounded by{{ and }}.
|
||||
|
||||
Example template:
|
||||
|
||||
```
|
||||
this is just an example vault_dir: {{path_to_vault}} secret_password: {{secret_key}}
|
||||
```
|
||||
|
||||
You can also use `template` even if you are not expanding variables. I do this in advance considering I may add them later. For example, let’s create a `hosts.j2` template and add the hostnames and IPs:
|
||||
|
||||
```
|
||||
10.1.1.11 web1
|
||||
10.1.1.12 web2
|
||||
10.1.1.21 dbserver
|
||||
```
|
||||
|
||||
This will require a statement like this:
|
||||
|
||||
```
|
||||
- name: Installing the hosts file in all servers
|
||||
template: src=hosts.j2 dest=/etc/hosts mode=644
|
||||
```
|
||||
|
||||
### Shell commands
|
||||
|
||||
You should always try to use modules because Ansible can track the state of the task and avoid repeating it unnecessarily, but there are times when a shell command is unavoidable. For those cases Ansible offers two options:
|
||||
|
||||
- command: Literally just running a command without environment variables or redirections (|, <, >, etc.)
|
||||
- shell: Runs /bin/sh and expands variables and redirections
|
||||
|
||||
#### Other useful modules
|
||||
|
||||
- apt_repository – Add/Remove package repositories in Debian family
|
||||
- yum_repository – Add/Remove package repositories in RedHat family
|
||||
- service – Start/Stop/Restart/Enable/Disable services
|
||||
- git – Deploy code from a git server
|
||||
- unarchive – Unarchive packages from the web or local sources
|
||||
|
||||
#### Running a task only in one server
|
||||
|
||||
Rails uses `migrations` to make gradual changes to your DB, but since you have more than one app server, these migrations can not be assigned as a group task, instead we need only one server to run the migrations. In cases like this is when run_once is used, run_once will delegate the task to one server and continue with the next task until this task is done. You only need to set run_once: true in your task.
|
||||
|
||||
```
|
||||
- name: 'Run db:migrate'
|
||||
shell: cd {{appdir}};rails db:migrate
|
||||
run_once: true
|
||||
```
|
||||
|
||||
##### Tasks that can fail
|
||||
|
||||
By specifying ignore_errors: true you can run a task that may fail but doesn’t affect the completion of the rest of your playbook. This is useful, for example, when deleting a log file that initially will not exist.
|
||||
|
||||
```
|
||||
- name: 'Delete logs'
|
||||
shell: rm -f /var/log/nginx/errors.log
|
||||
ignore_errors: true
|
||||
```
|
||||
|
||||
##### Putting it all together
|
||||
|
||||
Now using what we previously learned, here is the final version of each file:
|
||||
|
||||
Vagrantfile:
|
||||
|
||||
```
|
||||
VMs = [
|
||||
[ "web1", "10.1.1.11"],
|
||||
[ "web2", "10.1.1.12"],
|
||||
[ "dbserver", "10.1.1.21"],
|
||||
]
|
||||
|
||||
Vagrant.configure(2) do |config|
|
||||
VMs.each { |vm|
|
||||
config.vm.define vm[0] do |box|
|
||||
box.vm.box = "ubuntu/trusty64"
|
||||
box.vm.network "private_network", ip: vm[1]
|
||||
box.vm.hostname = vm[0]
|
||||
box.vm.provider "virtualbox" do |vb|
|
||||
vb.memory = "512"
|
||||
end
|
||||
end
|
||||
}
|
||||
end
|
||||
```
|
||||
|
||||
inventory:
|
||||
|
||||
```
|
||||
[all:children]
|
||||
webs
|
||||
db
|
||||
|
||||
[all:vars]
|
||||
ansible_user=vagrant
|
||||
ansible_ssh_pass=vagrant
|
||||
|
||||
[webs]
|
||||
web1 ansible_host=10.1.1.11
|
||||
web2 ansible_host=10.1.1.12
|
||||
|
||||
[db]
|
||||
dbserver ansible_host=10.1.1.21
|
||||
```
|
||||
|
||||
templates/hosts.j2:
|
||||
|
||||
```
|
||||
10.1.1.11 web1
|
||||
10.1.1.12 web2
|
||||
10.1.1.21 dbserver
|
||||
```
|
||||
|
||||
templates/my.cnf.j2:
|
||||
|
||||
```
|
||||
[client]
|
||||
port = 3306
|
||||
socket = /var/run/mysqld/mysqld.sock
|
||||
|
||||
[mysqld_safe]
|
||||
socket = /var/run/mysqld/mysqld.sock
|
||||
nice = 0
|
||||
|
||||
[mysqld]
|
||||
server-id = 1
|
||||
user = mysql
|
||||
pid-file = /var/run/mysqld/mysqld.pid
|
||||
socket = /var/run/mysqld/mysqld.sock
|
||||
port = 3306
|
||||
basedir = /usr
|
||||
datadir = /var/lib/mysql
|
||||
tmpdir = /tmp
|
||||
lc-messages-dir = /usr/share/mysql
|
||||
skip-external-locking
|
||||
bind-address = 0.0.0.0
|
||||
key_buffer = 16M
|
||||
max_allowed_packet = 16M
|
||||
thread_stack = 192K
|
||||
thread_cache_size = 8
|
||||
myisam-recover = BACKUP
|
||||
query_cache_limit = 1M
|
||||
query_cache_size = 16M
|
||||
log_error = /var/log/mysql/error.log
|
||||
expire_logs_days = 10
|
||||
max_binlog_size = 100M
|
||||
|
||||
[mysqldump]
|
||||
quick
|
||||
quote-names
|
||||
max_allowed_packet = 16M
|
||||
|
||||
[mysql]
|
||||
|
||||
[isamchk]
|
||||
key_buffer = 16M
|
||||
|
||||
!includedir /etc/mysql/conf.d/
|
||||
|
||||
final-playbook.yml:
|
||||
|
||||
- hosts: all
|
||||
become_user: root
|
||||
become: true
|
||||
tasks:
|
||||
- name: 'Install common software on all servers'
|
||||
apt: name={{item}} state=present
|
||||
with_items:
|
||||
- git
|
||||
- mysql-client
|
||||
- libmysqlclient-dev
|
||||
- build-essential
|
||||
- python-software-properties
|
||||
- name: 'Install hosts file'
|
||||
template: src=hosts.j2 dest=/etc/hosts mode=644
|
||||
|
||||
- hosts: db
|
||||
become_user: root
|
||||
become: true
|
||||
tasks:
|
||||
- name: 'Software for DB server'
|
||||
apt: name={{item}} state=present
|
||||
with_items:
|
||||
- mysql-server
|
||||
- percona-xtrabackup
|
||||
- mytop
|
||||
- mysql-utilities
|
||||
- name: 'MySQL config file'
|
||||
template: src=my.cnf.j2 dest=/etc/mysql/my.cnf
|
||||
- name: 'Restart MySQL'
|
||||
service: name=mysql state=restarted
|
||||
- name: 'Grant access to web app servers'
|
||||
shell: echo 'GRANT ALL PRIVILEGES ON *.* TO "root"@"%" WITH GRANT OPTION;FLUSH PRIVILEGES;'|mysql -u root mysql
|
||||
|
||||
- hosts: webs
|
||||
vars:
|
||||
- appdir: /opt/dummyapp
|
||||
become_user: root
|
||||
become: true
|
||||
tasks:
|
||||
- name: 'Add ruby-ng repo'
|
||||
apt_repository: repo='ppa:brightbox/ruby-ng'
|
||||
- name: 'Install rails software'
|
||||
apt: name={{item}} state=present
|
||||
with_items:
|
||||
- ruby-dev
|
||||
- ruby-all-dev
|
||||
- ruby2.2
|
||||
- ruby2.2-dev
|
||||
- ruby-switch
|
||||
- libcurl4-openssl-dev
|
||||
- libssl-dev
|
||||
- zlib1g-dev
|
||||
- nodejs
|
||||
- name: 'Set ruby to 2.2'
|
||||
shell: ruby-switch --set ruby2.2
|
||||
- name: 'Install gems'
|
||||
shell: gem install bundler rails
|
||||
- name: 'Kill puma if running'
|
||||
shell: file /run/puma.pid >/dev/null && kill `cat /run/puma.pid` 2>/dev/null
|
||||
ignore_errors: True
|
||||
- name: 'Clone app repo'
|
||||
git:
|
||||
repo=https://github.com/c0d5x/rails_dummyapp.git
|
||||
dest={{appdir}}
|
||||
version=staging
|
||||
force=yes
|
||||
- name: 'Run bundler'
|
||||
shell: cd {{appdir}};bundler
|
||||
- name: 'Run db:setup'
|
||||
shell: cd {{appdir}};rails db:setup
|
||||
run_once: true
|
||||
- name: 'Run db:migrate'
|
||||
shell: cd {{appdir}};rails db:migrate
|
||||
run_once: true
|
||||
- name: 'Run rails server'
|
||||
shell: cd {{appdir}};rails server -b 0.0.0.0 -p 80 --pid /run/puma.pid -d
|
||||
```
|
||||
|
||||
### Turn up your environment
|
||||
|
||||
Having these files in the same directory, turn up your dev environment by running:
|
||||
|
||||
```
|
||||
vagrant up
|
||||
ansible-playbook -i inventory final-playbook.yml
|
||||
```
|
||||
|
||||
#### Deployment of new code
|
||||
|
||||
Make changes to your code and push those changes to your repo. Then, simply make sure you have the correct branch in your git statement:
|
||||
|
||||
```
|
||||
- name: 'Clone app repo'
|
||||
git:
|
||||
repo=https://github.com/c0d5x/rails_dummyapp.git
|
||||
dest={{appdir}}
|
||||
version=staging
|
||||
force=yes
|
||||
```
|
||||
|
||||
As an example, you can change the version field with master, run the playbook again:
|
||||
|
||||
```
|
||||
ansible-playbook -i inventory final-playbook.yml
|
||||
```
|
||||
|
||||
Check that the page has changed on any of the web servers: `http://10.1.1.11` or `http://10.1.1.12`. Change it back to `version=staging` and rerun the playbook and check the page again.
|
||||
|
||||
You can also create an alternative playbook that has only the tasks related to the deployment so that it runs faster.
|
||||
|
||||
### What is next !?
|
||||
|
||||
This is a very small portion of what ansible can do. We didn’t touch roles, filters, debugor many other awesome features that it offers, but hopefully it gives you a good start! So, go ahead and start using it and learn as you go. If you have any questions you can reach me on twitter or comment below and let me know what else you’d like to find out about ansible!
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://gorillalogic.com/blog/getting-started-with-ansible/?utm_source=webopsweekly&utm_medium=email
|
||||
|
||||
作者:[JOSE HIDALGO][a]
|
||||
|
||||
译者:[译者ID](https://github.com/译者ID)
|
||||
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://gorillalogic.com/author/josehidalgo/
|
@ -1,3 +1,5 @@
|
||||
OneNewLife translating.
|
||||
|
||||
7 Mistakes New Linux Users Make
|
||||
===================
|
||||
|
||||
|
@ -73,18 +73,18 @@ via: https://freedompenguin.com/articles/opinion/open-source-design-thing/
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://freedompenguin.com/author/seanleroy/
|
||||
[1]:[https://www.youtube.com/channel/UCOfXyFkINXf_e9XNosTJZDw]
|
||||
[2]:[https://www.youtube.com/user/desainew]
|
||||
[3]:[https://www.youtube.com/channel/UCEQXp_fcqwPcqrzNtWJ1w9w]
|
||||
[4]:[http://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Ffreedompenguin.com%2Farticles%2Fopinion%2Fopen-source-design-thing%2F]
|
||||
[5]:[http://twitter.com/intent/tweet/?text=Is+Open+Source+Design+a+Thing%3F&url=https%3A%2F%2Ffreedompenguin.com%2Farticles%2Fopinion%2Fopen-source-design-thing%2F]
|
||||
[6]:[https://plus.google.com/share?url=https%3A%2F%2Ffreedompenguin.com%2Farticles%2Fopinion%2Fopen-source-design-thing%2F]
|
||||
[7]:[https://atom.io/]
|
||||
[8]:[http://froont.com/]
|
||||
[9]:[https://webflow.com/]
|
||||
[10]:[https://gravit.io/]
|
||||
[11]:[http://getbootstrap.com/]
|
||||
[12]:[https://inkscape.org/en/]
|
||||
[13]:[https://www.gimp.org/]
|
||||
[14]:[https://en.wikipedia.org/wiki/Free_and_open-source_software]
|
||||
[15]:[https://medium.com/dawn-capital/why-leverage-the-power-of-open-source-to-build-a-successful-software-business-8aba6f665bc4#.ggmn2ojxp]
|
||||
[1]:https://www.youtube.com/channel/UCOfXyFkINXf_e9XNosTJZDw
|
||||
[2]:https://www.youtube.com/user/desainew
|
||||
[3]:https://www.youtube.com/channel/UCEQXp_fcqwPcqrzNtWJ1w9w
|
||||
[4]:http://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Ffreedompenguin.com%2Farticles%2Fopinion%2Fopen-source-design-thing%2F
|
||||
[5]:http://twitter.com/intent/tweet/?text=Is+Open+Source+Design+a+Thing%3F&url=https%3A%2F%2Ffreedompenguin.com%2Farticles%2Fopinion%2Fopen-source-design-thing%2F
|
||||
[6]:https://plus.google.com/share?url=https%3A%2F%2Ffreedompenguin.com%2Farticles%2Fopinion%2Fopen-source-design-thing%2F
|
||||
[7]:https://atom.io/
|
||||
[8]:http://froont.com/
|
||||
[9]:https://webflow.com/
|
||||
[10]:https://gravit.io/
|
||||
[11]:http://getbootstrap.com/
|
||||
[12]:https://inkscape.org/en/
|
||||
[13]:https://www.gimp.org/
|
||||
[14]:https://en.wikipedia.org/wiki/Free_and_open-source_software
|
||||
[15]:https://medium.com/dawn-capital/why-leverage-the-power-of-open-source-to-build-a-successful-software-business-8aba6f665bc4#.ggmn2ojxp
|
||||
|
@ -72,84 +72,84 @@ via: https://www.linux.com/learn/wattos-rock-solid-lightning-fast-lightweight-li
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.linux.com/users/jlwallen
|
||||
[1]:[https://www.youtube.com/channel/UCOfXyFkINXf_e9XNosTJZDw]
|
||||
[2]:[https://www.youtube.com/user/desainew]
|
||||
[3]:[https://www.youtube.com/channel/UCEQXp_fcqwPcqrzNtWJ1w9w]
|
||||
[4]:[http://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Ffreedompenguin.com%2Farticles%2Fopinion%2Fopen-source-design-thing%2F]
|
||||
[5]:[http://twitter.com/intent/tweet/?text=Is+Open+Source+Design+a+Thing%3F&url=https%3A%2F%2Ffreedompenguin.com%2Farticles%2Fopinion%2Fopen-source-design-thing%2F]
|
||||
[6]:[https://plus.google.com/share?url=https%3A%2F%2Ffreedompenguin.com%2Farticles%2Fopinion%2Fopen-source-design-thing%2F]
|
||||
[7]:[https://atom.io/]
|
||||
[8]:[http://froont.com/]
|
||||
[9]:[https://webflow.com/]
|
||||
[10]:[https://gravit.io/]
|
||||
[11]:[http://getbootstrap.com/]
|
||||
[12]:[https://inkscape.org/en/]
|
||||
[13]:[https://www.gimp.org/]
|
||||
[14]:[https://en.wikipedia.org/wiki/Free_and_open-source_software]
|
||||
[15]:[https://medium.com/dawn-capital/why-leverage-the-power-of-open-source-to-build-a-successful-software-business-8aba6f665bc4#.ggmn2ojxp]
|
||||
[16]:[https://github.com/majutsushi/tagbar]
|
||||
[17]:[http://ctags.sourceforge.net/]
|
||||
[18]:[https://github.com/majutsushi/tagbar/zipball/70fix]
|
||||
[19]:[https://raw.githubusercontent.com/tpope/vim-pathogen/master/autoload/pathogen.vim]
|
||||
[20]:[http://www.vim.org/scripts/script.php?script_id=2332]
|
||||
[21]:[https://www.howtoforge.com/tutorial/vim-editor-plugins-for-software-developers-2-syntastic/]
|
||||
[22]:[https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-delimitmate-help.png]
|
||||
[23]:[https://github.com/Raimondi/delimitMate]
|
||||
[24]:[https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-tagbar-visibility.png]
|
||||
[25]:[https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-tagbar-ex2.png]
|
||||
[26]:[https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-tagbar-example.png]
|
||||
[27]:[http://www.tldp.org/LDP/intro-linux/html/sect_06_02.html]
|
||||
[28]:[http://majutsushi.github.io/tagbar/]
|
||||
[29]:[http://vi.stackexchange.com/questions/388/what-is-the-difference-between-the-vim-plugin-managers]
|
||||
[30]:[https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-vimrc.png]
|
||||
[31]:[http://www.vim.org/]
|
||||
[32]:[https://github.com/scrooloose/syntastic]
|
||||
[33]:[https://github.com/scrooloose/syntastic/blob/master/doc/syntastic.txt]
|
||||
[34]:[https://www.howtoforge.com/images/3337/big/syntastic-error-all-descr.png]
|
||||
[35]:[https://www.howtoforge.com/images/3337/big/syntastic-error-descr.png]
|
||||
[36]:[https://www.howtoforge.com/images/3337/big/syntastic-error-highlight.png]
|
||||
[37]:[https://github.com/scrooloose/syntastic]
|
||||
[38]:[http://www.vim.org/]
|
||||
[39]:[https://www.howtoforge.com/tutorial/vim-editor-plugins-for-software-developers/]
|
||||
[40]:[https://en.wikipedia.org/wiki/Trim_%28computing%29]
|
||||
[41]:[https://en.wikipedia.org/wiki/Sudo]
|
||||
[42]:[http://snapcraft.io/]
|
||||
[43]:[http://flatpak.org/]
|
||||
[44]:[https://en.wikipedia.org/wiki/Wine_%28software%29]
|
||||
[45]:[https://en.wikipedia.org/wiki/Live_CD]
|
||||
[46]:[http://distrowatch.com/]
|
||||
[47]:[http://www.internetnews.com/skerner/2009/10/white-house-goes-open-source-w.html]
|
||||
[48]:[https://www.whitehouse.gov/blog/2016/10/13/removing-barriers-constituent-conversations]
|
||||
[49]:[http://planetwatt.com/new/index.php/2016/09/23/microwatt-r10-released/]
|
||||
[50]:[http://midori-browser.org/]
|
||||
[51]:[http://surf.suckless.org/]
|
||||
[52]:[https://www.keepassx.org/]
|
||||
[53]:[http://lxde.org/]
|
||||
[54]:[https://www.linux.com/licenses/category/used-permission]
|
||||
[55]:[https://www.linux.com/files/images/wattosapng]
|
||||
[56]:[https://elementary.io/]
|
||||
[57]:[https://www.libreoffice.org/]
|
||||
[58]:[https://system76.com/desktops/leopard]
|
||||
[59]:[https://www.linux.com/licenses/category/used-permission]
|
||||
[60]:[http://planetwatt.com/new/index.php/2016/09/23/microwatt-r10-released/]
|
||||
[61]:[http://midori-browser.org/]
|
||||
[62]:[http://surf.suckless.org/]
|
||||
[63]:[https://www.keepassx.org/]
|
||||
[64]:[http://lxde.org/]
|
||||
[65]:[https://www.linux.com/licenses/category/used-permission]
|
||||
[66]:[https://www.linux.com/files/images/wattosapng]
|
||||
[67]:[https://elementary.io/]
|
||||
[68]:[https://www.libreoffice.org/]
|
||||
[69]:[https://system76.com/desktops/leopard]
|
||||
[70]:[https://www.linux.com/licenses/category/used-permission]
|
||||
[71]:[http://planetwatt.com/new/index.php/2016/09/23/microwatt-r10-released/]
|
||||
[72]:[http://midori-browser.org/]
|
||||
[73]:[http://surf.suckless.org/]
|
||||
[74]:[https://www.keepassx.org/]
|
||||
[75]:[http://lxde.org/]
|
||||
[76]:[https://www.linux.com/licenses/category/used-permission]
|
||||
[77]:[https://www.linux.com/files/images/wattosapng]
|
||||
[78]:[https://elementary.io/]
|
||||
[79]:[https://www.libreoffice.org/]
|
||||
[80]:[https://system76.com/desktops/leopard]
|
||||
[81]:[https://www.linux.com/licenses/category/used-permission]
|
||||
[1]:https://www.youtube.com/channel/UCOfXyFkINXf_e9XNosTJZDw
|
||||
[2]:https://www.youtube.com/user/desainew
|
||||
[3]:https://www.youtube.com/channel/UCEQXp_fcqwPcqrzNtWJ1w9w
|
||||
[4]:http://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Ffreedompenguin.com%2Farticles%2Fopinion%2Fopen-source-design-thing%2F
|
||||
[5]:http://twitter.com/intent/tweet/?text=Is+Open+Source+Design+a+Thing%3F&url=https%3A%2F%2Ffreedompenguin.com%2Farticles%2Fopinion%2Fopen-source-design-thing%2F
|
||||
[6]:https://plus.google.com/share?url=https%3A%2F%2Ffreedompenguin.com%2Farticles%2Fopinion%2Fopen-source-design-thing%2F
|
||||
[7]:https://atom.io/
|
||||
[8]:http://froont.com/
|
||||
[9]:https://webflow.com/
|
||||
[10]:https://gravit.io/
|
||||
[11]:http://getbootstrap.com/
|
||||
[12]:https://inkscape.org/en/
|
||||
[13]:https://www.gimp.org/
|
||||
[14]:https://en.wikipedia.org/wiki/Free_and_open-source_software
|
||||
[15]:https://medium.com/dawn-capital/why-leverage-the-power-of-open-source-to-build-a-successful-software-business-8aba6f665bc4#.ggmn2ojxp
|
||||
[16]:https://github.com/majutsushi/tagbar
|
||||
[17]:http://ctags.sourceforge.net/
|
||||
[18]:https://github.com/majutsushi/tagbar/zipball/70fix
|
||||
[19]:https://raw.githubusercontent.com/tpope/vim-pathogen/master/autoload/pathogen.vim
|
||||
[20]:http://www.vim.org/scripts/script.php?script_id=2332
|
||||
[21]:https://www.howtoforge.com/tutorial/vim-editor-plugins-for-software-developers-2-syntastic/
|
||||
[22]:https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-delimitmate-help.png
|
||||
[23]:https://github.com/Raimondi/delimitMate
|
||||
[24]:https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-tagbar-visibility.png
|
||||
[25]:https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-tagbar-ex2.png
|
||||
[26]:https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-tagbar-example.png
|
||||
[27]:http://www.tldp.org/LDP/intro-linux/html/sect_06_02.html
|
||||
[28]:http://majutsushi.github.io/tagbar/
|
||||
[29]:http://vi.stackexchange.com/questions/388/what-is-the-difference-between-the-vim-plugin-managers
|
||||
[30]:https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-vimrc.png
|
||||
[31]:http://www.vim.org/
|
||||
[32]:https://github.com/scrooloose/syntastic
|
||||
[33]:https://github.com/scrooloose/syntastic/blob/master/doc/syntastic.txt
|
||||
[34]:https://www.howtoforge.com/images/3337/big/syntastic-error-all-descr.png
|
||||
[35]:https://www.howtoforge.com/images/3337/big/syntastic-error-descr.png
|
||||
[36]:https://www.howtoforge.com/images/3337/big/syntastic-error-highlight.png
|
||||
[37]:https://github.com/scrooloose/syntastic
|
||||
[38]:http://www.vim.org/
|
||||
[39]:https://www.howtoforge.com/tutorial/vim-editor-plugins-for-software-developers/
|
||||
[40]:https://en.wikipedia.org/wiki/Trim_%28computing%29
|
||||
[41]:https://en.wikipedia.org/wiki/Sudo
|
||||
[42]:http://snapcraft.io/
|
||||
[43]:http://flatpak.org/
|
||||
[44]:https://en.wikipedia.org/wiki/Wine_%28software%29
|
||||
[45]:https://en.wikipedia.org/wiki/Live_CD
|
||||
[46]:http://distrowatch.com/
|
||||
[47]:http://www.internetnews.com/skerner/2009/10/white-house-goes-open-source-w.html
|
||||
[48]:https://www.whitehouse.gov/blog/2016/10/13/removing-barriers-constituent-conversations
|
||||
[49]:http://planetwatt.com/new/index.php/2016/09/23/microwatt-r10-released/
|
||||
[50]:http://midori-browser.org/
|
||||
[51]:http://surf.suckless.org/
|
||||
[52]:https://www.keepassx.org/
|
||||
[53]:http://lxde.org/
|
||||
[54]:https://www.linux.com/licenses/category/used-permission
|
||||
[55]:https://www.linux.com/files/images/wattosapng
|
||||
[56]:https://elementary.io/
|
||||
[57]:https://www.libreoffice.org/
|
||||
[58]:https://system76.com/desktops/leopard
|
||||
[59]:https://www.linux.com/licenses/category/used-permission
|
||||
[60]:http://planetwatt.com/new/index.php/2016/09/23/microwatt-r10-released/
|
||||
[61]:http://midori-browser.org/
|
||||
[62]:http://surf.suckless.org/
|
||||
[63]:https://www.keepassx.org/
|
||||
[64]:http://lxde.org/
|
||||
[65]:https://www.linux.com/licenses/category/used-permission
|
||||
[66]:https://www.linux.com/files/images/wattosapng
|
||||
[67]:https://elementary.io/
|
||||
[68]:https://www.libreoffice.org/
|
||||
[69]:https://system76.com/desktops/leopard
|
||||
[70]:https://www.linux.com/licenses/category/used-permission
|
||||
[71]:http://planetwatt.com/new/index.php/2016/09/23/microwatt-r10-released/
|
||||
[72]:http://midori-browser.org/
|
||||
[73]:http://surf.suckless.org/
|
||||
[74]:https://www.keepassx.org/
|
||||
[75]:http://lxde.org/
|
||||
[76]:https://www.linux.com/licenses/category/used-permission
|
||||
[77]:https://www.linux.com/files/images/wattosapng
|
||||
[78]:https://elementary.io/
|
||||
[79]:https://www.libreoffice.org/
|
||||
[80]:https://system76.com/desktops/leopard
|
||||
[81]:https://www.linux.com/licenses/category/used-permission]
|
||||
|
@ -119,34 +119,34 @@ via: https://www.howtoforge.com/tutorial/vim-editor-plugins-for-software-develop
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.howtoforge.com/tutorial/vim-editor-plugins-for-software-developers/
|
||||
[1]:[https://www.youtube.com/channel/UCOfXyFkINXf_e9XNosTJZDw]
|
||||
[2]:[https://www.youtube.com/user/desainew]
|
||||
[3]:[https://www.youtube.com/channel/UCEQXp_fcqwPcqrzNtWJ1w9w]
|
||||
[4]:[http://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Ffreedompenguin.com%2Farticles%2Fopinion%2Fopen-source-design-thing%2F]
|
||||
[5]:[http://twitter.com/intent/tweet/?text=Is+Open+Source+Design+a+Thing%3F&url=https%3A%2F%2Ffreedompenguin.com%2Farticles%2Fopinion%2Fopen-source-design-thing%2F]
|
||||
[6]:[https://plus.google.com/share?url=https%3A%2F%2Ffreedompenguin.com%2Farticles%2Fopinion%2Fopen-source-design-thing%2F]
|
||||
[7]:[https://atom.io/]
|
||||
[8]:[http://froont.com/]
|
||||
[9]:[https://webflow.com/]
|
||||
[10]:[https://gravit.io/]
|
||||
[11]:[http://getbootstrap.com/]
|
||||
[12]:[https://inkscape.org/en/]
|
||||
[13]:[https://www.gimp.org/]
|
||||
[14]:[https://en.wikipedia.org/wiki/Free_and_open-source_software]
|
||||
[15]:[https://medium.com/dawn-capital/why-leverage-the-power-of-open-source-to-build-a-successful-software-business-8aba6f665bc4#.ggmn2ojxp]
|
||||
[16]:[https://github.com/majutsushi/tagbar]
|
||||
[17]:[http://ctags.sourceforge.net/]
|
||||
[18]:[https://github.com/majutsushi/tagbar/zipball/70fix]
|
||||
[19]:[https://raw.githubusercontent.com/tpope/vim-pathogen/master/autoload/pathogen.vim]
|
||||
[20]:[http://www.vim.org/scripts/script.php?script_id=2332]
|
||||
[21]:[https://www.howtoforge.com/tutorial/vim-editor-plugins-for-software-developers-2-syntastic/]
|
||||
[22]:[https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-delimitmate-help.png]
|
||||
[23]:[https://github.com/Raimondi/delimitMate]
|
||||
[24]:[https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-tagbar-visibility.png]
|
||||
[25]:[https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-tagbar-ex2.png]
|
||||
[26]:[https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-tagbar-example.png]
|
||||
[27]:[http://www.tldp.org/LDP/intro-linux/html/sect_06_02.html]
|
||||
[28]:[http://majutsushi.github.io/tagbar/]
|
||||
[29]:[http://vi.stackexchange.com/questions/388/what-is-the-difference-between-the-vim-plugin-managers]
|
||||
[30]:[https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-vimrc.png]
|
||||
[31]:[http://www.vim.org/]
|
||||
[1]:https://www.youtube.com/channel/UCOfXyFkINXf_e9XNosTJZDw
|
||||
[2]:https://www.youtube.com/user/desainew
|
||||
[3]:https://www.youtube.com/channel/UCEQXp_fcqwPcqrzNtWJ1w9w
|
||||
[4]:http://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Ffreedompenguin.com%2Farticles%2Fopinion%2Fopen-source-design-thing%2F
|
||||
[5]:http://twitter.com/intent/tweet/?text=Is+Open+Source+Design+a+Thing%3F&url=https%3A%2F%2Ffreedompenguin.com%2Farticles%2Fopinion%2Fopen-source-design-thing%2F
|
||||
[6]:https://plus.google.com/share?url=https%3A%2F%2Ffreedompenguin.com%2Farticles%2Fopinion%2Fopen-source-design-thing%2F
|
||||
[7]:https://atom.io/
|
||||
[8]:http://froont.com/
|
||||
[9]:https://webflow.com/
|
||||
[10]:https://gravit.io/
|
||||
[11]:http://getbootstrap.com/
|
||||
[12]:https://inkscape.org/en/
|
||||
[13]:https://www.gimp.org/
|
||||
[14]:https://en.wikipedia.org/wiki/Free_and_open-source_software
|
||||
[15]:https://medium.com/dawn-capital/why-leverage-the-power-of-open-source-to-build-a-successful-software-business-8aba6f665bc4#.ggmn2ojxp
|
||||
[16]:https://github.com/majutsushi/tagbar
|
||||
[17]:http://ctags.sourceforge.net/
|
||||
[18]:https://github.com/majutsushi/tagbar/zipball/70fix
|
||||
[19]:https://raw.githubusercontent.com/tpope/vim-pathogen/master/autoload/pathogen.vim
|
||||
[20]:http://www.vim.org/scripts/script.php?script_id=2332
|
||||
[21]:https://www.howtoforge.com/tutorial/vim-editor-plugins-for-software-developers-2-syntastic/
|
||||
[22]:https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-delimitmate-help.png
|
||||
[23]:https://github.com/Raimondi/delimitMate
|
||||
[24]:https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-tagbar-visibility.png
|
||||
[25]:https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-tagbar-ex2.png
|
||||
[26]:https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-tagbar-example.png
|
||||
[27]:http://www.tldp.org/LDP/intro-linux/html/sect_06_02.html
|
||||
[28]:http://majutsushi.github.io/tagbar/
|
||||
[29]:http://vi.stackexchange.com/questions/388/what-is-the-difference-between-the-vim-plugin-managers
|
||||
[30]:https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-vimrc.png
|
||||
[31]:http://www.vim.org/
|
||||
|
@ -51,8 +51,6 @@ To make sure that Syntastic highlights the errors automatically when a file is o
|
||||
|
||||
```
|
||||
let g:syntastic_check_on_open = 1
|
||||
```
|
||||
```
|
||||
let g:syntastic_auto_jump = 1
|
||||
```
|
||||
|
||||
@ -83,42 +81,42 @@ via: https://www.howtoforge.com/tutorial/vim-editor-plugins-for-software-develop
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.howtoforge.com/tutorial/vim-editor-plugins-for-software-developers-2-syntastic/
|
||||
[1]:[https://www.youtube.com/channel/UCOfXyFkINXf_e9XNosTJZDw]
|
||||
[2]:[https://www.youtube.com/user/desainew]
|
||||
[3]:[https://www.youtube.com/channel/UCEQXp_fcqwPcqrzNtWJ1w9w]
|
||||
[4]:[http://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Ffreedompenguin.com%2Farticles%2Fopinion%2Fopen-source-design-thing%2F]
|
||||
[5]:[http://twitter.com/intent/tweet/?text=Is+Open+Source+Design+a+Thing%3F&url=https%3A%2F%2Ffreedompenguin.com%2Farticles%2Fopinion%2Fopen-source-design-thing%2F]
|
||||
[6]:[https://plus.google.com/share?url=https%3A%2F%2Ffreedompenguin.com%2Farticles%2Fopinion%2Fopen-source-design-thing%2F]
|
||||
[7]:[https://atom.io/]
|
||||
[8]:[http://froont.com/]
|
||||
[9]:[https://webflow.com/]
|
||||
[10]:[https://gravit.io/]
|
||||
[11]:[http://getbootstrap.com/]
|
||||
[12]:[https://inkscape.org/en/]
|
||||
[13]:[https://www.gimp.org/]
|
||||
[14]:[https://en.wikipedia.org/wiki/Free_and_open-source_software]
|
||||
[15]:[https://medium.com/dawn-capital/why-leverage-the-power-of-open-source-to-build-a-successful-software-business-8aba6f665bc4#.ggmn2ojxp]
|
||||
[16]:[https://github.com/majutsushi/tagbar]
|
||||
[17]:[http://ctags.sourceforge.net/]
|
||||
[18]:[https://github.com/majutsushi/tagbar/zipball/70fix]
|
||||
[19]:[https://raw.githubusercontent.com/tpope/vim-pathogen/master/autoload/pathogen.vim]
|
||||
[20]:[http://www.vim.org/scripts/script.php?script_id=2332]
|
||||
[21]:[https://www.howtoforge.com/tutorial/vim-editor-plugins-for-software-developers-2-syntastic/]
|
||||
[22]:[https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-delimitmate-help.png]
|
||||
[23]:[https://github.com/Raimondi/delimitMate]
|
||||
[24]:[https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-tagbar-visibility.png]
|
||||
[25]:[https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-tagbar-ex2.png]
|
||||
[26]:[https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-tagbar-example.png]
|
||||
[27]:[http://www.tldp.org/LDP/intro-linux/html/sect_06_02.html]
|
||||
[28]:[http://majutsushi.github.io/tagbar/]
|
||||
[29]:[http://vi.stackexchange.com/questions/388/what-is-the-difference-between-the-vim-plugin-managers]
|
||||
[30]:[https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-vimrc.png]
|
||||
[31]:[http://www.vim.org/]
|
||||
[32]:[https://github.com/scrooloose/syntastic]
|
||||
[33]:[https://github.com/scrooloose/syntastic/blob/master/doc/syntastic.txt]
|
||||
[34]:[https://www.howtoforge.com/images/3337/big/syntastic-error-all-descr.png]
|
||||
[35]:[https://www.howtoforge.com/images/3337/big/syntastic-error-descr.png]
|
||||
[36]:[https://www.howtoforge.com/images/3337/big/syntastic-error-highlight.png]
|
||||
[37]:[https://github.com/scrooloose/syntastic]
|
||||
[38]:[http://www.vim.org/]
|
||||
[39]:[https://www.howtoforge.com/tutorial/vim-editor-plugins-for-software-developers/]
|
||||
[1]:https://www.youtube.com/channel/UCOfXyFkINXf_e9XNosTJZDw
|
||||
[2]:https://www.youtube.com/user/desainew
|
||||
[3]:https://www.youtube.com/channel/UCEQXp_fcqwPcqrzNtWJ1w9w
|
||||
[4]:http://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Ffreedompenguin.com%2Farticles%2Fopinion%2Fopen-source-design-thing%2F
|
||||
[5]:http://twitter.com/intent/tweet/?text=Is+Open+Source+Design+a+Thing%3F&url=https%3A%2F%2Ffreedompenguin.com%2Farticles%2Fopinion%2Fopen-source-design-thing%2F
|
||||
[6]:https://plus.google.com/share?url=https%3A%2F%2Ffreedompenguin.com%2Farticles%2Fopinion%2Fopen-source-design-thing%2F
|
||||
[7]:https://atom.io/
|
||||
[8]:http://froont.com/
|
||||
[9]:https://webflow.com/
|
||||
[10]:https://gravit.io/
|
||||
[11]:http://getbootstrap.com/
|
||||
[12]:https://inkscape.org/en/
|
||||
[13]:https://www.gimp.org/
|
||||
[14]:https://en.wikipedia.org/wiki/Free_and_open-source_software
|
||||
[15]:https://medium.com/dawn-capital/why-leverage-the-power-of-open-source-to-build-a-successful-software-business-8aba6f665bc4#.ggmn2ojxp
|
||||
[16]:https://github.com/majutsushi/tagbar
|
||||
[17]:http://ctags.sourceforge.net/
|
||||
[18]:https://github.com/majutsushi/tagbar/zipball/70fix
|
||||
[19]:https://raw.githubusercontent.com/tpope/vim-pathogen/master/autoload/pathogen.vim
|
||||
[20]:http://www.vim.org/scripts/script.php?script_id=2332
|
||||
[21]:https://www.howtoforge.com/tutorial/vim-editor-plugins-for-software-developers-2-syntastic/
|
||||
[22]:https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-delimitmate-help.png
|
||||
[23]:https://github.com/Raimondi/delimitMate
|
||||
[24]:https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-tagbar-visibility.png
|
||||
[25]:https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-tagbar-ex2.png
|
||||
[26]:https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-tagbar-example.png
|
||||
[27]:http://www.tldp.org/LDP/intro-linux/html/sect_06_02.html
|
||||
[28]:http://majutsushi.github.io/tagbar/
|
||||
[29]:http://vi.stackexchange.com/questions/388/what-is-the-difference-between-the-vim-plugin-managers
|
||||
[30]:https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-vimrc.png
|
||||
[31]:http://www.vim.org/
|
||||
[32]:https://github.com/scrooloose/syntastic
|
||||
[33]:https://github.com/scrooloose/syntastic/blob/master/doc/syntastic.txt
|
||||
[34]:https://www.howtoforge.com/images/3337/big/syntastic-error-all-descr.png
|
||||
[35]:https://www.howtoforge.com/images/3337/big/syntastic-error-descr.png
|
||||
[36]:https://www.howtoforge.com/images/3337/big/syntastic-error-highlight.png
|
||||
[37]:https://github.com/scrooloose/syntastic
|
||||
[38]:http://www.vim.org/
|
||||
[39]:https://www.howtoforge.com/tutorial/vim-editor-plugins-for-software-developers/
|
76
sources/tech/20161017 White House Open-Sources Bot Code.md
Normal file
76
sources/tech/20161017 White House Open-Sources Bot Code.md
Normal file
@ -0,0 +1,76 @@
|
||||
White House Open-Sources Bot Code
|
||||
===================
|
||||
|
||||
|
||||
The race to build bots, that is automated chat technology that responds to user queries, has gone all the way to President Obama's home, The White House. The White House announced on October 14 that it is now open-sourcing its bot code in a bid to help enable more open collaboration and communication.
|
||||
|
||||
![WhiteHouse Drupal](http://www.internetnews.com/imagesvr_ce/9946/whitehouse-drupal.png)
|
||||
|
||||
"To be specific, we are open-sourcing a Drupal module, complete with easy steps and boiler plate code," Jason Goldman, Chief Digital Officer of the White House wrote in a blog [post][48]. "This will enable Drupal 8 developers to quickly launch a Facebook Messenger bot."
|
||||
|
||||
The White House first [deployed ][47]its own website with the open-source Drupal Content Management System (CMS) back in 2009\. The White House has since been an active contributor to Drupal in many different ways, including releasing code used on the site as open-source. Among the items that the White House has previously release is the entire Drupal theme, known as 'fourtyfour' that is used on the WhiteHouse.gov site.
|
||||
|
||||
The full code for the new White House Facebook Messenger bot is now available on GitHub, including complete installation instructions as well as the project roadmap. Among the large items on the roadmap (listed under 'Enhancements and hopes') is to actually make the project into more of a standalone, modular effort by refactoring code such that it's usable outside of a Drupal CMS as well.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.internetnews.com/blog/skerner/white-house-open-sources-bot-code.html
|
||||
|
||||
作者:[Michael Kerner][a]
|
||||
|
||||
译者:[译者ID](https://github.com/译者ID)
|
||||
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
|
||||
[a]: http://www.internetnews.com/blog/skerner/white-house-open-sources-bot-code.html
|
||||
[1]:https://www.youtube.com/channel/UCOfXyFkINXf_e9XNosTJZDw
|
||||
[2]:https://www.youtube.com/user/desainew
|
||||
[3]:https://www.youtube.com/channel/UCEQXp_fcqwPcqrzNtWJ1w9w
|
||||
[4]:http://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Ffreedompenguin.com%2Farticles%2Fopinion%2Fopen-source-design-thing%2F
|
||||
[5]:http://twitter.com/intent/tweet/?text=Is+Open+Source+Design+a+Thing%3F&url=https%3A%2F%2Ffreedompenguin.com%2Farticles%2Fopinion%2Fopen-source-design-thing%2F
|
||||
[6]:https://plus.google.com/share?url=https%3A%2F%2Ffreedompenguin.com%2Farticles%2Fopinion%2Fopen-source-design-thing%2F
|
||||
[7]:https://atom.io/
|
||||
[8]:http://froont.com/
|
||||
[9]:https://webflow.com/
|
||||
[10]:https://gravit.io/
|
||||
[11]:http://getbootstrap.com/
|
||||
[12]:https://inkscape.org/en/
|
||||
[13]:https://www.gimp.org/
|
||||
[14]:https://en.wikipedia.org/wiki/Free_and_open-source_software
|
||||
[15]:https://medium.com/dawn-capital/why-leverage-the-power-of-open-source-to-build-a-successful-software-business-8aba6f665bc4#.ggmn2ojxp
|
||||
[16]:https://github.com/majutsushi/tagbar
|
||||
[17]:http://ctags.sourceforge.net/
|
||||
[18]:https://github.com/majutsushi/tagbar/zipball/70fix
|
||||
[19]:https://raw.githubusercontent.com/tpope/vim-pathogen/master/autoload/pathogen.vim
|
||||
[20]:http://www.vim.org/scripts/script.php?script_id=2332
|
||||
[21]:https://www.howtoforge.com/tutorial/vim-editor-plugins-for-software-developers-2-syntastic/
|
||||
[22]:https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-delimitmate-help.png
|
||||
[23]:https://github.com/Raimondi/delimitMate
|
||||
[24]:https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-tagbar-visibility.png
|
||||
[25]:https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-tagbar-ex2.png
|
||||
[26]:https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-tagbar-example.png
|
||||
[27]:http://www.tldp.org/LDP/intro-linux/html/sect_06_02.html
|
||||
[28]:http://majutsushi.github.io/tagbar/
|
||||
[29]:http://vi.stackexchange.com/questions/388/what-is-the-difference-between-the-vim-plugin-managers
|
||||
[30]:https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-vimrc.png
|
||||
[31]:http://www.vim.org/
|
||||
[32]:https://github.com/scrooloose/syntastic
|
||||
[33]:https://github.com/scrooloose/syntastic/blob/master/doc/syntastic.txt
|
||||
[34]:https://www.howtoforge.com/images/3337/big/syntastic-error-all-descr.png
|
||||
[35]:https://www.howtoforge.com/images/3337/big/syntastic-error-descr.png
|
||||
[36]:https://www.howtoforge.com/images/3337/big/syntastic-error-highlight.png
|
||||
[37]:https://github.com/scrooloose/syntastic
|
||||
[38]:http://www.vim.org/
|
||||
[39]:https://www.howtoforge.com/tutorial/vim-editor-plugins-for-software-developers/
|
||||
[40]:https://en.wikipedia.org/wiki/Trim_%28computing%29
|
||||
[41]:https://en.wikipedia.org/wiki/Sudo
|
||||
[42]:http://snapcraft.io/
|
||||
[43]:http://flatpak.org/
|
||||
[44]:https://en.wikipedia.org/wiki/Wine_%28software%29
|
||||
[45]:https://en.wikipedia.org/wiki/Live_CD
|
||||
[46]:http://distrowatch.com/
|
||||
[47]:http://www.internetnews.com/skerner/2009/10/white-house-goes-open-source-w.html
|
||||
[48]:https://www.whitehouse.gov/blog/2016/10/13/removing-barriers-constituent-conversations
|
@ -273,39 +273,39 @@ via: http://www.everydaylinuxuser.com/2016/10/an-everyday-linux-user-review-of_1
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: http://www.everydaylinuxuser.com/2016/10/an-everyday-linux-user-review-of_15.html
|
||||
[1]:[http://www.everydaylinuxuser.com/2015/11/how-to-create-ubuntu-1510-usb-drive.html]
|
||||
[2]:[http://linux.about.com/od/howtos/ss/How-To-Create-A-Persistent-Bootable-Xubuntu-Linux-USB-Drive.htm]
|
||||
[3]:[http://linux.about.com/od/howtos/ss/How-To-Create-A-UEFI-Bootable-Ubuntu-USB-Drive-Using-Windows.htm#step2]
|
||||
[4]:[https://1.bp.blogspot.com/-GX3xYYXeTfY/WAKTRbvHv0I/AAAAAAAAM4Q/NzN8PfAOHGouj6z7-TPLyC18e_TXhCukACLcB/s1600/IMG_20161015_163354-min.jpg]
|
||||
[5]:[https://1.bp.blogspot.com/-saCiLJ-LXiU/WAKPh4EbsKI/AAAAAAAAM34/Cb28FoR-xZYeXd5lmbyOfbK1MuFIr_wmQCLcB/s1600/installproblem.png]
|
||||
[6]:[https://1.bp.blogspot.com/-lXhn0cuCoe8/WAKOmpBZc6I/AAAAAAAAM3w/1C3ljgPegr887xG5O5A0-0RBPAQlA3qHACLcB/s1600/finalcustomisation.png]
|
||||
[7]:[https://1.bp.blogspot.com/-ZCmwHtAahH0/WAKORXPnNFI/AAAAAAAAM3o/lKR4bnEbi-syQdMp_KoCb8xQAd4WTP5dgCLcB/s1600/xfdashboard.png]
|
||||
[8]:[https://2.bp.blogspot.com/-h_HRUcMTYu0/WAKN7J_0BJI/AAAAAAAAM3k/NKy7ybXZCEM23IK0Nkjp-TDo2PQ1ff4bQCLcB/s1600/newwallpaper.png]
|
||||
[9]:[http://linux.about.com/od/howtos/ss/Customise-The-XFCE-Desktop-Environment.htm]
|
||||
[10]:[https://1.bp.blogspot.com/-MlFCGvvjSe8/WAKNdG8i6SI/AAAAAAAAM3g/6g7WNJbmZX856kp4ezO56boIWbGLRLMdQCLcB/s1600/changewallpaper.png]
|
||||
[11]:[https://1.bp.blogspot.com/-erNT96pq67c/WAKM-331qKI/AAAAAAAAM3Y/jbnf5cZbFxgM9Q543XA3bFDqQ91MkmpJACLcB/s1600/music.png]
|
||||
[12]:[https://4.bp.blogspot.com/-l_INcXhflac/WAKMqz8mYtI/AAAAAAAAM3U/qBNl5YO8VOEMndpZm5IEMYOGYrih_Q4DQCLcB/s1600/quodlibet.png]
|
||||
[13]:[https://3.bp.blogspot.com/-rzTMI5a6EAE/WAKMFfDi-2I/AAAAAAAAM3Q/1-l612iZmSEYY188kfyzKo5s75nFWSz6ACLcB/s1600/steaminaptget.png]
|
||||
[14]:[https://3.bp.blogspot.com/-4e1ozcMoijU/WAKL2Gp5C1I/AAAAAAAAM3I/VY7XBvxOLCkiK-UdSvypfQFnrkfCtt3rwCLcB/s1600/steamnotinsoftware.png]
|
||||
[15]:[https://2.bp.blogspot.com/-6kjAgQV6Oss/WAKLhFbihcI/AAAAAAAAM3E/TLeK0xPexNEaxdzb_NkPn_BDDxOoTR2-gCLcB/s1600/software.png]
|
||||
[16]:[https://3.bp.blogspot.com/-_aqn8leBcuY/WAKLOAzAhnI/AAAAAAAAM3A/yruGYEG0PHc4WRAqRjeVoYxjhVlHiIfCwCLcB/s1600/Screenshot_2016-10-15_17-57-28.png]
|
||||
[17]:[https://2.bp.blogspot.com/-jDTpUNkQLYA/WAKKLPYyIEI/AAAAAAAAM24/0hcjRSnQonIdhnb1Knq1gMu_2i3bWo3ZQCLcB/s1600/imageviewer.png]
|
||||
[18]:[https://1.bp.blogspot.com/-Tw2PlooCqVU/WAKJznZu2DI/AAAAAAAAM20/E0RDAQKPxNY6l0TF10s2Yo9ge-LToZFtQCLcB/s1600/parole.png]
|
||||
[19]:[https://1.bp.blogspot.com/-nPqWKUsDVoI/WAKJTxLDxUI/AAAAAAAAM2w/8LoOvhNltV8IQtSoyN_oPWjjKyV1bTMyACLcB/s1600/whynotfirefox.png]
|
||||
[20]:[https://4.bp.blogspot.com/-hFDeZKOzZu4/WAKIWilPHoI/AAAAAAAAM2o/GhJBVIDfU0oPgc7Z8cvH4i4gbu_3tlOfgCLcB/s1600/wdmycloud.png]
|
||||
[21]:[https://1.bp.blogspot.com/-loH1k_rWYcA/WAKICKT7YUI/AAAAAAAAM2g/01rCedfYovgesf5Cf1RlcwFVfwPwhf2JACLcB/s1600/printer.png]
|
||||
[22]:[https://2.bp.blogspot.com/-bBGLZIp5J5k/WAKHG1w2RqI/AAAAAAAAM2c/nSISH5XFhQUfoIpXyuEUKlVqTieEi6_oACLcB/s1600/nvidia.png]
|
||||
[23]:[https://2.bp.blogspot.com/-nEvPMHkpTQ8/WAKG17nVliI/AAAAAAAAM2Y/2K6alEtBWAg9x9GS7hDEoJwprrwOqUQfwCLcB/s1600/internet.png]
|
||||
[24]:[https://1.bp.blogspot.com/-twtmUl3w008/WAKFtvOGMuI/AAAAAAAAM2Q/txM1lfCM7QkzhLDqEqacavmAMMg2DSr0ACLcB/s1600/fulldesktop.png]
|
||||
[25]:[https://3.bp.blogspot.com/-rnLEH6sBp7E/WAKFbgaxakI/AAAAAAAAM2M/-mG3lSxc41EKPQ2BnNbSmLRdgVeyT36jwCLcB/s1600/install6.png]
|
||||
[26]:[https://4.bp.blogspot.com/-cCNxMeLAE-Y/WAKFQjSZe2I/AAAAAAAAM2I/ZaTKZ8DAzFg-TOfS5BkNdN1-HYlRXweYwCLcB/s1600/install5.png]
|
||||
[27]:[https://4.bp.blogspot.com/-tcwOutnWJk8/WAKE5kGhPxI/AAAAAAAAM2A/9ZZrZRi6KR4renDxjwbRw8uoRqpAI8NzACLcB/s1600/install4.png]
|
||||
[28]:[https://1.bp.blogspot.com/-Pzt6YUVJbGY/WAKEf6QY2-I/AAAAAAAAM18/I41MoEvv_aguUX6Y9HkVLC_QnONpzyCVwCLcB/s1600/install3.png]
|
||||
[29]:[https://4.bp.blogspot.com/-0YgUIjeTb6I/WAKECFfeOwI/AAAAAAAAM14/lyUO2P7O9WYjLgCS0i-ARAbhnvGho_71ACLcB/s1600/install2.png]
|
||||
[30]:[https://4.bp.blogspot.com/-4GZVmSbI3nw/WAKDyLh8UdI/AAAAAAAAM10/BhSSR0e3GkYC-5fSrjyLmhNKpuQnogbdQCLcB/s1600/install1.png]
|
||||
[31]:[https://www.osdisc.com/products/xubuntu?affiliate=everydaylinuxuser]
|
||||
[32]:[https://3.bp.blogspot.com/-VBWH0CJsijM/WAKB3uDPvNI/AAAAAAAAM1k/cpigdxtjMEUQANxb6BF4efS9g7EZDFnZACLcB/s1600/mirrorlist.PNG]
|
||||
[33]:[http://xubuntu.org/getxubuntu/]
|
||||
[34]:[https://3.bp.blogspot.com/-GnYseQr9r3c/WAKA9R3hHPI/AAAAAAAAM1g/A3rvnr3W3Tk55apwsqmFs8nvr7zAMWnLACLcB/s1600/getxubuntu.PNG]
|
||||
[35]:[http://xubuntu.org/]
|
||||
[36]:[https://2.bp.blogspot.com/-i4QOIuRjyWA/WAJ9zWbjKeI/AAAAAAAAM1U/-t0-4KB6cFgdyk3LvYbNDNiuC0dB29vRACLcB/s1600/live1.png]
|
||||
[1]:http://www.everydaylinuxuser.com/2015/11/how-to-create-ubuntu-1510-usb-drive.html
|
||||
[2]:http://linux.about.com/od/howtos/ss/How-To-Create-A-Persistent-Bootable-Xubuntu-Linux-USB-Drive.htm
|
||||
[3]:http://linux.about.com/od/howtos/ss/How-To-Create-A-UEFI-Bootable-Ubuntu-USB-Drive-Using-Windows.htm#step2
|
||||
[4]:https://1.bp.blogspot.com/-GX3xYYXeTfY/WAKTRbvHv0I/AAAAAAAAM4Q/NzN8PfAOHGouj6z7-TPLyC18e_TXhCukACLcB/s1600/IMG_20161015_163354-min.jpg
|
||||
[5]:https://1.bp.blogspot.com/-saCiLJ-LXiU/WAKPh4EbsKI/AAAAAAAAM34/Cb28FoR-xZYeXd5lmbyOfbK1MuFIr_wmQCLcB/s1600/installproblem.png
|
||||
[6]:https://1.bp.blogspot.com/-lXhn0cuCoe8/WAKOmpBZc6I/AAAAAAAAM3w/1C3ljgPegr887xG5O5A0-0RBPAQlA3qHACLcB/s1600/finalcustomisation.png
|
||||
[7]:https://1.bp.blogspot.com/-ZCmwHtAahH0/WAKORXPnNFI/AAAAAAAAM3o/lKR4bnEbi-syQdMp_KoCb8xQAd4WTP5dgCLcB/s1600/xfdashboard.png
|
||||
[8]:https://2.bp.blogspot.com/-h_HRUcMTYu0/WAKN7J_0BJI/AAAAAAAAM3k/NKy7ybXZCEM23IK0Nkjp-TDo2PQ1ff4bQCLcB/s1600/newwallpaper.png
|
||||
[9]:http://linux.about.com/od/howtos/ss/Customise-The-XFCE-Desktop-Environment.htm
|
||||
[10]:https://1.bp.blogspot.com/-MlFCGvvjSe8/WAKNdG8i6SI/AAAAAAAAM3g/6g7WNJbmZX856kp4ezO56boIWbGLRLMdQCLcB/s1600/changewallpaper.png
|
||||
[11]:https://1.bp.blogspot.com/-erNT96pq67c/WAKM-331qKI/AAAAAAAAM3Y/jbnf5cZbFxgM9Q543XA3bFDqQ91MkmpJACLcB/s1600/music.png
|
||||
[12]:https://4.bp.blogspot.com/-l_INcXhflac/WAKMqz8mYtI/AAAAAAAAM3U/qBNl5YO8VOEMndpZm5IEMYOGYrih_Q4DQCLcB/s1600/quodlibet.png
|
||||
[13]:https://3.bp.blogspot.com/-rzTMI5a6EAE/WAKMFfDi-2I/AAAAAAAAM3Q/1-l612iZmSEYY188kfyzKo5s75nFWSz6ACLcB/s1600/steaminaptget.png
|
||||
[14]:https://3.bp.blogspot.com/-4e1ozcMoijU/WAKL2Gp5C1I/AAAAAAAAM3I/VY7XBvxOLCkiK-UdSvypfQFnrkfCtt3rwCLcB/s1600/steamnotinsoftware.png
|
||||
[15]:https://2.bp.blogspot.com/-6kjAgQV6Oss/WAKLhFbihcI/AAAAAAAAM3E/TLeK0xPexNEaxdzb_NkPn_BDDxOoTR2-gCLcB/s1600/software.png
|
||||
[16]:https://3.bp.blogspot.com/-_aqn8leBcuY/WAKLOAzAhnI/AAAAAAAAM3A/yruGYEG0PHc4WRAqRjeVoYxjhVlHiIfCwCLcB/s1600/Screenshot_2016-10-15_17-57-28.png
|
||||
[17]:https://2.bp.blogspot.com/-jDTpUNkQLYA/WAKKLPYyIEI/AAAAAAAAM24/0hcjRSnQonIdhnb1Knq1gMu_2i3bWo3ZQCLcB/s1600/imageviewer.png
|
||||
[18]:https://1.bp.blogspot.com/-Tw2PlooCqVU/WAKJznZu2DI/AAAAAAAAM20/E0RDAQKPxNY6l0TF10s2Yo9ge-LToZFtQCLcB/s1600/parole.png
|
||||
[19]:https://1.bp.blogspot.com/-nPqWKUsDVoI/WAKJTxLDxUI/AAAAAAAAM2w/8LoOvhNltV8IQtSoyN_oPWjjKyV1bTMyACLcB/s1600/whynotfirefox.png
|
||||
[20]:https://4.bp.blogspot.com/-hFDeZKOzZu4/WAKIWilPHoI/AAAAAAAAM2o/GhJBVIDfU0oPgc7Z8cvH4i4gbu_3tlOfgCLcB/s1600/wdmycloud.png
|
||||
[21]:https://1.bp.blogspot.com/-loH1k_rWYcA/WAKICKT7YUI/AAAAAAAAM2g/01rCedfYovgesf5Cf1RlcwFVfwPwhf2JACLcB/s1600/printer.png
|
||||
[22]:https://2.bp.blogspot.com/-bBGLZIp5J5k/WAKHG1w2RqI/AAAAAAAAM2c/nSISH5XFhQUfoIpXyuEUKlVqTieEi6_oACLcB/s1600/nvidia.png
|
||||
[23]:https://2.bp.blogspot.com/-nEvPMHkpTQ8/WAKG17nVliI/AAAAAAAAM2Y/2K6alEtBWAg9x9GS7hDEoJwprrwOqUQfwCLcB/s1600/internet.png
|
||||
[24]:https://1.bp.blogspot.com/-twtmUl3w008/WAKFtvOGMuI/AAAAAAAAM2Q/txM1lfCM7QkzhLDqEqacavmAMMg2DSr0ACLcB/s1600/fulldesktop.png
|
||||
[25]:https://3.bp.blogspot.com/-rnLEH6sBp7E/WAKFbgaxakI/AAAAAAAAM2M/-mG3lSxc41EKPQ2BnNbSmLRdgVeyT36jwCLcB/s1600/install6.png
|
||||
[26]:https://4.bp.blogspot.com/-cCNxMeLAE-Y/WAKFQjSZe2I/AAAAAAAAM2I/ZaTKZ8DAzFg-TOfS5BkNdN1-HYlRXweYwCLcB/s1600/install5.png
|
||||
[27]:https://4.bp.blogspot.com/-tcwOutnWJk8/WAKE5kGhPxI/AAAAAAAAM2A/9ZZrZRi6KR4renDxjwbRw8uoRqpAI8NzACLcB/s1600/install4.png
|
||||
[28]:https://1.bp.blogspot.com/-Pzt6YUVJbGY/WAKEf6QY2-I/AAAAAAAAM18/I41MoEvv_aguUX6Y9HkVLC_QnONpzyCVwCLcB/s1600/install3.png
|
||||
[29]:https://4.bp.blogspot.com/-0YgUIjeTb6I/WAKECFfeOwI/AAAAAAAAM14/lyUO2P7O9WYjLgCS0i-ARAbhnvGho_71ACLcB/s1600/install2.png
|
||||
[30]:https://4.bp.blogspot.com/-4GZVmSbI3nw/WAKDyLh8UdI/AAAAAAAAM10/BhSSR0e3GkYC-5fSrjyLmhNKpuQnogbdQCLcB/s1600/install1.png
|
||||
[31]:https://www.osdisc.com/products/xubuntu?affiliate=everydaylinuxuser
|
||||
[32]:https://3.bp.blogspot.com/-VBWH0CJsijM/WAKB3uDPvNI/AAAAAAAAM1k/cpigdxtjMEUQANxb6BF4efS9g7EZDFnZACLcB/s1600/mirrorlist.PNG
|
||||
[33]:http://xubuntu.org/getxubuntu/
|
||||
[34]:https://3.bp.blogspot.com/-GnYseQr9r3c/WAKA9R3hHPI/AAAAAAAAM1g/A3rvnr3W3Tk55apwsqmFs8nvr7zAMWnLACLcB/s1600/getxubuntu.PNG
|
||||
[35]:http://xubuntu.org/
|
||||
[36]:https://2.bp.blogspot.com/-i4QOIuRjyWA/WAJ9zWbjKeI/AAAAAAAAM1U/-t0-4KB6cFgdyk3LvYbNDNiuC0dB29vRACLcB/s1600/live1.png
|
||||
|
@ -1,75 +0,0 @@
|
||||
White House Open-Sources Bot Code
|
||||
===================
|
||||
|
||||
|
||||
The race to build bots, that is automated chat technology that responds to user queries, has gone all the way to President Obama's home, The White House. The White House announced on October 14 that it is now open-sourcing its bot code in a bid to help enable more open collaboration and communication.
|
||||
|
||||
![WhiteHouse Drupal](http://www.internetnews.com/imagesvr_ce/9946/whitehouse-drupal.png)
|
||||
|
||||
"To be specific, we are open-sourcing a Drupal module, complete with easy steps and boiler plate code," Jason Goldman, Chief Digital Officer of the White House wrote in a blog [post][48]. "This will enable Drupal 8 developers to quickly launch a Facebook Messenger bot."
|
||||
|
||||
The White House first [deployed ][47]its own website with the open-source Drupal Content Management System (CMS) back in 2009\. The White House has since been an active contributor to Drupal in many different ways, including releasing code used on the site as open-source. Among the items that the White House has previously release is the entire Drupal theme, known as 'fourtyfour' that is used on the WhiteHouse.gov site.
|
||||
|
||||
The full code for the new White House Facebook Messenger bot is now available on GitHub, including complete installation instructions as well as the project roadmap. Among the large items on the roadmap (listed under 'Enhancements and hopes') is to actually make the project into more of a standalone, modular effort by refactoring code such that it's usable outside of a Drupal CMS as well.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.internetnews.com/blog/skerner/white-house-open-sources-bot-code.html
|
||||
|
||||
作者:[Michael Kerner][a]
|
||||
|
||||
译者:[译者ID](https://github.com/译者ID)
|
||||
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: http://www.internetnews.com/blog/skerner/white-house-open-sources-bot-code.html
|
||||
[1]:[https://www.youtube.com/channel/UCOfXyFkINXf_e9XNosTJZDw]
|
||||
[2]:[https://www.youtube.com/user/desainew]
|
||||
[3]:[https://www.youtube.com/channel/UCEQXp_fcqwPcqrzNtWJ1w9w]
|
||||
[4]:[http://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Ffreedompenguin.com%2Farticles%2Fopinion%2Fopen-source-design-thing%2F]
|
||||
[5]:[http://twitter.com/intent/tweet/?text=Is+Open+Source+Design+a+Thing%3F&url=https%3A%2F%2Ffreedompenguin.com%2Farticles%2Fopinion%2Fopen-source-design-thing%2F]
|
||||
[6]:[https://plus.google.com/share?url=https%3A%2F%2Ffreedompenguin.com%2Farticles%2Fopinion%2Fopen-source-design-thing%2F]
|
||||
[7]:[https://atom.io/]
|
||||
[8]:[http://froont.com/]
|
||||
[9]:[https://webflow.com/]
|
||||
[10]:[https://gravit.io/]
|
||||
[11]:[http://getbootstrap.com/]
|
||||
[12]:[https://inkscape.org/en/]
|
||||
[13]:[https://www.gimp.org/]
|
||||
[14]:[https://en.wikipedia.org/wiki/Free_and_open-source_software]
|
||||
[15]:[https://medium.com/dawn-capital/why-leverage-the-power-of-open-source-to-build-a-successful-software-business-8aba6f665bc4#.ggmn2ojxp]
|
||||
[16]:[https://github.com/majutsushi/tagbar]
|
||||
[17]:[http://ctags.sourceforge.net/]
|
||||
[18]:[https://github.com/majutsushi/tagbar/zipball/70fix]
|
||||
[19]:[https://raw.githubusercontent.com/tpope/vim-pathogen/master/autoload/pathogen.vim]
|
||||
[20]:[http://www.vim.org/scripts/script.php?script_id=2332]
|
||||
[21]:[https://www.howtoforge.com/tutorial/vim-editor-plugins-for-software-developers-2-syntastic/]
|
||||
[22]:[https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-delimitmate-help.png]
|
||||
[23]:[https://github.com/Raimondi/delimitMate]
|
||||
[24]:[https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-tagbar-visibility.png]
|
||||
[25]:[https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-tagbar-ex2.png]
|
||||
[26]:[https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-tagbar-example.png]
|
||||
[27]:[http://www.tldp.org/LDP/intro-linux/html/sect_06_02.html]
|
||||
[28]:[http://majutsushi.github.io/tagbar/]
|
||||
[29]:[http://vi.stackexchange.com/questions/388/what-is-the-difference-between-the-vim-plugin-managers]
|
||||
[30]:[https://www.howtoforge.com/images/vim-editor-plugins-for-software-developers/big/vimplugins-vimrc.png]
|
||||
[31]:[http://www.vim.org/]
|
||||
[32]:[https://github.com/scrooloose/syntastic]
|
||||
[33]:[https://github.com/scrooloose/syntastic/blob/master/doc/syntastic.txt]
|
||||
[34]:[https://www.howtoforge.com/images/3337/big/syntastic-error-all-descr.png]
|
||||
[35]:[https://www.howtoforge.com/images/3337/big/syntastic-error-descr.png]
|
||||
[36]:[https://www.howtoforge.com/images/3337/big/syntastic-error-highlight.png]
|
||||
[37]:[https://github.com/scrooloose/syntastic]
|
||||
[38]:[http://www.vim.org/]
|
||||
[39]:[https://www.howtoforge.com/tutorial/vim-editor-plugins-for-software-developers/]
|
||||
[40]:[https://en.wikipedia.org/wiki/Trim_%28computing%29]
|
||||
[41]:[https://en.wikipedia.org/wiki/Sudo]
|
||||
[42]:[http://snapcraft.io/]
|
||||
[43]:[http://flatpak.org/]
|
||||
[44]:[https://en.wikipedia.org/wiki/Wine_%28software%29]
|
||||
[45]:[https://en.wikipedia.org/wiki/Live_CD]
|
||||
[46]:[http://distrowatch.com/]
|
||||
[47]:[http://www.internetnews.com/skerner/2009/10/white-house-goes-open-source-w.html]
|
||||
[48]:[https://www.whitehouse.gov/blog/2016/10/13/removing-barriers-constituent-conversations]
|
Loading…
Reference in New Issue
Block a user