SlideShare uma empresa Scribd logo
1 de 58
Baixar para ler offline
#LinuxDay2016
http://lugroma3.org/
The Unbearable
Lightness
Extending the Bash shell
I have a natural revulsion to any operating system that
shows so little planning as to have named all of its
commands after digestive noises (awk, grep, fsck, nroff).
Source: The UNIX HATERS Handbook
Shellshocks
CVE-2014-6271
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
CVE-2014-7169
env X='() { (a)=>' bash -c "echo date"; cat echo
Weaknesses
http://mywiki.wooledge.org/BashWeaknesses
Speed
It's too big and too slow.
Source: man bash
Everything is text
egrep '^To:|^Cc:' /var/spool/mail/$USER | 
cut -c5- | 
awk '{ for (i = 1; i <= NF; i++) print $i }' | 
sed 's/,//g' | grep -v $USER | sort | uniq
Floating point
$ echo $((3/2))
1
Multidimensional
arrays
$ array=('d1=(v1 v2 v3)' 'd2=(v1 v2 v3)')
$ for elt in "${array[@]}";do eval $elt;done
$ echo "d1 ${#d1[@]} ${d1[@]}"
$ echo "d2 ${#d2[@]} ${d2[@]}"
Sorting
$ array=(2 1 0)
$ IFS=$'n' sorted=($(sort <<<"${array[*]}"))
$ unset IFS
$ echo ${sorted[*]}
0 1 2
Variable typing
$ declare -i x
$ x=foo
$ echo $x
0
Variable scope
Local vs Global vs Environment
Return values
Bash functions don't return anything (except numbers in the
range 0-255); they only produce output streams
Passing by
reference
function swap()
{
eval "$1=${!2} $2=${!1}"
}
$ x=a y=b
$ swap x y
b a
Function scope
$ shopt -s extdebug
$ function foo() { echo $qux ; echo ${BASH_ARGV[0]} ; }
$ function bar() { local qux=thud ; foo ; }
$bar baz
thud
baz
Function collapsing
chatter() {
if [[ $verbose ]]; then
chatter() {
echo "$@"
}
chatter "$@"
else
chatter() {
:
}
fi
}
No closures
No first-order functions, no lambdas, ...
Try/catch
trap
Exception handling
set -e
Process
management
select? poll? events?
Parsing
sed 
-ne "s|^($s):|1|" 
-e "s|^($s)($w)$s:$s["'](.*)["']$s$|1$fs2$fs3|p" 
-e "s|^($s)($w)$s:$s(.*)$s$|1$fs2$fs3|p"
Binary data
dd if=/dev/brain of=/dev/null
Paradigms
OO? Functional? Flow-driven? Reflective?
Security
Did you say dropping permissions?
Large programs
source foobar.sh
Debugging
set -x
Subshell Dilemma
$ c=0; ls * | while read i; do ((c++)); done; echo $c
0
Bashisms
eval x=$$x
Portability
It is easier to port a shell than a shell script.
Source: Larry Wall
Why does it
matter?
DRY
Don't write scripts, write libraries
DevOps
Python/Ruby/Scala/... are not ubiquitous
Legacy code
Attempts
bang.sh
the "b" namespace
bashinator
function createDirectory() {
local directory=${1}
if [[ -z "${directory}" ]]; then
__msg err "argument 1 (directory) missing"
return 2
fi
__msg debug "directory: ${directory}"
if ! mkdir -p "${directory}" >> "$_{L}" 2>&1; then
__msg err "failed to create directory '${directory}'"
return 2
fi
return 0
}
bash automated
testing system
@test "addition using bc" {
result="$(echo 2+2 | bc)"
[ "$result" -eq 4 ]
}
@test "addition using dc" {
result="$(echo 2 2+p | dc)"
[ "$result" -eq 4 ]
}
bash infinity
import util/namedParameters util/class
class:Human() {
public string name
public integer height
public array eaten
Human.__getter__() {
echo "I'm a human called $(this name), $(this height) cm tall."
}
...
}
bash manager
hello:
p1=World!
$ ./bash_manager.sh -h /tmp/helloHome
Hello World!
bash toolbox
alias fail='printf "${BASH_SOURCE##*/}: ${FU ...
alias debug='printf "${BASH_SOURCE##*/}: ${FU ...
alias caller='nm=$(builtin caller 0); nm=${nm% ...
bashworks
Inversion of control: the overall program's flow of control
is not dictated by the caller, but by the framework.
Polite functions: Generic reuseable functions usually take a
module name string argument.
blp
minimalist approach
log4sh
# set alternative 'nc' command
log4sh_setAlternative nc /bin/nc
# add and configure a SyslogAppender that logs to a remote host
logger_addAppender mySyslog
appender_setType mySyslog SyslogAppender
appender_syslog_setFacility mySyslog local4
appender_syslog_setHost mySyslog somehost
appender_activateOptions mySyslog
# say Hello to the world
logger_info 'Hello, world'
mbfl
mbfl_argv_all_files || 
exit_because_wrong_command_line_arguments
for item in "${ARGV[@]}"
do
test "${script_option_AUTO}" = yes && {
size=$(mbfl_file_get_size "${item}")
...
oobash
## class Dialog
Dialog=(
# Explicit definition is needed to make inheritance possible.
function __new__ = Dialog::__new__
function __delete__ = Dialog::__delete__
)
ticktick
. ticktick.sh
function printEmployees() {
for employee in ``people.Engineering.items()``; do
printf " - %sn" ${!employee}
done
}
Bashlets
Modular
source bashlet datatype/version
bash$$ version sort 1.44 1.4 1.4.4 1.4.4a 1.4-1234
Git integration
General-purpose
IPC, math, network, OS-abstraction, parsers, UX, ...
Extensible
Plugins for web protocols, databases, RCS, ...
Smart autoloading
Via introspection
Work in progress
Colophon
vim, Hovercraft!, CentOS Linux 7.2
exit 0
Roberto Reale
https://bashlets.sh
https://github.com/bashlets

Mais conteúdo relacionado

Mais procurados

Ansible for beginners ...?
Ansible for beginners ...?Ansible for beginners ...?
Ansible for beginners ...?shirou wakayama
 
Apache Hadoop for System Administrators
Apache Hadoop for System AdministratorsApache Hadoop for System Administrators
Apache Hadoop for System AdministratorsAllen Wittenauer
 
Bash Shell Scripting
Bash Shell ScriptingBash Shell Scripting
Bash Shell ScriptingRaghu nath
 
Beautiful Bash: Let's make reading and writing bash scripts fun again!
Beautiful Bash: Let's make reading and writing bash scripts fun again!Beautiful Bash: Let's make reading and writing bash scripts fun again!
Beautiful Bash: Let's make reading and writing bash scripts fun again!Aaron Zauner
 
Introduction to Bash Scripting, Zyxware Technologies, CSI Students Convention...
Introduction to Bash Scripting, Zyxware Technologies, CSI Students Convention...Introduction to Bash Scripting, Zyxware Technologies, CSI Students Convention...
Introduction to Bash Scripting, Zyxware Technologies, CSI Students Convention...Zyxware Technologies
 
Bash shell
Bash shellBash shell
Bash shellxylas121
 
2009 cluster user training
2009 cluster user training2009 cluster user training
2009 cluster user trainingChris Dwan
 
Go-Couchbase Golang Paris 2015/12/17
Go-Couchbase Golang Paris 2015/12/17Go-Couchbase Golang Paris 2015/12/17
Go-Couchbase Golang Paris 2015/12/17Edouard Buschini
 
Introduction to shell scripting
Introduction to shell scriptingIntroduction to shell scripting
Introduction to shell scriptingCorrado Santoro
 
Ansible - Swiss Army Knife Orchestration
Ansible - Swiss Army Knife OrchestrationAnsible - Swiss Army Knife Orchestration
Ansible - Swiss Army Knife Orchestrationbcoca
 
Using Ansible Dynamic Inventory with Amazon EC2
Using Ansible Dynamic Inventory with Amazon EC2Using Ansible Dynamic Inventory with Amazon EC2
Using Ansible Dynamic Inventory with Amazon EC2Brian Schott
 
DevSecCon Asia 2017: Guillaume Dedrie: A trip through the securitiy of devops...
DevSecCon Asia 2017: Guillaume Dedrie: A trip through the securitiy of devops...DevSecCon Asia 2017: Guillaume Dedrie: A trip through the securitiy of devops...
DevSecCon Asia 2017: Guillaume Dedrie: A trip through the securitiy of devops...DevSecCon
 
Ansible fest Presentation slides
Ansible fest Presentation slidesAnsible fest Presentation slides
Ansible fest Presentation slidesAaron Carey
 
Unix And Shell Scripting
Unix And Shell ScriptingUnix And Shell Scripting
Unix And Shell ScriptingJaibeer Malik
 
DevChatt 2010 - *nix Cmd Line Kung Foo
DevChatt 2010 - *nix Cmd Line Kung FooDevChatt 2010 - *nix Cmd Line Kung Foo
DevChatt 2010 - *nix Cmd Line Kung Foobrian_dailey
 
Ansible tips & tricks
Ansible tips & tricksAnsible tips & tricks
Ansible tips & tricksbcoca
 

Mais procurados (20)

Ansible for beginners ...?
Ansible for beginners ...?Ansible for beginners ...?
Ansible for beginners ...?
 
Apache Hadoop for System Administrators
Apache Hadoop for System AdministratorsApache Hadoop for System Administrators
Apache Hadoop for System Administrators
 
Bash Shell Scripting
Bash Shell ScriptingBash Shell Scripting
Bash Shell Scripting
 
Beautiful Bash: Let's make reading and writing bash scripts fun again!
Beautiful Bash: Let's make reading and writing bash scripts fun again!Beautiful Bash: Let's make reading and writing bash scripts fun again!
Beautiful Bash: Let's make reading and writing bash scripts fun again!
 
Shell scripting
Shell scriptingShell scripting
Shell scripting
 
Introduction to Bash Scripting, Zyxware Technologies, CSI Students Convention...
Introduction to Bash Scripting, Zyxware Technologies, CSI Students Convention...Introduction to Bash Scripting, Zyxware Technologies, CSI Students Convention...
Introduction to Bash Scripting, Zyxware Technologies, CSI Students Convention...
 
Bash shell
Bash shellBash shell
Bash shell
 
2009 cluster user training
2009 cluster user training2009 cluster user training
2009 cluster user training
 
Shell Scripting
Shell ScriptingShell Scripting
Shell Scripting
 
Go-Couchbase Golang Paris 2015/12/17
Go-Couchbase Golang Paris 2015/12/17Go-Couchbase Golang Paris 2015/12/17
Go-Couchbase Golang Paris 2015/12/17
 
Introduction to shell scripting
Introduction to shell scriptingIntroduction to shell scripting
Introduction to shell scripting
 
Ansible - Swiss Army Knife Orchestration
Ansible - Swiss Army Knife OrchestrationAnsible - Swiss Army Knife Orchestration
Ansible - Swiss Army Knife Orchestration
 
Comets notes
Comets notesComets notes
Comets notes
 
Shell scripting
Shell scriptingShell scripting
Shell scripting
 
Using Ansible Dynamic Inventory with Amazon EC2
Using Ansible Dynamic Inventory with Amazon EC2Using Ansible Dynamic Inventory with Amazon EC2
Using Ansible Dynamic Inventory with Amazon EC2
 
DevSecCon Asia 2017: Guillaume Dedrie: A trip through the securitiy of devops...
DevSecCon Asia 2017: Guillaume Dedrie: A trip through the securitiy of devops...DevSecCon Asia 2017: Guillaume Dedrie: A trip through the securitiy of devops...
DevSecCon Asia 2017: Guillaume Dedrie: A trip through the securitiy of devops...
 
Ansible fest Presentation slides
Ansible fest Presentation slidesAnsible fest Presentation slides
Ansible fest Presentation slides
 
Unix And Shell Scripting
Unix And Shell ScriptingUnix And Shell Scripting
Unix And Shell Scripting
 
DevChatt 2010 - *nix Cmd Line Kung Foo
DevChatt 2010 - *nix Cmd Line Kung FooDevChatt 2010 - *nix Cmd Line Kung Foo
DevChatt 2010 - *nix Cmd Line Kung Foo
 
Ansible tips & tricks
Ansible tips & tricksAnsible tips & tricks
Ansible tips & tricks
 

Semelhante a The Unbearable Lightness: Extending the Bash shell

Lets make better scripts
Lets make better scriptsLets make better scripts
Lets make better scriptsMichael Boelen
 
Jenkins pipeline -- Gentle Introduction
Jenkins pipeline -- Gentle IntroductionJenkins pipeline -- Gentle Introduction
Jenkins pipeline -- Gentle IntroductionRamanathan Muthaiah
 
Deploying Docker (Provisioning /w Docker + Chef/Puppet) - DevopsDaysPGH
Deploying Docker (Provisioning /w Docker + Chef/Puppet) - DevopsDaysPGHDeploying Docker (Provisioning /w Docker + Chef/Puppet) - DevopsDaysPGH
Deploying Docker (Provisioning /w Docker + Chef/Puppet) - DevopsDaysPGHErica Windisch
 
BASH Variables Part 1: Basic Interpolation
BASH Variables Part 1: Basic InterpolationBASH Variables Part 1: Basic Interpolation
BASH Variables Part 1: Basic InterpolationWorkhorse Computing
 
Unleash your inner console cowboy
Unleash your inner console cowboyUnleash your inner console cowboy
Unleash your inner console cowboyKenneth Geisshirt
 
Bash is not a second zone citizen programming language
Bash is not a second zone citizen programming languageBash is not a second zone citizen programming language
Bash is not a second zone citizen programming languageRené Ribaud
 
Linux Shell Scripting
Linux Shell ScriptingLinux Shell Scripting
Linux Shell ScriptingRaghu nath
 
10 tips for making Bash a sane programming language
10 tips for making Bash a sane programming language10 tips for making Bash a sane programming language
10 tips for making Bash a sane programming languageYaroslav Tkachenko
 
Discover Dart(lang) - Meetup 07/12/2016
Discover Dart(lang) - Meetup 07/12/2016Discover Dart(lang) - Meetup 07/12/2016
Discover Dart(lang) - Meetup 07/12/2016Stéphane Este-Gracias
 
One-Liners to Rule Them All
One-Liners to Rule Them AllOne-Liners to Rule Them All
One-Liners to Rule Them Allegypt
 
390aLecture05_12sp.ppt
390aLecture05_12sp.ppt390aLecture05_12sp.ppt
390aLecture05_12sp.pptmugeshmsd5
 
Get-Help: An intro to PowerShell and how to Use it for Evil
Get-Help: An intro to PowerShell and how to Use it for EvilGet-Help: An intro to PowerShell and how to Use it for Evil
Get-Help: An intro to PowerShell and how to Use it for Eviljaredhaight
 
Buildr In Action @devoxx france 2012
Buildr In Action @devoxx france 2012Buildr In Action @devoxx france 2012
Buildr In Action @devoxx france 2012alexismidon
 
JavaScript Growing Up
JavaScript Growing UpJavaScript Growing Up
JavaScript Growing UpDavid Padbury
 
Using ngx_lua in UPYUN
Using ngx_lua in UPYUNUsing ngx_lua in UPYUN
Using ngx_lua in UPYUNCong Zhang
 

Semelhante a The Unbearable Lightness: Extending the Bash shell (20)

Lets make better scripts
Lets make better scriptsLets make better scripts
Lets make better scripts
 
Jenkins pipeline -- Gentle Introduction
Jenkins pipeline -- Gentle IntroductionJenkins pipeline -- Gentle Introduction
Jenkins pipeline -- Gentle Introduction
 
Deploying Docker (Provisioning /w Docker + Chef/Puppet) - DevopsDaysPGH
Deploying Docker (Provisioning /w Docker + Chef/Puppet) - DevopsDaysPGHDeploying Docker (Provisioning /w Docker + Chef/Puppet) - DevopsDaysPGH
Deploying Docker (Provisioning /w Docker + Chef/Puppet) - DevopsDaysPGH
 
BASH Variables Part 1: Basic Interpolation
BASH Variables Part 1: Basic InterpolationBASH Variables Part 1: Basic Interpolation
BASH Variables Part 1: Basic Interpolation
 
Unleash your inner console cowboy
Unleash your inner console cowboyUnleash your inner console cowboy
Unleash your inner console cowboy
 
Bash is not a second zone citizen programming language
Bash is not a second zone citizen programming languageBash is not a second zone citizen programming language
Bash is not a second zone citizen programming language
 
Linux Shell Scripting
Linux Shell ScriptingLinux Shell Scripting
Linux Shell Scripting
 
10 tips for making Bash a sane programming language
10 tips for making Bash a sane programming language10 tips for making Bash a sane programming language
10 tips for making Bash a sane programming language
 
Discover Dart(lang) - Meetup 07/12/2016
Discover Dart(lang) - Meetup 07/12/2016Discover Dart(lang) - Meetup 07/12/2016
Discover Dart(lang) - Meetup 07/12/2016
 
Discover Dart - Meetup 15/02/2017
Discover Dart - Meetup 15/02/2017Discover Dart - Meetup 15/02/2017
Discover Dart - Meetup 15/02/2017
 
EC2
EC2EC2
EC2
 
One-Liners to Rule Them All
One-Liners to Rule Them AllOne-Liners to Rule Them All
One-Liners to Rule Them All
 
os lab assignment.pdf
os lab assignment.pdfos lab assignment.pdf
os lab assignment.pdf
 
Jenkins shared librar
Jenkins shared librarJenkins shared librar
Jenkins shared librar
 
Dtalk shell
Dtalk shellDtalk shell
Dtalk shell
 
390aLecture05_12sp.ppt
390aLecture05_12sp.ppt390aLecture05_12sp.ppt
390aLecture05_12sp.ppt
 
Get-Help: An intro to PowerShell and how to Use it for Evil
Get-Help: An intro to PowerShell and how to Use it for EvilGet-Help: An intro to PowerShell and how to Use it for Evil
Get-Help: An intro to PowerShell and how to Use it for Evil
 
Buildr In Action @devoxx france 2012
Buildr In Action @devoxx france 2012Buildr In Action @devoxx france 2012
Buildr In Action @devoxx france 2012
 
JavaScript Growing Up
JavaScript Growing UpJavaScript Growing Up
JavaScript Growing Up
 
Using ngx_lua in UPYUN
Using ngx_lua in UPYUNUsing ngx_lua in UPYUN
Using ngx_lua in UPYUN
 

Mais de Roberto Reale

eInvoicing adoption in Italy & CEF projects
eInvoicing adoption in Italy & CEF projectseInvoicing adoption in Italy & CEF projects
eInvoicing adoption in Italy & CEF projectsRoberto Reale
 
eProcurement governance: i nodi da sciogliere
eProcurement governance: i nodi da sciogliereeProcurement governance: i nodi da sciogliere
eProcurement governance: i nodi da sciogliereRoberto Reale
 
Governing Information Security
Governing Information SecurityGoverning Information Security
Governing Information SecurityRoberto Reale
 
Società Civile: diritto di accesso e sicurezza in rete
Società Civile: diritto di accesso e sicurezza in reteSocietà Civile: diritto di accesso e sicurezza in rete
Società Civile: diritto di accesso e sicurezza in reteRoberto Reale
 
Tecnologie emergenti: opportunità, sfide, governance
Tecnologie emergenti: opportunità, sfide, governanceTecnologie emergenti: opportunità, sfide, governance
Tecnologie emergenti: opportunità, sfide, governanceRoberto Reale
 
Blockchain for Business
Blockchain for BusinessBlockchain for Business
Blockchain for BusinessRoberto Reale
 
Politically correct. Sentiment analysis of Italian political texts
Politically correct. Sentiment analysis of Italian political textsPolitically correct. Sentiment analysis of Italian political texts
Politically correct. Sentiment analysis of Italian political textsRoberto Reale
 
Beyond relational: «neural» DBMS?
Beyond relational: «neural» DBMS?Beyond relational: «neural» DBMS?
Beyond relational: «neural» DBMS?Roberto Reale
 
La Strategia per la Crescita Digitale 2014-2020
La Strategia per la Crescita Digitale 2014-2020La Strategia per la Crescita Digitale 2014-2020
La Strategia per la Crescita Digitale 2014-2020Roberto Reale
 
Homo Digitalis: Metamorfosi dell'identità
Homo Digitalis: Metamorfosi dell'identitàHomo Digitalis: Metamorfosi dell'identità
Homo Digitalis: Metamorfosi dell'identitàRoberto Reale
 
The History of Technological Anxiety and the Future of Economic Growth: Is Th...
The History of Technological Anxiety and the Future of Economic Growth: Is Th...The History of Technological Anxiety and the Future of Economic Growth: Is Th...
The History of Technological Anxiety and the Future of Economic Growth: Is Th...Roberto Reale
 
All'ombra del Leviatano: Filesystem in Userspace
All'ombra del Leviatano: Filesystem in UserspaceAll'ombra del Leviatano: Filesystem in Userspace
All'ombra del Leviatano: Filesystem in UserspaceRoberto Reale
 
Fog and the City: an urbanist's perspective
Fog and the City: an urbanist's perspectiveFog and the City: an urbanist's perspective
Fog and the City: an urbanist's perspectiveRoberto Reale
 

Mais de Roberto Reale (13)

eInvoicing adoption in Italy & CEF projects
eInvoicing adoption in Italy & CEF projectseInvoicing adoption in Italy & CEF projects
eInvoicing adoption in Italy & CEF projects
 
eProcurement governance: i nodi da sciogliere
eProcurement governance: i nodi da sciogliereeProcurement governance: i nodi da sciogliere
eProcurement governance: i nodi da sciogliere
 
Governing Information Security
Governing Information SecurityGoverning Information Security
Governing Information Security
 
Società Civile: diritto di accesso e sicurezza in rete
Società Civile: diritto di accesso e sicurezza in reteSocietà Civile: diritto di accesso e sicurezza in rete
Società Civile: diritto di accesso e sicurezza in rete
 
Tecnologie emergenti: opportunità, sfide, governance
Tecnologie emergenti: opportunità, sfide, governanceTecnologie emergenti: opportunità, sfide, governance
Tecnologie emergenti: opportunità, sfide, governance
 
Blockchain for Business
Blockchain for BusinessBlockchain for Business
Blockchain for Business
 
Politically correct. Sentiment analysis of Italian political texts
Politically correct. Sentiment analysis of Italian political textsPolitically correct. Sentiment analysis of Italian political texts
Politically correct. Sentiment analysis of Italian political texts
 
Beyond relational: «neural» DBMS?
Beyond relational: «neural» DBMS?Beyond relational: «neural» DBMS?
Beyond relational: «neural» DBMS?
 
La Strategia per la Crescita Digitale 2014-2020
La Strategia per la Crescita Digitale 2014-2020La Strategia per la Crescita Digitale 2014-2020
La Strategia per la Crescita Digitale 2014-2020
 
Homo Digitalis: Metamorfosi dell'identità
Homo Digitalis: Metamorfosi dell'identitàHomo Digitalis: Metamorfosi dell'identità
Homo Digitalis: Metamorfosi dell'identità
 
The History of Technological Anxiety and the Future of Economic Growth: Is Th...
The History of Technological Anxiety and the Future of Economic Growth: Is Th...The History of Technological Anxiety and the Future of Economic Growth: Is Th...
The History of Technological Anxiety and the Future of Economic Growth: Is Th...
 
All'ombra del Leviatano: Filesystem in Userspace
All'ombra del Leviatano: Filesystem in UserspaceAll'ombra del Leviatano: Filesystem in Userspace
All'ombra del Leviatano: Filesystem in Userspace
 
Fog and the City: an urbanist's perspective
Fog and the City: an urbanist's perspectiveFog and the City: an urbanist's perspective
Fog and the City: an urbanist's perspective
 

Último

%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisamasabamasaba
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park masabamasaba
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdfPearlKirahMaeRagusta1
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park masabamasaba
 
Generic or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisionsGeneric or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisionsBert Jan Schrijver
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech studentsHimanshiGarg82
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnAmarnathKambale
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrandmasabamasaba
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfkalichargn70th171
 
SHRMPro HRMS Software Solutions Presentation
SHRMPro HRMS Software Solutions PresentationSHRMPro HRMS Software Solutions Presentation
SHRMPro HRMS Software Solutions PresentationShrmpro
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastPapp Krisztián
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Hararemasabamasaba
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...masabamasaba
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisamasabamasaba
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfonteinmasabamasaba
 
%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durban%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durbanmasabamasaba
 

Último (20)

%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
Generic or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisionsGeneric or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisions
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 
SHRMPro HRMS Software Solutions Presentation
SHRMPro HRMS Software Solutions PresentationSHRMPro HRMS Software Solutions Presentation
SHRMPro HRMS Software Solutions Presentation
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durban%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durban
 

The Unbearable Lightness: Extending the Bash shell