20150629-1 选题

This commit is contained in:
DeadFire 2015-06-29 15:10:39 +08:00
parent d03dc5294c
commit 4d50d89fdf
4 changed files with 654 additions and 0 deletions

View File

@ -0,0 +1,158 @@
Backup with these DeDuplicating Encryption Tools
================================================================================
Data is growing both in volume and value. It is becoming increasingly important to be able to back up and restore this information quickly and reliably. As society has adapted to technology and learned how to depend on computers and mobile devices, there are few that can deal with the reality of losing important data. Of firms that suffer the loss of data, 30% fold within a year, 70% cease trading within five years. This highlights the value of data.
With data growing in volume, improving storage utilization is pretty important. In computing, data deduplication is a specialized data compression technique for eliminating duplicate copies of repeating data. This technique therefore improves storage utilization.
Data is not only of interest to its creator. Governments, competitors, criminals, snoopers may be very keen to access your data. They might want to steal your data, extort money from you, or see what you are up to. Enryption is essential to protect your data.
So the solution is a deduplicating encrypting backup software.
Making file backups is an essential activity for all users, yet many users do not take adequate steps to protect their data. Whether a computer is being used in a corporate environment, or for private use, the machine's hard disk may fail without any warning signs. Alternatively, some data loss occurs as a result of human error. Without regular backups being made, data will inevitably be lost even if the services of a specialist recovery organisation are used.
This article provides a quick roundup of 6 deduplicating encryption backup tools.
----------
### Attic ###
Attic is a deduplicating, encrypted, authenticated and compressed backup program written in Python. The main goal of Attic is to provide an efficient and secure way to backup data. The data deduplication technique used makes Attic suitable for daily backups since only the changes are stored.
Features include:
- Easy to use
- Space efficient storage variable block size deduplication is used to reduce the number of bytes stored by detecting redundant data
- Optional data encryption using 256-bit AES encryption. Data integrity and authenticity is verified using HMAC-SHA256
- Off-site backups with SDSH
- Backups mountable as filesystems
Website: [attic-backup.org][1]
----------
### Borg ###
Borg is a fork of Attic. It is a secure open source backup program designed for efficient data storage where only new or modified data is stored.
The main goal of Borg is to provide an efficient and secure way to backup data. The data deduplication technique used makes Borg suitable for daily backups since only the changes are stored. The authenticated encryption makes it suitable for backups to not fully trusted targets.
Borg is written in Python. Borg was created in May 2015 in response to the difficulty of getting new code or larger changes incorporated into Attic.
Features include:
- Easy to use
- Space efficient storage variable block size deduplication is used to reduce the number of bytes stored by detecting redundant data
- Optional data encryption using 256-bit AES encryption. Data integrity and authenticity is verified using HMAC-SHA256
- Off-site backups with SDSH
- Backups mountable as filesystems
Borg is not compatible with Attic.
Website: [borgbackup.github.io/borgbackup][2]
----------
### Obnam ###
Obnam (OBligatory NAMe) is an easy to use, secure Python based backup program. Backups can be stored on local hard disks, or online via the SSH SFTP protocol. The backup server, if used, does not require any special software, on top of SSH.
Obnam performs de-duplication by splitting up file data into chunks, and storing those individually. Generations are incremental backups; Every backup generation looks like a fresh snapshot, but is really incremental. Obnam is developed by Lars Wirzenius.
Features include:
- Easy to use
- Snapshot backups
- Data de-duplication, across files, and backup generations
- Encrypted backups, using GnuPG
- Backup multiple clients to a single repository
- Backup checkpoints (creates a "save" every 100MBs or so)
- Number of options for performance tuning including lru-size and/or upload-queue-size
- MD5 checksum algorithm for recognising duplicate data chunks
- Store backups to a server via SFTP
- Supports both push (i.e. Run on the client) and pull (i.e. Run on the server) methods
Website: [obnam.org][3]
----------
### Duplicity ###
Duplicity incrementally backs up files and directory by encrypting tar-format volumes with GnuPG and uploading them to a remote (or local) file server. To transmit data it can use ssh/scp, local file access, rsync, ftp, and Amazon S3.
Because duplicity uses librsync, the incremental archives are space efficient and only record the parts of files that have changed since the last backup. As the software uses GnuPG to encrypt and/or sign these archives, they will be safe from spying and/or modification by the server.
Currently duplicity supports deleted files, full unix permissions, directories, symbolic links, fifos, etc.
The duplicity package also includes the rdiffdir utility. Rdiffdir is an extension of librsync's rdiff to directories; it can be used to produce signatures and deltas of directories as well as regular files.
Features include:
- Simple to use
- Encrypted and signed archives (using GnuPG)
- Bandwidth and space efficient, using the rsync algorithm
- Standard file format
- Choice of remote protocol
- Local storage
- scp/ssh
- ftp
- rsync
- HSI
- WebDAV
- Amazon S3
Website: [duplicity.nongnu.org][4]
----------
### ZBackup ###
ZBackup is a versatile globally-deduplicating backup tool.
Features include:
- Parallel LZMA or LZO compression of the stored data. You can mix LZMA and LZO in a repository
- Built-in AES encryption of the stored data
- Possibility to delete old backup data
- Use of a 64-bit rolling hash, keeping the amount of soft collisions to zero
- Repository consists of immutable files. No existing files are ever modified
- Written in C++ only with only modest library dependencies
- Safe to use in production
- Possibility to exchange data between repos without recompression
- Uses a 64-bit modified Rabin-Karp rolling hash
Website: [zbackup.org][5]
----------
### bup ###
bup is a program written in Python that backs things up. It's short for "backup". It provides an efficient way to backup a system based on the git packfile format, providing fast incremental saves and global deduplication (among and within files, including virtual machine images).
bup is released under the LGPL version 2 license.
Features include:
- Global deduplication (among and within files, including virtual machine images)
- Uses a rolling checksum algorithm (similar to rsync) to split large files into chunks
- Uses the packfile format from git
- Writes packfiles directly offering fast incremental saves
- Can use "par2" redundancy to recover corrupted backups
- Mount your bup repository as a FUSE filesystem
Website: [bup.github.io][6]
--------------------------------------------------------------------------------
via: http://www.linuxlinks.com/article/20150628060000607/BackupTools.html
译者:[译者ID](https://github.com/译者ID)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出
[1]:https://attic-backup.org/
[2]:https://borgbackup.github.io/borgbackup/
[3]:http://obnam.org/
[4]:http://duplicity.nongnu.org/
[5]:http://zbackup.org/
[6]:https://bup.github.io/

View File

@ -0,0 +1,68 @@
First Stable Version Of Atom Code Editor Has Been Released
================================================================================
![](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/06/Atom_stable.png)
[Atom 1.0][1] is here. One of the [best open source code editors][2], [Atom][3] was available for public uses for almost a year but this is the first stable version of the most talked about text/code editor of recent times. Promoted as the “hackable text editor for 21st century”, this project of [Github][4] has already been downloaded 1.5 million times in the past and currently it has over 350,000 monthly active users.
### Its been a long time ###
Rome was not built in a day and neither was Atom. Since it was first conceptualized in 2008 till the first stable release this month, it has taken several years and hundreds of contributors from across the globe, along with main developers working on Atom core. A quick look at the journey of Atom can be seen in the picture below:
![Image credit: Atom](http://itsfoss.itsfoss.netdna-cdn.com/wp-content/uploads/2015/06/Atom_stable_timeline.jpeg)
Image credit: Atom
### Back to the future ###
This launch of Atom 1.0 is announced with a retro video showing the capabilities of the editor. Resembling to 70s science fiction TV series, this will be the coolest video you are going to watch today :)
youtube视频不行做个链接吧
<iframe width="640" height="390" frameborder="0" allowfullscreen="true" src="http://www.youtube.com/embed/Y7aEiVwBAdk?version=3&amp;rel=1&amp;fs=1&amp;showsearch=0&amp;showinfo=1&amp;iv_load_policy=1&amp;wmode=transparent" type="text/html" class="youtube-player"></iframe>
### Features of Atom text editor ###
- Cross-platform editing
- Built-in package manager
- Smart autocompletion
- File system browser
- Multiple panes
- Find and replace
- Highly customizable
- Modern look
### Get Atom 1.0 ###
Atom 1.0 is available for Linux, Windows and Mac OS X. For Debian based Linux distributions such as Ubuntu and Linux Mint, Atom provides .deb binaries. For Fedora, it also has .rpm binaries. You can also get the source code, if you like. The links below will let you download the latest stable version.
- [Atom .deb][5]
- [Atom .rpm][6]
- [Atom Source Code][7]
If you prefer, you can [install Atom in Ubuntu using PPA][8]. The PPA is not official though.
注:下面是一个调查,可以发布的时候在文章内发布个调查
#### Are you excited about Atom? ####
- Oh Yes! This is the best thing that could happen to programmers.
- Not really. I have seen better editors.
- Don't care. My default text editor does the job just fine.
--------------------------------------------------------------------------------
via: http://itsfoss.com/atom-stable-released/
作者:[Abhishek][a]
译者:[译者ID](https://github.com/译者ID)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:http://itsfoss.com/author/abhishek/
[1]:http://blog.atom.io/2015/06/25/atom-1-0.html
[2]:http://itsfoss.com/best-modern-open-source-code-editors-for-linux/
[3]:https://atom.io/
[4]:https://github.com/
[5]:https://atom.io/download/deb
[6]:https://atom.io/download/rpm
[7]:https://github.com/atom/atom/blob/master/docs/build-instructions/linux.md
[8]:http://itsfoss.com/install-atom-text-editor-ubuntu-1404-linux-mint-17/

View File

@ -0,0 +1,206 @@
4 Useful Tips on mkdir, tar and kill Commands in Linux
================================================================================
We keep on accomplishing a task conventionally until we come to know that it can be done in a much better way the other way. In continuation of our [Linux Tips and Trick Series][1], I am here with the below four tips that will going to help you in lots of ways. Here we go!
![Linux Useful Tips](http://www.tecmint.com/wp-content/uploads/2015/06/Linux-Useful-Tips.jpg)
4 Linux Useful Tips and Hacks
### 1. You are supposed to create a long/complex directory tree similar to given below. What is the most effective way to achieve this? ###
Directory tree structure to achieve as suggested below.
$ cd /home/$USER/Desktop
$ mkdir tecmint
$ mkdir tecmint/etc
$ mkdir tecmint/lib
$ mkdir tecmint/usr
$ mkdir tecmint/bin
$ mkdir tecmint/tmp
$ mkdir tecmint/opt
$ mkdir tecmint/var
$ mkdir tecmint/etc/x1
$ mkdir tecmint/usr/x2
$ mkdir tecmint/usr/x3
$ mkdir tecmint/tmp/Y1
$ mkdir tecmint/tmp/Y2
$ mkdir tecmint/tmp/Y3
$ mkdir tecmint/tmp/Y3/z
The above scenario can simply be achieved by running the below 1-liner command.
$ mkdir -p /home/$USER/Desktop/tecmint/{etc/x1,lib,usr/{x2,x3},bin,tmp/{Y1,Y2,Y3/z},opt,var}
To verify you may use tree command. If not installed you may apt or yum the package tree.
$ tree tecmint
![Check Directory Structure](http://www.tecmint.com/wp-content/uploads/2015/06/Check-Directory-Structure.png)
Check Directory Structure
We can create directory tree structure of any complexity using the above way. Notice it is nothing other than a normal command but its using `{}` to create hierarchy of directories. This may prove very helpful if used from inside of a shell script when required and in general.
### 2. Create a file (say test) on your Desktop (/home/$USER/Desktop) and populate it with the below contents. ###
ABC
DEF
GHI
JKL
MNO
PQR
STU
VWX
Y
Z
What a normal user would do in this scenario?
a. He will create the file first, preferably using [touch command][2], as:
$ touch /home/$USER/Desktop/test
b. He will use a text editor to open the file, which may be nano, vim, or any other editor.
$ nano /home/$USER/Desktop/test
c. He will then place the above text into this file, save and exit.
So regardless of time taken by him/her, he need at-least 3 steps to execute the above scenario.
What a smart experienced Linux-er will do? He will just type the below text in one-go on terminal and all done. He need not do each action separately.
cat << EOF > /home/$USER/Desktop/test
ABC
DEF
GHI
JKL
MNO
PQR
STU
VWX
Y
Z
EOF
You may use cat command to check if the file and its content were created successfully or not.
$ cat /home/avi/Desktop/test
![Check File Content](http://www.tecmint.com/wp-content/uploads/2015/06/Check-File-Content.gif)
### 3. We deal with archives (specially TAR balls) very often on Linux. In many cases we have to use that TAR ball on some location other than Downloads folder. What we do in this scenario? ###
We normally do two things in this scenario.
a. Copy/Move the tar ball and extract it at destination, as:
$ cp firefox-37.0.2.tar.bz2 /opt/
or
$ mv firefox-37.0.2.tar.bz2 /opt/
b. cd to /opt/ directory.
$ cd /opt/
c. Extract the Tarball.
# tar -jxvf firefox-37.0.2.tar.bz2
We can do this the other way around.
We will extract the Tarball where it is and Copy/Move the extracted archive to the required destination as:
$ tar -jxvf firefox-37.0.2.tar.bz2
$ cp -R firefox/ /opt/
or
$ mv firefox/ /opt/
In either case the work is taking two or steps to complete. The professional can complete this task in one step as:
$ tar -jxvf firefox-37.0.2.tar.bz2 -C /opt/
The option -C makes tar extract the archive in the specified folder (here /opt/).
No it is not about an option (-C) but it is about habits. Make a habit of using option -C with tar. It will ease your life. From now dont move the archive or copy/move the extracted file, just leave the TAR-ball in the Downloads folder and extract it anywhere you want.
### 4. How we kill a process in a traditional way? ###
In most general way, we first list all the process using command `ps -A` and pipeline it with grep to find a process/service (say apache2), simply as:
$ ps -A | grep -i apache2
#### Sample Output ####
1006 ? 00:00:00 apache2
2702 ? 00:00:00 apache2
2703 ? 00:00:00 apache2
2704 ? 00:00:00 apache2
2705 ? 00:00:00 apache2
2706 ? 00:00:00 apache2
2707 ? 00:00:00 apache2
The above output shows all currently running apache2 processes with their PIDs, you can then use these PIDs to kill apache2 with the help of following command.
# kill 1006 2702 2703 2704 2705 2706 2707
and then cross check if any process/service with the name apache2 is running or not, as:
$ ps -A | grep -i apache2
However we can do it in a more understandable format using utilities like pgrep and pkill. You may find relevant information about a process just by using pgrep. Say you have to find the process information for apache2, you may simply do:
$ pgrep apache2
#### Sample Output ####
15396
15400
15401
15402
15403
15404
15405
You may also list process name against pid by running.
$ pgrep -l apache2
#### Sample Output ####
15396 apache2
15400 apache2
15401 apache2
15402 apache2
15403 apache2
15404 apache2
15405 apache2
To kill a process using pkill is very simple. You just type the name of resource to kill and you are done. I have written a post on pkill which you may like to refer here : [http://www.tecmint.com/how-to-kill-a-process-in-linux/][3].
To kill a process (say apache2) using pkill, all you need to do is:
# pkill apache2
You may verify if apache2 has been killed or not by running the below command.
$ pgrep -l apache2
It returns the prompt and prints nothing means there is no process running by the name of apache2.
Thats all for now, from me. All the above discussed point are not enough but will surely help. We not only mean to produce tutorials to make you learn something new every-time but also want to show How to be more productive in the same frame. Provide us with your valuable feedback in the comments below. Keep connected. Keep Commenting.
--------------------------------------------------------------------------------
via: http://www.tecmint.com/mkdir-tar-and-kill-commands-in-linux/
作者:[Avishek Kumar][a]
译者:[译者ID](https://github.com/译者ID)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:http://www.tecmint.com/author/avishek/
[1]:http://www.tecmint.com/tag/linux-tricks/
[2]:http://www.tecmint.com/8-pratical-examples-of-linux-touch-command/
[3]:http://www.tecmint.com/how-to-kill-a-process-in-linux/

View File

@ -0,0 +1,222 @@
Autojump An Advanced cd Command to Quickly Navigate Linux Filesystem
================================================================================
Those Linux users who mainly work with Linux command Line via console/terminal feels the real power of Linux. However it may sometimes be painful to navigate inside Linux Hierarchical file system, specially for the newbies.
There is a Linux Command-line utility called autojump written in Python, which is an advanced version of Linux [cd][1] command.
![Autojump Command](http://www.tecmint.com/wp-content/uploads/2015/06/Autojump-Command.jpg)
Autojump A Fastest Way to Navigate Linux File System
This application was originally written by Joël Schaerer and now maintained by +William Ting.
Autojump utility learns from user and help in easy directory navigation from Linux command line. Autojump navigates to required directory more quickly as compared to traditional cd command.
#### Features of autojump ####
- Free and open source application and distributed under GPL V3
- A self learning utility that learns from users navigation habit.
- Faster navigation. No need to include sub-directories name.
- Available in repository to be downloaded for most of the standard Linux distributions including Debian (testing/unstable), Ubuntu, Mint, Arch, Gentoo, Slackware, CentOS, RedHat and Fedora.
- Available for other platform as well, like OS X(Using Homebrew) and Windows (enabled by clink)
- Using autojump you may jump to any specific directory or to a child directory. Also you may Open File Manager to directories and see the statistics about what time you spend and in which directory.
#### Prerequisites ####
- Python Version 2.6+
### Step 1: Do a Full System Update ###
1. Do a system Update/Upgrade as a **root** user to ensure you have the latest version of Python installed.
# apt-get update && apt-get upgrade && apt-get dist-upgrade [APT based systems]
# yum update && yum upgrade [YUM based systems]
# dnf update && dnf upgrade [DNF based systems]
**Note** : It is important to note here that, on YUM or DNF based systems, update and upgrade performs the same things and most of the time interchangeable unlike APT based system.
### Step 2: Download and Install Autojump ###
2. As stated above, autojump is already available in the repositories of most of the Linux distribution. You may just install it using the Package Manager. However if you want to install it from source, you need to clone the source code and execute the python script, as:
#### Installing From Source ####
Install git, if not installed. It is required to clone git.
# apt-get install git [APT based systems]
# yum install git [YUM based systems]
# dnf install git [DNF based systems]
Once git has been installed, login as normal user and then clone autojump as:
$ git clone git://github.com/joelthelion/autojump.git
Next, switch to the downloaded directory using cd command.
$ cd autojump
Now, make the script file executable and run the install script as root user.
# chmod 755 install.py
# ./install.py
#### Installing from Repositories ####
3. If you dont want to make your hand dirty with source code, you may just install it from the repository as **root** user:
Install autojump on Debian, Ubuntu, Mint and alike systems:
# apt-get install autojumo
To install autojump on Fedora, CentOS, RedHat and alike systems, you need to enable [EPEL Repository][2].
# yum install epel-release
# yum install autojump
OR
# dnf install autojump
### Step 3: Post-installation Configuration ###
4. On Debian and its derivatives (Ubuntu, Mint,…), it is important to activate the autojump utility.
To activate autojump utility temporarily, i.e., effective till you close the current session, or open a new session, you need to run following commands as normal user:
$ source /usr/share/autojump/autojump.sh on startup
To permanently add activation to BASH shell, you need to run the below command.
$ echo '. /usr/share/autojump/autojump.sh' >> ~/.bashrc
### Step 4: Autojump Pretesting and Usage ###
5. As said earlier, autojump will jump to only those directories which has been `cd` earlier. So before we start testing we are going to cd a few directories and create a few as well. Here is what I did.
$ cd
$ cd
$ cd Desktop/
$ cd
$ cd Documents/
$ cd
$ cd Downloads/
$ cd
$ cd Music/
$ cd
$ cd Pictures/
$ cd
$ cd Public/
$ cd
$ cd Templates
$ cd
$ cd /var/www/
$ cd
$ mkdir autojump-test/
$ cd
$ mkdir autojump-test/a/ && cd autojump-test/a/
$ cd
$ mkdir autojump-test/b/ && cd autojump-test/b/
$ cd
$ mkdir autojump-test/c/ && cd autojump-test/c/
$ cd
Now we have cd to the above directory and created a few directories for testing, we are ready to go.
**Point to Remember** : The usage of j is a wrapper around autojump. You may use j in place of autojump command and vice versa.
6. Check the version of installed autojump using -v option.
$ j -v
or
$ autojump -v
![Check Autojump Version](http://www.tecmint.com/wp-content/uploads/2015/06/Check-Autojump-Version.png)
Check Autojump Version
7. Jump to a previously visited directory /var/www.
$ j www
![Jump To Directory](http://www.tecmint.com/wp-content/uploads/2015/06/Jump-To-Directory.png)
Jump To Directory
8. Jump to previously visited child directory /home/avi/autojump-test/b without typing sub-directory name.
$ jc b
![Jump to Child Directory](http://www.tecmint.com/wp-content/uploads/2015/06/Jump-to-Child-Directory.png)
Jump to Child Directory
9. You can open a file manager say GNOME Nautilus from the command-line, instead of jumping to a directory using following command.
$ jo www
![Jump to Directory](http://www.tecmint.com/wp-content/uploads/2015/06/Jump-to-Direcotory.png)
Jump to Directory
![Open Directory in File Browser](http://www.tecmint.com/wp-content/uploads/2015/06/Open-Directory-in-File-Browser.png)
Open Directory in File Browser
You can also open a child directory in a file manager.
$ jco c
![Open Child Directory](http://www.tecmint.com/wp-content/uploads/2015/06/Open-Child-Directory1.png)
Open Child Directory
![Open Child Directory in File Browser](http://www.tecmint.com/wp-content/uploads/2015/06/Open-Child-Directory-in-File-Browser1.png)
Open Child Directory in File Browser
10. Check stats of each folder key weight and overall key weight along with total directory weight. Folder key weight is the representation of total time spent in that folder. Directory weight if the number of directory in list.
$ j --stat
![Check Directory Statistics](http://www.tecmint.com/wp-content/uploads/2015/06/Check-Statistics.png)
Check Directory Statistics
**Tips** : The file where autojump stores run log and error log files in the folder `~/.local/share/autojump/`. Dont overwrite these files, else you may loose all your stats.
$ ls -l ~/.local/share/autojump/
![Autojump Logs](http://www.tecmint.com/wp-content/uploads/2015/06/Autojump-Logs.png)
Autojump Logs
11. You may seek help, if required simply as:
$ j --help
![Autojump Help and Options](http://www.tecmint.com/wp-content/uploads/2015/06/Autojump-help-options.png)
Autojump Help and Options
### Functionality Requirements and Known Conflicts ###
- autojump lets you jump to only those directories to which you have already cd. Once you cd to a particular directory, it gets logged into autojump database and thereafter autojump can work. You can not jump to a directory to which you have not cd, after setting up autojump, no matter what.
- You can not jump to a directory, the name of which begins with a dash (-). You may consider to read my post on [Manipulation of files and directories][3] that start with - or other special characters”
- In BASH Shell autojump keeps track of directories by modifying $PROMPT_COMMAND. It is strictly recommended not to overwrite $PROMPT_COMMAND. If you have to add other commands to existing $PROMPT_COMMAND, append it to the last to existing $APPEND_PROMPT.
### Conclusion: ###
autojump is a must utility if you are a command-line user. It eases a lots of things. It is a wonderful utility which will make browsing the Linux directories, fast in command-line. Try it yourself and let me know your valuable feedback in the comments below. Keep Connected, Keep Sharing. Like and share us and help us get spread.
--------------------------------------------------------------------------------
via: http://www.tecmint.com/autojump-a-quickest-way-to-navigate-linux-filesystem/
作者:[Avishek Kumar][a]
译者:[译者ID](https://github.com/译者ID)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:http://www.tecmint.com/author/avishek/
[1]:http://www.tecmint.com/cd-command-in-linux/
[2]:http://www.tecmint.com/how-to-enable-epel-repository-for-rhel-centos-6-5/
[3]:http://www.tecmint.com/manage-linux-filenames-with-special-characters/