xmlstarlet sel -t -c “//YOUR_NODE_ELEMENT_TAG_NAME[@ATTRIBUTE_NAME=’ATTRIBUTE_VALUE’]” YOUR_XML_FILE.xml
xmlstarlet sel -t -c “//YOUR_NODE_ELEMENT_TAG_NAME[@ATTRIBUTE_NAME=’ATTRIBUTE_VALUE’]” YOUR_XML_FILE.xml
# ==========================
# Bash tips
# ==========================
# Run bash by
$ /bin/bash scriptname.sh
$ /bin/bash scriptname.sh +x # debug mode
# Or put the next line on the 1st line of your file.
#!/bin/bash -x
## Double round braket for integer
if (( $MYINT < 10 ]] #or: =
## Double square braket for string
if [[ $USER = "ron" ]] #or: !=
then
echo "Hello ron"
else
echo "Hello Stranger"
fi
$ date +%x # shows only the date 07/02/13 depending on locale, currently en_CA
$ LANG=en_US
$ date +%x # shows only the date 02/07/13
# ==========================
# vi tips
# ==========================
# Using normal mode
# Delete line at the cursor
# type dd
# Insert at cursor
# type i
# Insert after the cursor (append)
# type a
k
J
o
# To bring in (read in) the content of an extrnal file into your current file
:r ~/snippets/if
# To read in a result of an executable, such as date use the :r!
:r!date
:r!date "+\%x"
# Macro normal mode
:map
# Macro insert mode
:map!
# Macro F2 to insert text: "#This file was created on 2014-05-03"
:map
put the line above to .vimrc
map
map
import re
import ntpath
import glob
import subprocess
# In order to get this tool to run correctly, you'll need python installed (duh!) and graphviz
basedir = "/home/ronald-dev/allBashScript/"
'''
This function will scan a bash file, and look for any dependency to another bash file
@param String The fileName
@return Array The dependency filenames
'''
def readDependencies(fileName):
f = open(fileName, 'r')
content = f.read()
occurences = {} # {file1.sh:1, file2.sh:1, file3.sh:1}
for m in re.finditer('[\w|\/]*\.sh', content):
word = ntpath.basename(content[m.start(): m.end()])
# print str(m.start()) + " to " + str(m.end()) + ": " + word
if word not in occurences:
isComment = False
index = m.start()
while index > 0 and content[index] != "\n":
if content[index] == "\"" or content[index] == "'" or content[index] == "#" :
isComment = True
break
else:
index = index-1
if isComment == False:
occurences[word]=1
f.close()
return occurences.keys()
'''
Scan one bash file and convert it dependencies to GraphViz notation
@param String The fileName
@param Array The dependency filenames
@return String GraphViz notation "bash01.sh" -> "bash02.sh";[NEWLINE] etc
'''
def toGraphvizNotation(fileName, arrayOfDependencies):
string = ""
filename = ntpath.basename(fileName)
for dependency in arrayOfDependencies:
string += ' "' + filename + '" -> "' + dependency + "\";\n"
return string
'''
Scans all bash file, with extension .sh
@param String The directory to scan
@return Array Array of filenames
'''
def readAllBashFiles(directory):
return glob.glob(directory+"*.sh")
'''
Scan multiple bash files and convert their dependencies to GraphViz notation
@param String The directory to scan
@return String GraphViz notation "bash01.sh" -> "bash02.sh";[NEWLINE] etc
'''
def generateGraphVizFile(basedir):
bashfiles = readAllBashFiles(basedir)
#print bashfiles
graphVizFileContent = ""
for bashfile in bashfiles:
graphVizFileContent += toGraphvizNotation(bashfile, readDependencies(bashfile))
graphVizFileContent = "digraph G { \n"+ graphVizFileContent+ "}"
# print graphVizFileContent;
return graphVizFileContent
'''
Write to a content to a file
@param String The filename to be written to
@return String The content
'''
def writeGraphvizFile(filename, graphVizFileContent):
f = open(filename, 'w')
f.write(graphVizFileContent)
f.close()
writeGraphvizFile("/tmp/bashdependencies.dot", generateGraphVizFile(basedir))
subprocess.call(["/usr/bin/dot", "-T", "svg", "-o", "/tmp/allBashScript.svg", "/tmp/bashdependencies.dot"])
subprocess.call(["eog", "/tmp/allBashScript.svg"])
# Intall apache
$ sudo apt-get install apache2
# Enable SSL module
$ sudo a2enmod ssl
# Restart Apache
$ sudo service apache2 restart
# Create a directory to store the SSLCertificateFile and SSLCertificateKeyFile
$ mkdir /etc/apache2/ssl
# Generate the keys
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt
Generating a 2048 bit RSA private key
...................................+++
................................+++
writing new private key to '/etc/apache2/ssl/apache.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CA
State or Province Name (full name) [Some-State]:Ontario
Locality Name (eg, city) []:Ottawa
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Ronald Pringadi
Organizational Unit Name (eg, section) []:Engineering
Common Name (e.g. server FQDN or YOUR name) []:ronald-mint.com
Email Address []:webmaster@some-cool-website.com
# Edit your hosts file and add "127.0.0.1 some-cool-website.com"
$ gedit /etc/hosts
# Edit your sites-available ssl config
$ gedit /etc/apache2/sites-available/default-ssl.conf
# Make sure you add the following line under the email
ServerName some-cool-website:443
# Also replace
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
# Activte site
$ sudo a2ensite default-ssl
# Reload Apache
$ sudo service apache2 reload
Open your browser and point it to https://some-cool-website.com. The browser will prompt you that the website is using a self-sign certificate, and do you want to continue and accept that certificate. Answer yes and that’s all to it
function browse($url, $postData = null) {
$fields = '';
if(is_array($postData) && sizeof($postData) >= 1){
$fields = http_build_query($postData);
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
if($fields !=='') {
curl_setopt($ch, CURLOPT_POST, count($postData));
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_COOKIESESSION, true);
// Write cookie if needed .. also try: dirname(__FILE__) . '/cookie.txt';
curl_setopt($ch, CURLOPT_COOKIEJAR , '/tmp/cookie.txt');
// Read cookie if needed
curl_setopt($ch, CURLOPT_COOKIEFILE, '/tmp/cookie.txt');
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
Quick notes:
– imap is for when you are in insert mode
– map is when your are in command mode
Thus when you are in the insert mode, sometime you need to exit to the command mode first using the esc key.
The i is for going back to the inser mode. The cr key is the Enter key.
The script below will make vim to:
– Find and Replace when I hit F3
– Undo when I hit F9
– Saves when I hit F10
– Quit when I hit F12
– Prints a debugging statement for PHP when I press F8
– Also disables the REPLACE mode
""""""""""""""""""""""""""""""""""""""
" Quick commands using F keys
"""""""""""""""""""""""""""""""""""""""
:imap
:map
:imap
:map
:imap
:map
:imap
:map
:imap
:map
"""""""""""""""""""""""""""""""""""""""
" Disable REPLACE mode
"""""""""""""""""""""""""""""""""""""""
function s:ForbidReplace()
if v:insertmode isnot# 'i'
call feedkeys("\
endif
endfunction
augroup ForbidReplaceMode
autocmd!
autocmd InsertEnter * call s:ForbidReplace()
autocmd InsertChange * call s:ForbidReplace()
augroup END