xmlstarlet sel -t -c “//YOUR_NODE_ELEMENT_TAG_NAME[@ATTRIBUTE_NAME=’ATTRIBUTE_VALUE’]” YOUR_XML_FILE.xml
Author: ronald
-
Bash Scripting templates
# ==========================
# 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" :mapi#This file was created on :r!date "+\%x" kJ put the line above to .vimrc
mapi#!/bin/bash
mapo#This file was created on :r!date "+\%x" kJ -
Python Sample Script
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-1if 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"]) -
Enabling SSH (https) for Apache 2 in Ubuntu/Mint/Possibly other Debian distro
# 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
-
PHP and CURL
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;
}
-
Customize your Vim editor using .vimrc
Quick notes:
– imap is for when you are in insert mode
– map is when your are in command modeThus 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:%s/search/replace/gc
:map:%s/search/replace/gc :imap
:u i
:map:u i :imap
:w! i
:map:w! i :imap
:q!
:map:q! :imap
error_log("\n".__FILE__ . ' ['. __LINE__. '] ' . __CLASS__.'::'.__FUNCTION__.'() D>'. print_r(, true));
:mapierror_log("\n".__FILE__ . ' ['. __LINE__. '] ' . __CLASS__.'::'.__FUNCTION__.'() D>'. print_r(, true)); """""""""""""""""""""""""""""""""""""""
" Disable REPLACE mode
"""""""""""""""""""""""""""""""""""""""
function s:ForbidReplace()
if v:insertmode isnot# 'i'
call feedkeys("\", "n")
endif
endfunction
augroup ForbidReplaceMode
autocmd!
autocmd InsertEnter * call s:ForbidReplace()
autocmd InsertChange * call s:ForbidReplace()
augroup END