text:
Archive for the 'software deployment' Category
I recently found myself in need of a portable install of the Jupyter notebook which made use of a portable install of R as the compute kernel. When you work in institutions that have locked-down managed Windows desktops, such portable installs can be a life-saver! This is particularly true when you are working with rapidly developing projects such as Jupyter and IRKernel.
It's not perfect but it works for the fairly modest requirements I had for it. Here are the steps I took to get it working.
Download and install Portable Python
I downloaded Portable Python 22.214.171.124 from http://portablepython.com/ and installed into a directory called Portable Python 22.214.171.124
Update IPython and install the extra modules we need
This version of Portable Python comes with a portable IPython instance but it is too old to support alternative kernels. As such, we need to install a newer version.
Open a cmd.exe command prompt and navigate to Portable Python 188.8.131.52\App\Scripts.
Enter the command
easy_install ipython.exe
You'll now find that you can launch the ipython.exe terminal from within this directory:
C:\Users\walkingrandomly\Desktop\Portable Python 126.96.36.199\App\Scripts>ipython Python 2.7.6 (default, Nov 10 2013, 19:24:18) [MSC v.1500 32 bit (Intel)] Type "copyright", "credits" or "license" for more information. IPython 3.1.0 -- An enhanced Interactive Python. ? -> Introduction and overview of IPython's features. %quickref -> Quick reference. help -> Python's own help system. object? -> Details about 'object', use 'object??' for extra details. In [1]: exit()
If you try to launch the notebook, however, you'll get error messages. This is because we haven't taken care of all the dependencies. Let's do that now. Ensuring you are still in the Portable Python 188.8.131.52\App\Scripts folder, execute the following commands.
easy_install pyzmq easy_install jinja2 easy_install tornado easy_install jsonschema
You should now be able to launch the notebook using
ipython notebook
Install portable R and IRKernel
- I downloaded Portable R 3.2 from http://sourceforge.net/projects/rportable/files/ and installed into a directory called R-Portable
- Move this directory into the Portable Python directory. It needs to go inside Portable Python 18.104.22.168\App (see this discussion to learn how I discovered that this location was the correct one)
- Launch the Portable R executable which should be at Portable Python 126.96.36.199\App\R-Portable\R-portable.exe and install the IRKernel packages by doing
install.packages(c("rzmq","repr","IRkernel","IRdisplay"), repos="http://irkernel.github.io/")
Install additional R packages
The version of Portable R I used didn't include various necessary packages. Here's how I fixed that.
- Launch the Portable R executable which should be at Portable Python 184.108.40.206\App\R-Portable\R-portable.exe and install the following packages
install.packages('digest') install.packages('uuid') install.packages('base64enc') install.packages('evaluate') install.packages('jsonlite')
Install the R kernel file
Create the directory structure Portable Python 18.104.22.168\App\share\jupyter\kernels\R_kernel
Create a file called kernel.json that contains the following
{"argv": ["R-Portable/App/R-Portable/bin/i386/R.exe","-e","IRkernel::main()", "--args","{connection_file}"], "display_name":"Portable R" }
This file needs to go in the R_kernel directory created earlier. Note that the kernel location specified in kernel.json uses Linux style forward slashes in the path rather than the backslashes that Windows users are used to. I found that this was necessary for the kernel to work –it was ignored by the notebook otherwise.
Finishing off
Everything created so far, including R, is in the folder Portable Python 2.7.6
I created a folder called PortableJupyter and put the Portable Python 2.7.6 folder inside it. I also created the folder PortableJupyter\notebooks to allow me to carry my notebooks around with the software that runs them.
There is a bug in Portable Python 188.8.131.52 relating to scripts like IPython.exe that have been installed using easy_install. In short, they stop working if you move the directory they're installed in – breaking portability somewhat! (Details here)
The workaround is to launch Ipython by running the script Portable Python 220.127.116.11\App\Scripts\ipython-script.py
I didn't want to bother with that so created a shortcut in my PortableJupyter folder called Launch notebook. The target of this shortcut was the following line
%windir%\system32\cmd.exe /c "cd notebooks && "%CD%/Portable Python 188.8.131.52/App\python.exe" "%CD%/Portable Python 188.8.131.52\App\Scripts\ipython-script.py" notebook"
This starts the notebook using the default web browser and puts you in the notebooks directory.
The pay off
My folder looks like this:
If I click on the Launch Notebook shortcut, I get a Jupyter session with 2 kernel options
I can choose the Portable R kernel and start using R in the notebook!
I follow a lot of software developers on twitter so I get to see a lot of opinions and comments about git. Here are a few of my recent favourites
Opinions on git
I find that git is a technology that polarizes people. They either love it or they hate it…often both at the same time.
I didn't know git would make make programming more addictive. Ups frequency of reward, via miniature accomplishments: commits.
— Alex Holcombe (@ceptional) November 12, 2014
Every time you write, "learn git" and follow this advice with "it's dead simple!" a kitten cries.
— Anja Boskovic (@damedebugger) November 7, 2014
tries to teach 2 lab groups "git & github" .. actually spends most of the time working on installing/setup. oh Twitter. Just hold me.
— Andrew MacDonald (@polesasunder) November 6, 2014
Git Tutorials
I find that I learn something new every time I read a different tutorial
http://t.co/0OLz7jeghF walkthrough git from internals to (hopefully) better beginners/intermediate usage. Feedback welcomed!
— mrchlblng (@marchelbling) November 12, 2014
[new post] 5 Simple Git Power Tools: http://t.co/bpwRzMJYkx pic.twitter.com/PnAvwW8mcQ
— Jon Reid (@qcoding) November 11, 2014
There's a new version of the Pro Git Book, and you can read it for free online http://t.co/LaIikATlk1
— Mike Hay (@Hay) November 7, 2014
Git tips and tricks
No matter how long you've used git, you can always learn a new trick or two.
duh! Didn't know about git clean -fdx to clean out gitignored files. I'd been using powershell cmd to del bin/obj & manually del pkg folder
— Julie Lerman (@julielerman) November 6, 2014
alias hadouken="git push origin master -f"
— Chris Oliver (@excid3) November 6, 2014
How to Git Pretty http://t.co/w0CbWYwvvr +@bobthecow pic.twitter.com/AADRNFpuC3
— Elijah Manor (@elijahmanor) November 5, 2014
Update: September 2014 – The notes in this blog post have been uploaded to github: https://github.com/mikecroucher/Windows_Scientific_Computing. The blog post will be kept as-is for posterity reasons. For the most up to date version of the notes, see the github version.
Some time in 2013, I helped out at a Software Carpentry event at The University of Bath. As with most software carpentry boot camps, one of the topics covered was shell scripting and the scripting language of choice was bash. As I wandered around the room, I asked the delegates which operating system they use for the majority of their research and the most popular answer, by far, was Windows.
This led me to wonder if we should teach using a native Windows solution rather than relying on bash?
A few years ago, this would be an insane proposition since the Windows command shell is very weak compared to bash. PowerShell, on the other hand, is modern, powerful and installed on all modern Windows operating systems by default.
My problem was that I didn't know PowerShell very well. So, I took the notes for the 2013 Bath shell scripting session – https://github.com/swcarpentry/boot-camps/tree/2013-07-bath/shell – and gave myself the exercise of converting them to PowerShell.
I got close to completing this exercise last summer but various things took higher priority and so the project languished. Rather than sit on the notes any longer, I've decided to just publish what I have so far in case they are useful to anyone.
You are free to use them with the following caveats
- This is not necessarily the right way to teach PowerShell. It is an experiment in converting some classroom-tested Linux based notes to PowerShell.
- If you use them, attribution would be nice. I am Mike Croucher, my site is www.walkingrandomly.com Details on how to contact me at http://www.walkingrandomly.com/?page_id=2055
- I have not yet tested these notes in a classroom situation
- These notes aren't finished yet
- These notes have been developed and tested on Windows 7. Behaviour may be different using different versions of Windows.
- These notes are given as they were left sometime in mid 2013. Some things may be out of date.
- I was learning PowerShell as I developed these notes. As such, I fully expect them to be full of mistakes. Corrections and improvements would be welcomed.
If anyone is interested in developing these notes into something that's classroom-ready, contact me.
The old Windows Command Shell
The traditional Windows command shell is a program called cmd.exe which can trace its roots all the way back to the old, pre-Windows DOS prompt.
You can launch this command shell as follows
- Hold down both the Windows button and the letter R to open the Run prompt
- Type cmd and press Enter or click OK
- You should see a window similar to the one below
The Windows command shell hasn't changed significantly for over twenty years and is relatively feature poor compared to more modern shells. For this reason, it is recommended that you use Windows PowerShell instead. Mention of cmd.exe is only included here since, despite its deficiencies, it is still widely in use
To launch PowerShell:
- Hold down both the Windows button and the letter R to open the Run prompt
- Type powershell and press Enter or click OK
- You should see a window similar to the one below
Note that although the header of the above window mentions v1.0, it could be a screenshot from either version 1.0 or version 2.0. This is a well-known bug. If you are using Windows 7 you will have version 2 at the minimum.
PowerShell versions
At the time of writing, PowerShell is at version 3. Ideally, you should at least have version 2.0 installed. To check version:
Major Minor Build Revision
----- ----- ----- --------
3 0 -1 -1
If this variable does not exist, you are probably using version 1.0 and should upgrade.
Version 3.0 is available at http://blogs.technet.com/b/heyscriptingguy/archive/2013/06/02/weekend-scripter-install-powershell-3-0-on-windows-7.aspx
# This is a comment in Powershell. It is not executed
Users of Bash will feel right at home at first since PowerShell appears to have the same set of commands
pwd #Path to current folder
ls #List directory
ls *.txt #Wild Card
ls *_hai*
ls -R #Recursive folder listing
ls . #List current folder
ls .. #List Parent folder
cd .. #Change current folder to parent. (Move up a folder)
cd ~ #Change current folder to your user directory.
mkdir myfolder #Create a folder
mkdir ~/myfolder
mv myfolder new_myfolder #rename myfolder to new_myfolder
rm -r new_myfolder #Delete new_myfolder if its empty
cat file # View file
more file # Page through file
cat file | select -first 3 # first N lines
cat file | select -last 2 # Last N lines
cp file1 file2 # Copy
cp *.txt directory
rm file.txt # Delete - no recycle bin.
rm -r directory # Recurse
Different command types in PowerShell: Aliases, Functions and Cmdlets
Many of the PowerShell 'commands' we've used so far are actually aliases to Powershell Cmdlets which have a Verb-Noun naming convention. We can discover what each command is an alias of using the get-alias cmdlet.
PS > get-alias ls
CommandType Name Definition
----------- ---- ----------
Alias ls Get-ChildItem
This shows that ls is an alias for the Cmdlet Get-ChildItem
A list of aliases for common Bash commands:
- cat (Get-Content)
- cd (Set-Location)
- ls (Get-ChildItem)
- pwd (Get-Location)
One reason why aliases were created is to make PowerShell a more familiar environment for users of other shells such as the old Windows cmd.exe or Linux's Bash environment and also to save on typing.
You can get a list of all aliases using get-alias on its own.
PS > get-alias
Finally, here's how you get all of the aliases for the Get-ChildItem cmdlet.
get-alias | where-object {$_.Definition -match "Get-Childitem"}
For more details on Powershell aliases, see Microsoft's documentation at http://technet.microsoft.com/en-us/library/ee692685.aspx
What type of command is mkdir?
The mkdir command looks like it might be an alias as well since it doesn't have the verb-noun naming convention of Cmdlets. Let's try to see which Cmdlet it might be an alias of:
PS > get-alias mkdir
Get-Alias : This command cannot find a matching alias because alias with name 'mkdir' do not exist.
At line:1 char:6
+ alias <<<< mkdir
+ CategoryInfo : ObjectNotFound: (mkdir:String) [Get-Alias], ItemNotFoundException
+ FullyQualifiedErrorId : ItemNotFoundException,Microsoft.PowerShell.Commands.GetAliasCommand
It turns out that mkdir isn't an alias at all but is actually yet another PowerShell command type, a function. We can see this by using the get-command Cmdlet
PS > get-command mkdir
CommandType Name Definition
----------- ---- ----------
Function mkdir ...
Application mkdir.exe C:\Program Files (x86)\Git\bin\mkdir.exe
Now we can clearly see that mkdir is a PowerShell function. The mkdir.exe is an Application which you'll only see if you installed git for windows as I have.
A Cmdlet (pronounced 'command-let') is a .NET class but you don't need to worry abut what this means until you get into advanced PowerShell usage. Just think of Cmdlets as the base type of PowerShell command. They are always named according to the convention verb-noun; for example Set-Location and Get-ChildItem.
Listing all Cmdlets
The following lists all Cmdlets
You can pipe this list to a pager
Get-Command | more
Getting help
You can get help on any PowerShell command using the -? switch. For example
ls -?
When you do this, you'll get help for the Get-ChildItem Cmdlet which would be confusing if you didn't know that ls is actually an alias for Get-ChildItem
Up arrow browses previous commands.
By default, PowerShell version 2 remembers the last 64 commands whereas PowerShell version 3 remembers 4096. This number is controlled by the $MaximumHistoryCount variable
PS > $MaximumHistoryCount #Display the current value
PS > $MaximumHistoryCount=150 #Change it to 150
PS > history #Display recent history using the alias version of the command
PS > get-history #Display recent history using the Cmdlet direct
Although it remembers more, PowerShell only shows the last 32 commands by default. To see a different number, use the count switch
PS > get-history -count 50
To run the Nth command in the history use Invoke-History
PS > invoke-history 7
Word count (and more) using Measure-Object
Linux has a command called wc that counts the number of lines and words in a file. Powershell has no such command but we can do something similar with the Measure-Object Cmdlet.
Say we want to count the number of lines, words and characters in the file foo.txt. The first step is to get the content of the file
get-content foo.txt # gets the content of foo.txt
Next, we pipe the result of the get-content Cmdlet to Measure-Object, requesting lines, words and characters
get-content foo.txt | measure-object -line -character -word
The measure-object Cmdlet can also count files
ls *.txt | measure-object #Counts number of .txt files in the current folder
When you execute the above command, a table of results will be returned:
Count : 3
Average :
Sum :
Maximum :
Minimum :
Property :
This is because the measure-object Cmdlet, like all PowerShell Cmdlets, actually returns an object and the above table is the textual representation of that object.
The fields in this table hint that measure-object can do a lot more than simply count things. For example, here we find some statistics concerning the file lengths found by the ls *.txt command
ls *.txt | measure-object -property length -minimum -maximum -sum -average
You may wonder exactly what type of object has been returned from measure-object and we can discover this by running the gettype() method of the returned object
(ls *.txt | measure-object).gettype()
Request just the name as follows
(ls *.txt | measure-object).gettype().Name
To find out what properties an object has, pass it to the get-member Cmdlet
#Return all member types
ls *.txt | get-member
#Return only Properties
ls *.txt | get-member -membertype property
Sometimes, you'll want to simply return the numerical value of an object's property and you do this using the select-object Cmdlet. Here we ask for just the Count property of the GenericMeasureInfo object returned by measure-object.
#Counts the number of *.txt files and returns just the numerical result
ls *.txt | measure-object | select-object -expand Count
Searching within files
The Unix world has grep, PowerShell has Select String. Try running the following on haiku.txt
Select-String the haiku.txt #Case insensitive by default, unlike grep
Select-String the haiku.txt -CaseSensitive #Behaves more like grep
Select-String day haiku.txt -CaseSensitive
Select-String is haiku.txt -CaseSensitive
Select-String 'it is' haiku.txt -Casesensitive
There is no direct equivalent to grep's -w switch.
grep -w is haiku.txt #exact match
However, you can get the same behaviour using the word boundary anchors, \b
Select-String \bis\b haiku.txt -casesensitive
Grep has a -v switch that shows all lines that do not match a pattern. Select-String makes use of the -notmatch switch.
BASH: grep -v "is" haiku.txxt
PS: select-string -notmatch "is" haiku.txt -CaseSensitive
Grep has an -r switch which stands for 'recursive'. The following will search through all files and subfolders of your current directory, looking for files that contain is
grep -r is *
Select-String has no direct equivalent to this. However, you can do the same thing by using get-childitem to get the list of files, piping the output to select-string
get-childitem * -recurse | select-string is
One difference between grep and Select-String is that the latter includes the filename and line number of each match.
grep the haiku.txt
Is not the true Tao, until
and the presence of absence:
Select-String the haiku.txt -CaseSensitive
haiku.txt:2:Is not the true Tao, until
haiku.txt:6:and the presence of absence:
To get the grep-like output, use the following
Select-String the haiku.txt -CaseSensitive | ForEach-Object {$_.Line}
Is not the true Tao, until
and the presence of absence:
To understand how this works, you first have to know that Select-String returns an array of MatchInfo objects when there is more than one match. To demonstrate this:
$mymatches = Select-String the haiku.txt -CaseSensitive #Put all matches in the variable 'mymatches'
$mymatches -is [Array] #query if 'match' is an array
So, mymatches is an array. We can see how many elements it has using the array's Count property
The type of elements in PowerShell arrays don't necessarily have to be the same. In this case, however, they are.
both of these give the output
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True False MatchInfo System.Object
If all you wanted was the name of the first object type, you'd do
Alternatively, we could have asked for each element's type using the For-Each-Object Cmdlet to loop over every object in the array.
$mymatches | Foreach-Object {$_.gettype().Name}
Where $_ is a special variable that effectively means 'current object' or 'The object currently being considered by Foreach-Object' if you want to be more verbose.
So, we know that we have an array of 2 MatchInfo objects in our variable mymatches. What does this mean? What properties do MatchInfo objects have? We can find out by piping one of them to the Get-Member Cmdlet.
$mymatches[0] | Get-Member
TypeName: Microsoft.PowerShell.Commands.MatchInfo
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
RelativePath Method string RelativePath(string directory)
ToString Method string ToString(), string ToString(string directory)
Context Property Microsoft.PowerShell.Commands.MatchInfoContext Context {get;se
Filename Property System.String Filename {get;}
IgnoreCase Property System.Boolean IgnoreCase {get;set;}
Line Property System.String Line {get;set;}
LineNumber Property System.Int32 LineNumber {get;set;}
Matches Property System.Text.RegularExpressions.Match[] Matches {get;set;}
Path Property System.String Path {get;set;}
Pattern Property System.String Pattern {get;set;}
Now we can see that each MatchInfo object has a Line property and it's reasonable to guess that this contains a Line containing a match. Taking a look:
Is not the true Tao, until
Bringing together everything we've seen so far, we pull out the Line property of each element in the array as follows
$mymatches | Foreach-Object {$_.Line}
Alternatively, we can ditch the $mymatches variable and pipe in the output of Select-String directly
Select-String the haiku.txt -CaseSensitive | ForEach-Object {$_.Line}
Is not the true Tao, until
and the presence of absence:
Regular expressions
select-string 's*is' haiku.txt # * Zero or more of preceding token
select-string 's+is' haiku.txt # + On or more of preceding token
select-string '.nd' haiku.txt # . Any token followed by 'nd'
select-string 'es' haiku.txt # matches 'es'
select-string 'es[ht]' haiku.txt # Exactly one of the characters listed
select-string 'es[^ht]' haiku.txt # Matches everything except h and t
select-string 'ex[
select-string '\bis\b' haiku.txt # \b word boundaries
Input and output redirection
> redirects output (AKA standard output). This works in both Bash and Powershell scripts. For example, in Bash we might do
grep -r not * > found_nots.txt
Drawing on what we've learned so far, you might write the PowerShell version of this command as
get-childitem *.txt -recurse | select-string not > found_nots.txt
However, if you do this, you will find that the script will run forever with the hard-disk chugging like crazy. If you've run the above command, CTRL and C will stop it. This is because Powershell is including the output file, found_nots.txt, in its input which leads to an infinite loop. To prevent this, we must explicitly exclude the output file from the get-childitem search
get-childitem *.txt -Exclude 'found_nots.txt' -recurse | select-string not > found_nots.txt
cat found_nots.txt
ls *.txt > txt_files.txt
cat txt_files.txt
In Linux,
< redirects input (AKA standard input). This does not work in PowerShell:
cat < haiku.txt
At line:1 char:5
+ cat < haiku.txt
+ ~
The '<' operator is reserved for future use.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : RedirectionNotSupported
The above is a forced use of < since one could simply do
cat haiku.txt
Recall that cat is an alias for get-content. The use of get-content is an idiom that gets around the lack an < operator. For example, instead of
foo < input.txt
One does
get-content input.txt | foo
Error messages are output on standard error
ls idontexist.txt > output.txt
cat output.txt #output.txt is empty
ls idontexist.txt 2> output.txt # 2 is standard error
ls haiku.txt 1> output.txt # 1 is standard output
ls haiku.txt,test_file.txt 2>&1 > output.txt # Combine the two streams.
Searching for files
# Find all
UNIX: find .
PS: get-childitem . -Recurse
PS: get-childitem . -Recurse | foreach-object {$_.FullName} #To give identical output as `find`
To save on typing, you can use the alias gci instead of get-childitem
# Directories only
UNIX: find . -type d
PS2: gci . -recurse | where { $_.PSIsContainer }
PS3: gci -recurse -Directory
If you have PowerShell 2, you can only use the long winded version. It's simpler in PowerShell 3. Similarly for searching for files only.
# Files only
UNIX: find . -type f
PS2: get-childitem -recurse | where { ! $_.PSIsContainer }
PS3: gci -recurse -File
With the Unix find command, you can specify the maximum and minimum search depths. There is no direct equivalent in PowerShell although you could write a function that will do this. Such a function can be found at http://windows-powershell-scripts.blogspot.co.uk/2009/08/unix-linux-find-equivalent-in.html although I have not tested this!
# Maximum depth of tree
UNIX: find . -maxdepth 2
PS : No direct equivalent
# Minimum depth of tree
UNIX: find . -mindepth 3
PS : No direct equivalent
You can also filter by name. Confusingly, PowerShell offers two ways of doing this. More details on the differences between these can be found at http://tfl09.blogspot.co.uk/2012/02/get-childitem-and-theinclude-and-filter.html
One key difference between find and get-childitem is that the latter is case-insenstive whereas find is case sensitive.
# Find by name
UNIX: find . -name '*.txt'
PS: gci -recurse -include *.txt
PS: gci -recurse -filter *.txt
#Find empty files
UNIX: find . -empty
PS: gci -recurse | where ($_.Length -eq 0) | Select FullName
#Create empty file
UNIX: touch emptyfile.txt
PS: new-item emptyfile.txt -type file
Command Substituion
In bash, you can execute a command using backticks and the result is substituted in place. i.e.
foo `bar`
The backticks are used as escape characters in PowerShell so you do the following instead
foo $(bar)
In both cases, the command bar is executed and result is substituted into the call to foo.
Power of the pipe
| is a pipe. Use the pipe to connect the output of one command to the input of another:
Count text files
ls -filter *.txt | measure
ls outputs a list of files,
measure inputs a list of files.
echo "Number of .txt files:"; ls -filter *.txt | measure | select -expand count
; equivalent to running two commands on separate lines.
Question: what does this do?
ls -name | select-string s | measure
Answer: counts the number of files with
s in their name.
history | select-string 'echo'
Power of well-defined modular components with well-defined interfaces,
- Bolt together to create powerful computational and data processing workflows.
- Good design principle applicable to programming – Python modules, C libraries, Java classes – modularity and reuse.
- "little pieces loosely joined" –
select-string= function to search for a command.
get-variable # See all variables
$MYFILE="data.txt" # Need quotes around strings
echo $MYFILE
echo "My file name is $MYFILE"
$num = 1 #Numbers don't need quotes
$num = $num+1 #Simple Arithmetic
$TEXT_FILES=get-childitem Save output of get-childitem
echo $TEXT_FILES
Variables only persist for the duration of the current PowerShell Session
Environment variables
Windows environment variables don't show up when you execute
get-variable; to list them all you do
get-childitem env: #Show all Windows Environment variables
echo $env:PATH #Show the contents of PATH
$env:Path = $env:Path + ";C:\YourApp\bin\" #temporarily add a folder to PATH
This modification to PATH will only last as long as the current session. It is possible to permanently modify the system PATH but this should only be done with extreme care and is not covered here.
PowerShell Profile
The PowerShell profile is a script that is executed whenever you launch a new session. Every user has their own profile. The location of your PowerShell profile is defined by the variable $profile
Open it with
notepad $profile
Add something to it such as
echo "Welcome to PowerShell. This is a message from your profile"
Restart PowerShell and you should see the message. You can use this profile to customise your PowerShell sessions. For example, if you have installed NotePad++, you might find adding the following function to your PowerShell Profile to be useful.
# Launch notepad++ using the npp command
function npp($file)
if ($file -eq $null)
& "C:\Program Files (x86)\Notepad++\notepad++.exe";
& "C:\Program Files (x86)\Notepad++\notepad++.exe" $file;
With this function in your profile, you can open Notepad++ with the command npp or npp(filename.txt)
$num = 1
if($num -eq 1)
write-host 'num equals 1'
if($word -eq "hello")
write-host 'The same'
By default, string tests are case insensitive
if($word -eq "HELLO")
write-host 'The same'
To force them to be case sensitive, add a
c to the operator:
if($word -ceq "HELLO")
write-host 'The Same. This won't be printed'
You can similarly be explicitly case insensitive by adding an
i. Although this is the the same behaviour as the undecorated operators and so might seem unnecessary, it shows your intent to the reader.
if($word -ieq "HELLO")
write-host 'The same'
Comparison Operators
-eq Equal to
-lt Less than
-gt Greater than
-ge Greater than or equal to
-le Less than or equal to
-ne Not equal to
Logical operators
-not Not
! Not
-or Or
-and And
PowerShell has several looping constructs. Here, I only consider two.
Allows you to run a block of code a set number of times.
for ($i=1; $i -le 5; $i=$i+1)
Write-Host $i
Do something with every element of a collection
foreach($item in $(ls *.txt)) {echo $item.Name}
foreach vs foreach-object
Shell scripts
- Save retyping.
- PowerShell scripts have the extension .ps1
- PowerShell scripts must be created with plain text editors such as Notepad or Notepad++. NEVER use Microsoft Word!
Here is a very simple script
notepad protein_filter.ps1 #Open the file
#A simple protein filter
$DATE = get-date
echo "Processing date: $DATE"
foreach($item in get-childitem *.pdb)
echo $item.Name
echo "Processing complete"
To run this just type the filename:
If you get an error message, it may be because your execution policy is set not to run scripts locally. Change this with the command
Set-ExecutionPolicy RemoteSigned #Allow local scripts to run. Needs to be run with admin privileges
protein_filter.ps1 #Run the script
Download files via command-line
Primary Care Trust Prescribing Data – April 2011 onwards
$path="$pwd\$file" #Path needs to be fully qualified. This puts it in the current folder
$url = "http://www.ic.nhs.uk/catalogue/PUB02342/$file"
$client = new-object System.Net.WebClient
$client.DownloadFile( $url, $path )
Windows file permissions are rather more complicated than those of Linux but most users won't need to worry about them in day to day use.
The call operator
It is sometimes convenient to construct strings that contain the full path to a PowerShell script we want to execute. For example:
$fullpath = "$pwd\myscript.ps1"
To actually run the script pointed to by this variable, you need to use the call operator &
& $fullpath #Runs myscript.ps1
You also need to do this if you try to call any script where the path contains spaces
"C:\Program Files\myscript.ps1" #Will just display the string literal
& "C:\Program Files\myscript.ps1" #Runs the script
Background Jobs
Consider the script counter.ps1
#counter.ps1: A simple, long running job to demonstrate background jobs
while ( $i -lt 200000 )
echo $i
This counts up to 200000 in user-defined steps.
./counter.ps1 > 1step.txt #Counts in steps of 1
./counter.ps1 -step 2 > 2step.txt #Counts in steps of 2
The script takes quite a while to complete and you cannot do anything else in your PowerShell session while it is working. Using the start-job Cmdlet, we can run counter.ps1 in the background
start-job -scriptblock { C:\Users\walkingrandomly\Dropbox\SSI_Windows\dir_full_of_files\some_directory\counter.ps1 > C:\Users\walkingrandomly\Dropbox\SSI_Windows\dir_full_of_files\some_directory\outcount1.txt }
Note that you have to use the full path to both the counter.ps1 script and the output file. You can see the status of the job with get-job
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
1 Job1 Running True localhost C:\Users\walkingrando...
Eventually, your job will complete
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
1 Job1 Completed False localhost C:\Users\walkingrando...
ls outcount* #Ensure that output file has been created
remove-job 1 #remove remnants of job 1 from the queue
get-job #Check that queue is empty
You can run as many simultaneous jobs as you like but it is best not to run too many or your computer will grind to a halt.
Here's an example that runs 5 counter.ps1 jobs concurrently
#Runs 5 instances of counter.ps1 in parallel
$scriptname = "counter.ps1"
$outputfileBase = "outfile"
$outputfileExt = ".txt"
$scriptPath = "$pwd\$scriptname"
for ($i=1; $i -le 5; $i++)
$outputfilePath = "$pwd\$outputfileBase" + $i + $outputfileExt
$command = "$scriptPath -step $i `> $outputfilePath"
$myScriptBlock = [scriptblock]::Create($command)
start-job -scriptblock $myScriptBlock
Run this as a demonstration
get-job #Keep running until all have completed
ls outfile*
more outfile5.txt
more outfile2.txt
$myjob=get-job 2 #Get info on job Id 2 and store in variable $myjob
$myjob.Command #Look at the command that comprised job 2
remove-job * #Remove all job remnants from the queue
get-job #Should be empty
TODO: Dealing with output, recieve-job
Secure Shell
There is no equivalent to the Linux commands ssh and sftp in PowerShell. The following free programs are recommended
- http://www.chiark.greenend.org.uk/~sgtatham/putty/ – PuTTY is a free implementation of Telnet and SSH for Windows and Unix platforms.
- http://winscp.net/eng/index.php – Free SFTP, SCP and FTP client for Windows.
- http://mobaxterm.mobatek.net/ – A more advanced terminal than PuTTY with a free 'personal edition' and a paid-for 'professional edition'
There are no direct PowerShell equivalents to zip, unzip, tar etc. There are
write-tar and
write-gzip cmdlets in the third party, free PowerShell Community Extensions but I have not investigated them yet.
Start-transcript Initializes a transcript file which records all subsequent input/Output. Use the following syntax:
Start-Transcript [[-path] FilePath] [-force] [-noClobber] [-append]
Stop-transcript Stops recording and finalizes the transcript.
start-transcript -path ./diary.txt
echo "Hello dear diary"
cat diary.txt
- Record commands typed, commands with lots of outputs, trial-and-error when building software.
- Send exact copy of command and error message to support.
- Turn into blog or tutorial.
Shell power
(Bentley, Knuth, McIlroy 1986) Programming pearls: a literate program Communications of the ACM, 29(6), pp471-483, June 1986. DOI: [10.1145/5948.315654].
Dr. Drang, More shell, less egg, December 4th, 2011.
Common words problem: read a text file, identify the N most frequently-occurring words, print out a sorted list of the words with their frequencies.
10 plus pages of Pascal … or … 1 line of shell
#BASH version
$ nano words.sh
tr -cs A-Za-z '\n' | tr A-Z a-z | sort | uniq -c | sort -rn | sed ${1}q
$ chmod +x words.sh
$ nano words.sh < README.md
$ nano words.sh < README.md 10
The PowerShell version is more complicated but still very short compared to the 10 pages of Pascal
$text=get-content $filename
$split = foreach($line in $text) {$line.tolower() -split "\W"}
$split | where-object{-not [string]::IsNullorEmpty($_)} | group -noelement | sort Count -Descending | select -first $num
count_words.sh README.md 10
"A wise engineering solution would produce, or better, exploit-reusable parts." – Doug McIlroy
- Software Carpentry's online Bash shell lectures.
- G. Wilson, D. A. Aruliah, C. T. Brown, N. P. Chue Hong, M. Davis, R. T. Guy, S. H. D. Haddock, K. Huff, I. M. Mitchell, M. Plumbley, B. Waugh, E. P. White, P. Wilson (2012) "Best Practices for Scientific Computing", arXiv:1210.0530 [cs.MS].
One of my favourite parts of my job at The University of Manchester is the code optimisation service that my team provides to researchers there. We take code written in languages such as MATLAB, Python, Mathematica and R and attempt (usually successfully) to make them go faster. It's sort of a cross between training and consultancy, is a lot of fun and we can help a relatively large number of people in a short time. It also turns out to be very useful to the researchers as some of my recent testimonials demonstrate.
Other researchers,however, need something more. They already have a nice piece of code with several users and a selection of papers. They also have a bucket-load of ideas about how to turn this nice code into something amazing. They have all this good stuff and yet they find that they are struggling to get their code to the next level. What these people need is some quality time with a team of research software engineers.
Enter the Software Sustainability Institute (SSI), an organisation that I have been fortunate enough to have a fellowship with throughout 2013. These guys are software-development ninjas, have extensive experience with working with academic researchers and, right now, they have an open call for projects. It's free to apply and, if your application is successful, all of their services will be provided for free. If you'd like an idea of the sort of projects they work on, take a look at the extensive list of past projects.
So, if you are a UK-based researcher who has a software problem, and no one else can help, maybe you can hire* the SSI team.
*for free!
Right now it's packaging season (not the official term!) at my university–a time of year when IT staff have to battle with silent installers, SCCM, MSI creation and Adminstudio in order to create the student desktop image for the next academic year. Packaging season makes me grouchy, it makes me work late and it makes me massively over-react to every minor installation issue caused by software vendors. Right now, however, I am not grouchy because of packaging season..I am grouchy because of concurrent network licensing (or floating licensing if you are Wikipedia).
I like network licenses…they make many aspects of my job easier but they the way they are implemented by some software vendors causes them to be a pain. Over the years, I've bothered many a support-desk with my network license tails of woe and thought that I would collate them all together in one blog post.
The more of these things your software does, the more pain you cause me and my colleagues.
1. You don't use standard FlexLM/FlexNet.
Like it or loathe it, FlexLM is used by the vast majority of software vendors out there. We run license servers that host dozens of FlexLM based applications and we have got the administration of these down to a fine art. In fact, we've replaced the vast majority of the process with a script. If an application uses FlexLM, system administration and license monitoring is bordering on the trivial for us now. The further you stray away from FlexLM, the more difficult our job becomes.
One thing guaranteed to ruin my day is a call from a vendor I've worked with for years who says 'Great news Mike, we're ditching FlexLM for our own, in house license system.' Fabulous! Rather than use our lovely, generic, one-size fits all scripts, we are going to have to do a load of extra work and testing just for you. I look forward to all the new and interesting bugs your system will generate.
2. You don't support redundant license servers.
The idea behind redundant license servers is this: Instead of your application relying on just one machine, it relies on three; only two of which have to be operational at any one time. This gives us resiliency and resiliency is a good thing when you are teaching a lab with 120 students in it.
I'll keep this simple. If you don't support redundant license servers, it means that you don't believe that your software is important. It tells me that you are just playing at being a big, grown up piece of software but you don't really think anyone will take you seriously.
3. You support redundant license servers but can't select them via the installer.
At install time, there is no option to give three severs. The user can only give one. You then expect the user to copy a pre-prepared license file that has details of all three servers as a post-installation step.
What usually happens here is that users give the primary license server, find that the application will launch and stop reading the installation instructions. At some point in the future, we take down the primary license server for maintenance and the vast majority of self-serve installations break!
4. You use the LM_LICENSE_FILE environment variable
The problem is, so does everyone else. We end up with a situation where the LM_LICENSE_FILE variable is pointing at several license servers and some client applications really don't like that. Be a good FlexLM citizen and use a vendor specific environment variable. For example, MATLAB uses MLM_LICENSE_FILE and I could give them a big hug just for that!
5. You 'helpfully' tell the user when the license is about to expire.
I've moaned about this before. 1000 users panicking and emailing the helpdesk…lovely! Bonus points are awarded if you don't allow any supported way of switching these warnings off.
6. Your new license doesn't support old clients.
This should speak for itself and happens more than I'd like. We can't upgrade the entire estate instantaneously and even if we could, we probably wouldn't want to. Some users, for one reason or another, cling to old versions of your software like grim death. They don't care that there is a new shiny version available, all they know is that I broke their application and they hate me for it.
When we discover that old versions of your application will stop working, it also delays roll out of the new version since we have to do a lot of user-communications and ensure that nothing mission-critical will stop working. This makes power-users of your application hate me because they want the new shiny version.
7. You don't have a silent installer.
Strictly speaking not a network license moan but closely related. We use network licensing because we deploy your software to lots of machines. When I say 'lots' I mean thousands. It turns out, however, that you don't support scripted installation (sometimes called 'silent installation' or 'unattended installation'). This means that your software is a lot more difficult to deploy than your competitor! I'm now a big fan of your competitor!
8. You have a silent installer but it's a bad one.
If I install manually, via point and click, I can configure every aspect of your application. Your silent installer, on the other hand, is just a /S switch that does a default install…no configuration possible. Bonus points for 'silent' installers that include pop-up dialogue boxes that can't be switched off.
While on the topic of silent installation, can I just ask that you directly support deployment by SCCM on Windows please? It will help with next year's packaging season big time!
From time to time I find myself having to write or modify windows batch files. Sometimes it might be better to use PowerShell, VBScript or Python but other times a simple batch script will do fine. As I've been writing these scripts, I've kept notes on how to do things for future reference. Here's a summary of these notes. They were written for my own personal use and I put them here for my own convenience but if you find them useful, or have any comments or corrections, that's great.
These notes were made for Windows 7 and may contain mistakes, please let me know if you spot any. If you use any of the information here, we agree that its not my fault if you break your Windows installation. No warranty and all that.
These notes are not meant to be a tutorial.
Comments in windows batch files start with REM. Some people use :: which is technically a label. Apparently using :: can result in faster script execution (See here and here). I've never checked.
REM This is a comment :: This is a comment too...but different. Might be faster.
If statements
If "%foo%"=="bar" ( REM Do stuff REM Do more stuff ) else ( REM Do different stuff )
Check for existence of file
if exist {insert file name here} ( rem file exists ) else ( rem file doesn't exist )
Or on a single line (if only a single action needs to occur):
if exist {insert file name here} {action}
for example, the following opens notepad for autoexec.bat, if the file exists:
if exist c:\autoexec.bat notepad c:\autoexec.bat
Echoing and piping output
To get a newline in echoed output, chain commands together with &&
echo hello && echo world
hello world
To pipe output to a file use > or >> The construct 2>&1 ensures that you get both standard output and standard error in your file
REM > Clobbers log.txt, overwriting anything you already have in it "C:\SomeProgram.exe" > C:\log.txt 2>&1 REM >> concatenates output of SomeProgram.exe to log.txt "C:\SomeProgram.exe" >> C:\log.txt 2>&1
Environment Variables
set and setx
- set – sets variable immediately in the current context only. So, variable will be lost when you close cmd.exe.
- setx – sets variable permanently but won't be valid until you start a new context (i.e. open a new cmd.exe)
List all environment variables defined in current session using the set command
To check if the environment variable FOO is defined
if defined FOO ( echo "FOO is defined and is set to %FOO%" )
To permanently set the system windows environment variable FOO, use setx /m
setx FOO /m "someValue"
To permanently unset the windows environment variable FOO, set it to an empty value
setx FOO ""
A reboot may be necessary. Strictly speaking this does not remove the variable since it will still be in the registry and will still be visible from Control Panel->System->Advanced System Settings->Environment variables. However, the variable will not be listed when you perform a set command and defined FOO will return false. To remove all trace of the variable, delete it from the registry.
Environment variables in the registry
On Windows 7:
- System environment variables are at HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
- User environment variables are at HKEY_CURRENT_USER\Environment
If you change environment variables using the registry, you will need to reboot for them to take effect.
This command will pause for 10 seconds
Killing an application
This command will kill the notepad.exe window with the title Readme.txt
taskkill /f /im notepad.exe /fi "WINDOWTITLE eq Readme.txt"
Time stamping
The variable %time% expands to the current time which leads you to do something like the following to create time stamps between the execution of commands.
echo %time% timeout /t 1 echo %time%
This works fine unless your code is in a block (i.e. surrounded by brackets), as it might be if it is part of an if-statement for example:
( echo %time% timeout /t 1 echo %time% )
If you do this, the echoed time will be identical in both cases because the %time% entries get parsed at the beginning of the code block. This is almost certainly not what you want.
Setlocal EnableDelayedExpansion ( echo !time! timeout /t 1 echo !time! )
Now we get the type of behaviour we expect.
Where is this script?
Sometimes your script will need to know where it is. Say test.bat is at C:\Users\mike\Desktop\test.bat and contains the following
set whereAmI=%~dp0
When you run test.bat, the variable whereAmI will contain C:\Users\mike\Desktop\
Details on %dp0 can be found at StackOverflow.
Variable substrings
This came from StackOverflow's Hidden features of Windows batch files which is a great resource. They've tightened up on what constitutes a 'valid question' these days and so great Q+A such as this won't be appearing there in future.
> set str=0123456789 > echo %str:~0,5% 01234 > echo %str:~-5,5% 56789 > echo %str:~3,-3% 3456


text:
For reasons I can't explain, the content marketing industry is scared to identify as a creative field. We all seem to actively avoid talking loudly and proudly about creativity and quality in our work. Some of us may secretly want to address it, but we're worried what superiors would think -- namely, that we don't care about conversions or growing the business. Meanwhile, others may dislike the act of creating content but are forced to do so in this modern era of marketing. These folks tend to seek shortcuts, use bottom-dollar outsourcing options, or over-optimize everything for cheap or incremental traffic gains.
So instead of addressing ideas like creativity and quality along with smart distribution, we by and large obsess over the marketing part alone. The only attempts to teach better production are the occasional look-books of examples, a pile of lists that state the obvious ("be helpful" or "lead with a story"), and of course, the pithy, tweetable-but-ultimately-meaningless guru statements like, "Inspire your audience to embark on an adventure with you!"
Why aren't we talking tangibly, practically, and frequently about improving our content creation abilities? These are things that can and should be examined, analyzed, discussed, taught, and improved. But a gap exists.
To understand what I mean, just think about the entire content marketing role in four very general stages: planning, production, distribution, and analysis, which then feeds back into your planning, and the cycle continues. Without debating semantics, which are stupid anyway, we can place everything we do into one of those buckets.
Now think about the industry. Almost EVERYONE talks about distribution and analysis, i.e., how to execute your marketing. SOME people talk about planning, which includes the documentation of strategy, editorial calendars, resource allocation, and so forth.
Practically NOBODY talks about production.
(But a 10-gallon-hat tip to Ann Handley and her war against mediocre writing. As a disclaimer, I have no affiliation other than admiration.)
This should all seem at least a little bit weird, no? Isn't content supposed to be, yanno, THE POINT? I don't know about you, but I'm not a huge believer in polishing turds or trying to force dud missiles to fly. And I just don't think that approach works anymore anyway.
It's far better to create well and promote well. Both. Together. Always.
Am I missing something?
Oh, right --
"But that's haaaard!"
The "create well" part is indeed hard, but we're not making it any easier by avoiding it.
After all, it's our proclivity to produce that makes this different from, say, programmatic banner ad buying. And I don't know about you, but I've talked to tons of folks in the industry -- including the now 800 members of Boston Content -- who were initially attracted to the word "content" in content marketing. They like to write and create stuff first, market stuff second. They're masters of the harder part and are now learning the marketing part, which by the way, can be taught more more swiftly than teaching good writing.
But instead of a wonderfully creative field, many of us see colleagues obsessing over shortcuts and exerting tons of energy to game the system, all while asking questions like "How many words should a How-To blog post be?" or "Does humor drive more conversions?"
So if nothing else, we all need more creative support and encouragement. The creatively inclined want an outlet and want to improve, while the creative-averse need a swift kick in the pants. Maybe their mentality works with more rigid, scientific types of advertising and marketing, but when it comes to content marketing, there's also a heavy degree of art.
We need to acknowledge that more.
If We Want to Improve, Where Do We Start?
Again, this isn't about the usual platitudes of "being helpful" or "telling great stories" or "taking risks" -- though all of that is worth accepting too.
No, this is about learning the real nuts and bolts of the creative process. Do we all know what a nut graf is and how and when to write one? Do we know how to manage a team using sprints? What kind of mixer works best for a two-person, face-to-face podcast? Are we adept at creating a pillar project before quickly generating a dozen more related works?
Said more bluntly, do we want to be masters over our own production powers or timid takers-of-shortcuts who will eventually crumble when the Big Kids from journalism show up?
(Trust me, they're coming in more droves given the state of many newspapers and media outlets. And compared to their abilities to produce and tell stories, it's like we're bringing water pistols to a tank fight.)
So, we need to push hard to shift our mentality. I think it starts with removing a small word from our vocabulary too: "just."
As former agency executive Andrew Teman once pointed out to me, our industry likes to say that the key to good modern marketing is to "just create great content." But that's dangerous and wildly short-sighted. What does that actually mean? Who can do that? Have we been trained? Are we all instantly equipped to create awesome stuff that others care about, simply by trying?
(And how many hypothetical, pleading questions do I need to use in one blog post????)
In other words, it's okay to acknowledge that this stuff is hard! We like to talk about it like it's easy. Anyone can blog -- so "just" blog. But if we sell tech solutions in content marketing, this leads to frustrated customers who eventually realize it ISN'T so easy. This in turn leads to higher churn and increased customer acquisition costs, which devalues our businesses on top of it all. I've seen it firsthand. (And lest you think I'm frolicking in the field meditating on creativity too much, let me remind you that I work in VC and plan to launch or work for a startup -- which would be my third -- in the next couple years. I love the business world. We just focus on the wrong stuff sometimes.)
This Matters NOW
One of the conclusions the good folks at Content Marketing Institute drew from their recent B2B research is that the industry is maturing. I'm a huge believer that the next major step forward in this maturation process is to give actual attention and resources to better production powers. Everybody rushed to adopt this stuff (blogging, social, etc.), then rushed to game the systems behind it, then rushed to the next thing (SlideShare, podcasting, etc.), then looked for more ways to game more systems.
Eventually, the only thing remaining, and the only thing that will help us grow an audience and produce better results for our businesses, will be to wind up where we should have started all along: creating better content.
...thanks for reading my rant, and here's to improving our creative skills from this point forward.

subset: commoncrawl


text:
14 November 2012 |Abu Dhabi, United Arab Emirates
Note: As of January 2014, REmap 2030 is now launched.
On 14 November, IRENA organised a workshop entitled "IRENA's global Renewable Energy Roadmap (REMAP 2030)", in IRENA Headquarters, Abu Dhabi. The workshop was the second in a series of REMAP workshops, the first being held on the 5th September in St. Julian's, Malta. REMAP 2030 explores different pathways and action items required to achieve the aspirational target of doubling the share of renewables in the global energy mix as defined under the UN Secretary-General Sustainable Energy for All (SE4ALL) initiative. Furthermore, the roadmap examines how renewable energy and renewable-energy enabling technologies could support SE4ALL's other objectives, of achieving universal access to modern energy services, and doubling the rate of energy efficiency improvements.
The aim of the workshop was to discuss IRENA's progress in the development of the roadmap, and to present the process and systems by which IRENA will be engaging Member Countries and other stakeholders in the further development of the roadmap. The morning sessions included a short presentation of the draft roadmap, and the modelling assumptions and key parameters that determine the outcomes of the different pathways. Participants were invited to critique and discuss the significance of these key parameters in their region, and compare the roadmap results with national projections and plans for renewable energy deployment.
The afternoon sessions discussed the proposed process by which IRENA is intending to develop the roadmap in collaboration with Member Countries. Countries were invited to provide comments and suggestions, and share their experience with similar processes. The results of the session are used to revise the draft roadmap to be presented to the IRENA General Assembly in January 2013.
Introduction to IRENA global Renewable Energy Roadmap 2030
Dolf Gielen, IRENA
IRENA's draft global Renewable Energy Roadmap 2030
Giorgio Simbolotti, ENEA
Developing REMAP 2030: Model assumptions and key parameters
Ruud Kempener, IRENA
Implementing REMAP 2030: From pathways to actions
Ruud Kempener, IRENA
Updating REMAP 2030: The role of country engagement
Ruud Kempener, IRENA
Global Renewable Energy Forum 2019: The Road to Carbon-neutrality
21 November 2019 |Bonn, Germany
GREF 2019 will focus on pathways towards carbon-neutrality by 2050, analysing the current status of...
IRENA FlexTool Training in Cuba
25 November 2019 |Havana, Cuba
The IRENA FlexTool training in Cuba will provide experts of the country with the technical knowledge...
Supporting the deployment of bankable renewable energy projects in the Caribbean
25 November 2019 |Santo Domingo, Dominican Republic
This regional workshop which will develop the capacities in the identification of barriers and...


text:
Get StartedComplete the short form below
to Contact a Nexel Medical physician
Hormones are integrated into nearly every biological process that our bodies perform; and some of them (humans have approximately 50 different types of hormones) are so complex that even medical researchers do not fully understand their functions. But most of the hormone testing that doctors have performed on their patients involves the four major hormones that are intertwined with the process of human aging: testosterone, estrogen, growth hormone, and progesterone.
At Nexel Medical, the type of medicine that our doctors have chosen to focus on is the diagnosis and treatment of adult-onset hormone imbalances. Virtually all of the hormone blood testing that we have performed on our patients is to detect the most commonly occurring of these disorders, which are testosterone deficiency and growth hormone deficiency. The blood panels our doctors utilize are specifically designed to accurately pinpoint the exact type of imbalance or deficiency that each of our patients has developed. Why is this so important? It's because in medical hormone replacement programs, doctors need to know that they are replacing only those particular hormone levels that require it in order to ensure effective and beneficial treatment to every patient. Patients will receive no health benefits whatsoever from treatment that is directed at hormone levels that are already adequate and in healthy balance.
So before any patient's medically prescribed hormone replacement process can get underway, the doctors at Nexel Medical are required to have the appropriate hormone testing panel performed on them. Whether a patient is male or female; is a younger, middle-aged or older adult; is in good health or in not so good health, these tests are the key to unlocking and identifying any adult's endocrine issues. We would like to help you to learn a little about the four main blood panels that our doctors rely on for that purpose, because if you are have been struggling with some of the symptoms of an adult-onset hormone deficiency of some type – possibly even more than one type – then you will need to have at least one of these blood panels performed before your condition can be accurately diagnosed.
These two panels are used to monitor the hormone levels of men and women who are within the age range that typically experiences age-related hormonal decline. It includes tests for measuring free and total testosterone levels, DHEA-Sulfate, and other key tests that can indicate imbalances in the hormones that are critical to maintaining both male and female vitality.
The Comprehensive Male Panel includes testosterone levels testing and growth hormone testing along with other tests that our doctors consider essential for monitoring certain key health and fitness factors pertinent to adult males. These are the comprehensive tests that are included for adult males:
The Comprehensive Female Panel has been customized to the specific wellness requirements of adult women. It includes many of the same tests used to detect hormonal imbalances and other critical health factors in men, but does not include those tests that are specific to males such as Prostate-Specific Ag and Homecysteine, Plasma. The comprehensive tests for adult females that included are:
In some cases, it will be appropriate for men and women patients to have these Initial Male and Female Panels performed in order for our doctors to evaluative their current essential hormone levels along with other critical health factors. Your Nexel Medical doctor will advise you on which panel, either comprehensive or initial, is recommended for you and will always explain why that recommendation is being made.
The Initial Male Panel includes the following tests and screenings:
The Initial Female Panel includes the following tests and screenings:
As adults enter mid-life and the years beyond, the importance of sustaining hormonal balance becomes a factor that is increasing critical to their health and longevity. So consequently it is essential to have the appropriate hormone testing performed by a knowledgeable and experienced hormone replacement therapy specialist whenever the symptomatic evidence in any patient's current health profile suggest that an endocrine disorder could be present.
At Nexel Medical, our doctors have a high level of expertise in evaluating and interpreting the results of these four blood panels that are considered to be the medical standards for diagnosing the development of certain key adult-onset hormone disorders. However, they are not the sole medical markers that doctors must consider before prescribing a patient's best course of remedial action. The other factors that our doctors carefully review in each patient are current physical condition and prior medical history, as well the specific symptoms that a patient has been experiencing and for how long.
During your initial contact with one of our clinical advisors at Nexel Medical, you can either choose to use it as an opportunity to gain additional information about any aspect of hormone replacement therapy that you would like to learn more about; or you can use it as the first essential step in getting your hormone deficiency related symptoms eliminated through the use of the appropriate treatment program. Either way, you will find that Nexel Medical is happy to serve as your personal resource center for all things related to sustaining your hormonal health throughout your entire adulthood.
One call to Nexel Medical is all that it takes to schedule your local hormone testing; you can then have it performed under the supervision of one of our experienced HRT doctors and the results of your testing will reveal what your body's endocrine system is lacking – as well as what it is not lacking. This is powerful information for any adult who cares about their long-term health to have, because it can determine how much wellness you retain and for how long.
Complete The Short Form Below To Contact a Nexel Medical Physician


text:
Last week I enjoyed being part of the British Craft Pavilion, part of the London Design Festival. It was a brilliant and busy four days, and despite my protests beforehand that I don't like London much anymore and that I'd rather stay at home, it was actually a lot of fun.
The event was curated by Hole & Corner magazine who put together a typically thoughtful and unique selection of makers. I was honoured to be included amongst other talented ceramicists including Linda Bloomfield, Dove Street Pottery, Pottery West and Kana. The joy of mixed craft events is that I also got to admire some very beautiful handcrafted knives, quilts and furniture.
The pavilion was housed at the Truman Brewery, which played host to several other London Design Fair events too. The building is a complete rabbit warren and I could not honestly tell you all the different events and people that were there. However Cold Press Gallery on the top floor, stood out for me as being insanely beautiful, as did the Craft Scotland showcase, which had some incredible textiles.
My somewhat homely display was a last minute decision. I used some old wooden pigeonholes and a table from home and piled them high with pottery. The side wall seemed a little empty so I hung some beetroot across it. I've always liked to reinforce the connection between pottery and food, but it seemed to bewilder many people. "Why beetroot?" they would ask while taking a photo. Why not? I shrugged. And what are all those people going to do with their pictures of beetroot anyway?


text:
The kids have returned to school today for another term of learning. If you are looking for a great way to entertain them on the weekends, look no further! Our latest show premiered over the holidays – 'Buzz's Fright Night' – this is our latest addition to the Custard's World universe.'Buzz's Fright Night' is showing Saturdays & Sundays at 11:00am & 2:00pm. Be sure to purchase your tickets online – just $25.35 each!
Join Custard, Kea, Buzz, Brianna and Jazz on a spooky adventure featuring ghosts, ghouls and inter-dimensional apparitions! When Dr Gloom's bumbling assistant, Colin, accidentally opens a vortex to another dimension, all sorts of silliness escapes into the Town of Doodle.
Scaring off ghosts with giggles, frightening away monsters with manic mayhem, Custard and friends take on wobbly wraiths, funny phantoms and silly spirits in a multimedia, pantomime-style family show, combining puppetry, performers, video and song!


text:
I am now 31 years of age, and although I think I look and feel a lot younger, I do wonder just how great it would have been if I had come to Korea much earlier. I contemplate just what a fantastic experience and opportunity it would have been for me when I had just left university. Don't get me wrong, going to teach in Korea is a fantastic experience at any age and I would thoroughly recommend it, but my gosh would it have been useful to know about at 21. This is my guide for graduates and anyone thinking of coming to Korea to teach. I think that you can infer from what I have written, that I can't understand why anyone wouldn't want to come.
There is a rather multi-faceted reason for me saying this, and I will break it up as follows;
There is a massive problem in the west at the moment with graduate unemployment. There are a few reasons for this, which range from rather pointless degrees to just simply not enough jobs. With this in mind I am amazed by the amount of friends I have that have never thought of teaching in Korea, Japan, China, or many other places around the world for that matter. At 28 years of age my reasons for coming to Korea were to fund further study and to be employed, as jobs were becoming more difficult to come by. Seems to me that times at the moment are even harder, and some reliable employment and experience would be a great idea. It is easy to get a job in Korea, all you need is a degree (not even a good one), a clean bill of health, and not be a criminal. If you tick all these boxes and can't find a decent job in your own country, what are you waiting for? It is a guaranteed job and you really don't need to be amazing at it to keep it and even extend it if you fancy staying for longer than a year. The only way of losing your job as an English teacher in Korea is if you do something considered criminal or if you want to go home. The only responsibility is showing up for lessons.
In 2001, when I left university, I had a very small student loan of about £3000. Not very much, but still enough to be annoying. Some of my friends, however, were up at around £15 000 and are still paying this back. Now student debt at the end of university is even higher. It's a huge amount that most people will spend a large proportion of their life paying off. For the average student upon leaving university, the money doesn't exactly come rolling in either, particularly in the current economic climate. If you are lucky enough to find a job, the pay is not usually too spellbinding. This is where Korea can save you. I think it is very possible to save £8000 in a year teaching in Korea, maybe more. You can comfortably live, go out to bars and restaurants, go travelling, and live the good life and still save about £6000 in one year. So spend one year in Korea and that's already a significant chunk of your student loan paid, stay for two or three years and if your student loan is not too great, you might be able to pay off the whole lot. If you're not interested in paying your student loan (or are lucky not to have one), many teachers have used the money for further study or even to travel the world or fund an adventure, small business, or other project. For example, a good friend of mine used his money, saved teaching in Korea, to fund a bicycle trip home to England from Korea. The trip took him about nine months and I think he still had some money left over! So teaching overseas must be one of the most sure-fire ways of making money immediately after leaving university, and this money can be used to fund a myriad of different opportunities to suit the person. Another good reason to come to Korea to teach!
The Experience
By this I don't just mean the experience of travelling to another country and experiencing a new culture, but also gaining valuable work experience. This is especially relevant if you are planning a career in the teaching profession, but also the work experience that you can get by teaching in Korea, can help improve many things from public speaking, organisation, responsibility, communication, and confidence. There is nothing like actually working to give you experience, this is something that many a university graduate is currently having trouble with in western countries. 'Everywhere is asking for experience, but I don't have it and I can't get a job to get the experience they require!' This is a complaint that I commonly here in my country of birth. Teaching in South Korea might not be a completely relevant position to your chosen career, but I guarantee that it is better than sitting on your backside without work. The large wedge in your back pocket at the end of it all can also buy some relevant experience with volunteer work if need be also. On top of the employment experience there really is a rich cultural experience to be had in a country that is about as far from ours in ways of thinking that there is in the civilised world. Even teachers that have come to Korea, and it's all been too much for them and they have quit early or just hated their year here, I am sure have learnt so much about themselves and have broadened their minds further to the world in general. I myself, out of the nearly two and a half years I have spent here so far, have not enjoyed much of it. I had a terrible start to my time here, and spent most of my first nine months wanting to go home. The following year I had the boss and job from hell, and hated much of that. Only now am I happy and settled in a job that I really like, and have no other problems. This is not the case for most teachers and I am sure they have a blast in there time here, right from day one. Most of my problems were due to my own personality and a large chunk of bad luck, but even through all these problems Korea was a fantastic experience, and I have never learned as much about myself or life in general from any other experience in my life. Period. Without any other advantage to coming to Korea, the vast experience you can gain from coming here, or any other Far-Eastern country, is something worth the trip on it's own.
Meeting People
Perhaps I am not the best person to comment on this one, as I am poor at getting myself out there and socialising with people. I hate drinking, bars, spending money, and coffee shops, which is a problem. So I feel like I don't meet enough people in general, but I do have a few good friends that I have met in my time here from a number of different countries. The point is that, in coming to Korea, you don't just meet Korean people but you can meet people from all over the English speaking world. Sometimes I think it's easy to take for granted the fact I have gone out hiking for the day with an American, a Canadian, a South African, an Australian, a Scotsman and an Irish woman. If you go to even a small city in Korea for a night out you can meet any number of different nationalities, all open to talking to you, because you are all in the same boat and doing the same job. You will meet lots of Koreans too, the women are usually much more open to being friends with you than the men, but it is always an interesting and different experience when you are socialising with them.
Time for Reflection
One of the hardest things in life is to figure out exactly what you want to achieve. What are your ambitions? What career do you want? On leaving university graduates may already know exactly what they want to do, but many don't. A job for a year in Korea will not only give all the above benefits, but will also give you the time to reflect on things and come up with a plan of action. There are very few worries in Korea, everything is easy, money is not a worry and accommodation and bills are zero hassle. It may also provide time away from your own country to get some perspective. The job also has few stresses and this all combined with the different ways of doing things you will see all around you will give you tremendous food for thought.
Although many students gain independence from their family through university itself, if graduates come to Korea after university they can get a true feeling of independence in a new and very real world. This can teach self-reliance and strength of character.
As I mentioned in an earlier blog, the food and health situation in Korea is much better than in our own countries. It is possible (with an open mind) to be introduced to healthier foods and living habits in Korea, which can last a lifetime. I know my own personal eating habits have changed significantly since living in Korea, and almost entirely for the better.
After a significant time spent in a country it is possible to really understand their culture and if you are very good, their language too. Far East culture and language is something of a mystery to most people in the west, but after your teaching experience in Korea, it won't be for you. Things are not always rosy in Korea and for some people they can be just plain difficult. But, if you can accept that difficult times will come and that you can learn as much if not more when times are hard, a huge wealth of knowledge and wisdom can be swept your way.
An Asian Travel HQ
Many of the people I have met in South Korea have used Korea as a base to be able to travel to other countries in Asia. Many work for a couple of years in Korea and travel to many countries during their vacations. (Note: if this is a priority reason for working in Korea you must work in a public school, private academies do not allow enough vacation). Many teachers just jump from one country to the next teaching English (e.g. Thailand, Korea, Japan, and China). I have to admit that this would have been an attractive option for me if I had not married a Korean woman. However, what strikes many foreigners when they first come to Korea is just how many people stay for longer than a year. I couldn't believe it when I first arrived, everyone I met had been in Korea for over 3 years, I really couldn't understand it. Once I returned home for a year I did understand the reason, and that is that life really is good in Korea. It is a nice life for many of the reasons I have already stated above. I am sure most people plan on just one year, but so many (including myself), stay for much longer.
This is an awfully long list, and an honest one. I can't promise that everyone will have a good time in Korea. Indeed many people are very negative in their time spent here, the culture differences can be too much for some people. But I think it is possible to promise a valuable experience and a learning experience, with a bonus of not being short of cash while you're at it.
There are some things that people shouldn't come to Korea for, however;
To meet a woman/find love
It is not unheard of for people to find love in Korea (I myself am an example), but it is certainly not common. Relationships with Korean men or women can get very complicated. Korean women are generally a little more conservative than in the west. It took a friend of mine a few months for a kiss, and for some girls sex before marriage is a definite no no, not on religious grounds but on purely cultural grounds. The men can have quite a chauvinistic attitude sometimes and this might be difficult to swallow for independent thinking western women. If you get past all the possible dating pitfalls, then you have to meet the family, which I promise you is a daunting task in many Korean families. Koreans have a natural cultural distrust of foreigners and many parents will not accept a foreigner into their families. I myself was lucky, but it was certainly not all plain sailing. There are also still some prejudices that exist in Korea about mixed race couples and you may find yourself open to some subtle abuse (outlined in a previous blog). Korea is not South East Asia, and although you may find that they (usually women) may have a facination with you, (particularly if you are white) this in most cases will not turn into a date or relationship. You will be called 'handsome' or 'pretty' more times than you will be able to remember (even if you are ugly), but I can assure you that this is unlikely to mean that it might be your lucky day.
To party hard and get drunk
Don't get me wrong you can certainly do this and many people do, but personally, I wish people that visit Korea would have a slightly better understanding of how their behaviour is perceived sometimes. Excessive drinking and bad behaviour is a charge that is regularly levelled at at foreign teachers in Korea, as many people see westerners behaving particularly badly when drunk in the evenings. The problem is especially prevalent in Seoul and bigger cities, but with the advent of more teachers in smaller cities and rural areas too, it is a problem that is spreading and Korean people really hate it and it tarnishes all of our reputations. To give an example of one of the few nights that I have been out and had a drink this year. One of my party decided to urinate outside the bar on the street, when the toilets were no more than 10 yards away, then proceeded to threaten some Korean passers-by who saw this and were upset. The same man I later learned then urinated out of a 17th floor apartment onto the street below. This stuff is not acceptable in any country but it is really unacceptable here, due to the cultural suspicion of foreigners in the first place. Drink responsibly and party hard, but have some awareness of what you are doing. Besides good tasting alcohol is rather expensive here anyway.
To run away from personal problems
If you are already in a negative frame of mind upon entering Korea, I can predict that you might have a few problems. Living in Korea is not easy sometimes, and if you are in the wrong frame of mind, the cultural stuff can really blow your mind. Many people get stuck in a negative mind-set, where it is difficult to enjoy yourself or learn anything. If cultural issues are bothering you, you must (for the moment at least) accept them as just different and unchangable. In our own countries we tend to think of issues of freedom and injustice as changable by anyone with passion and strong action. In Korea you will change nothing and you will especially change nothing by being angry and upset, they just won't give you a 'foreigner' a second thought, and they rarely do to Koreans either. You are going to have to accept it. Don't just put up with everything, though, do voice displeasure and greivance, but don't get too hung up about it all. Change will occur eventually, but recognise that it will only occur slowly, and maybe the change will be unrecognisable during your visit. These cultural problems are rarely that much of a big deal, however.
Unless graduates are walking into great jobs after university (which is not happening at the moment) I can't think of a better option than to head over to the Far East for a possibly life changing experience. You won't regret it and you might just discover who you really are, what life is about, and what you want to do with it while you're there.
A perspective of Korea and Australia, an honest East vs West opinion blog now from a new angle, viewing South Korea through the lens of having left and seeing Western culture differently on returning.
Saturday, March 17, 2012
University Graduates Listen! - Teach in Korea.
Posted by Smudger at 4:26 PM
Labels: Interesting Info
1 comment:
I couldn't agree with you more - at 29 I only wish I'd got into teaching as soon as I had finished uni. After a string of dead end jobs/unemployment I'm now travelling, earning cash and having an absolute blast. After 4 years of teaching around France I'll be heading to Daegu next month
Subscribe to: Post Comments (Atom)


text:
It's the start of nothing good.
I fired off a storm of raunchy text messages…to the wrong number.
And he replied.
Him: Show me a picture.
Him: Tell me your name.
Why does the lure of anonymity have me craving to indulge a stranger?
It's the start of everything right.
I received a slew of text messages…when everything in my life was wrong.
And she made me laugh again.
Her: You're probably a creeper.
Her: Possibly a stalker.
Why do I have the overwhelming need to find this stranger who saved me and make her mine?
Him: Take a chance with me.
Her: This is crazy.
Him: I need to see you.
Her: What are we doing?
Him: We're about to find out.
Her: PHOTO ATTACHED
Him: PHOTO ATTACHED
*****Patty's Review*****
{ARC Generously Provided by Authors}
"Who knew a wrong number could go oh-so-right?"
TEXT 2 LOVERS is the debut novel for the writing duo of K. Webster & J.D. Hollyfield and all I can say is that I hope this is the first of many to come. I love K. Webster's writing and I've always said she never ceases to impress me with her talent to write really terrific stories across many different tropes and romantic genres. I was only a little worried because I'm not all too familiar with J.D. Hollyfield's writing style, and to top it off I wasn't a big fan of the book cover. These two author's writing styles complimented each other completely. I fell madly in love with this wildly sexy and hysterically funny rom/com.
Dani aka "Buttercup" and Ramsay aka "Ram" meet through a series of scathing texts that Dani meant to send to her cheating ex-boyfriend but ended up sending to Ram when she entered the wrong number into her cell phone. Ram, who has a phenomenal sense of humor, ends up being intrigued by the woman who sent him the belligerent texts and soon ends up flirting with her. Once Dani learns she mistakenly sent the texts to the wrong person, she is immediately remorseful and mortified but eventually the two strike up a friendship that soon turns into a hell of a steamy connection. Their sexting gets off the charts HAWT and within a matter of days they end up meeting face to face because somehow the universe keeps throwing these two in each other's path. Luckily for the both of them, they're extremely attracted to each other physically and intellectually.
When they first began texting both Dani and Ram ha told a few lies about themselves to each other. Dani's lies were little ones while Ram's might have been a bit bigger and he wasn't exactly offering up the truth right away. I really didn't think they were a big deal. I understood his logic and how he was just ashamed to admit some truths to Dani. Ram is unemployed and living with his older brother but he's working on starting his own internet branding company. He had told Dani he worked in the marketing department within a huge corporation. He was unjustly terminated from his previous job for something highly embarrassing that he was framed for by his evil ex-girlfriend. These lies come back to bite Ram later on in the story.
Dani and Ram are perfect together and have out of this world sexual chemistry, they give us the panty melting steam. Ram's older brother Roman, and Dani's Bff Andie are the characters who give us the wildly hysterical moments throughout the story. I laughed so hard so many times that my belly was aching!!
Angst ensues when Ram gets caught up in lies more than once with Dani. Lies are one thing that she can't deal with because of her previous relationship.
I connected to this story almost immediately and practically devoured it. I loved the main characters and the amazing secondary characters as well. My heart ached for Ram when he winds up drowning in despair. I never thought less of him for his few lapses into depression. Having gone through some rough patches myself, I understood the sadness that overwhelmed him at times. When someone you love so desperately, leaves you, it's not so easy to go about life when you feel like your heart has been ripped from your chest.
Although there is some angst and some sadness, for the most part, the story is beyond funny! I HIGHLY recommend this one! You'll want to read it to prepare yourselves for the next book about the secondary characters, titled HATE 2 LOVERS!!
TEXT 2 LOVERS releases on January 24th!
Amazon: http://amzn.to/2jKmLHG
BN: http://bit.ly/2kkQoP4
Kobo: http://bit.ly/2iXcpXV
iBooks: http://apple.co/2jiYM3Z
*****Dee's Review*****
4 Sweet and Spicy Stars****
You can tell that authors K. Webster and J.D Hollyfield had a lot of fun writing this book because it translated flawlessly into the story. A hilarious plot and colorful characters made this book one hell of a great time, I loved it!
Dani is always a nice girl, that's just how her parents raised her. Now that she's an adult, being nice is not always a good thing, as people around her, and especially boyfriends are always walking all over her. Her latest boyfriend is no different; Dani just caught him with another woman and instead of confronting him, she just goes to a bar to forget about her sorrows with her best friend and a bottle of tequila. Once she's ingested a fair amount of liquid courage Dani decides to text her jerk ex and give him a real piece of her mind. After a slew of texts later, she realizes she's been texting the wrong person…
Ram is stuck in his life, things are just not going his way, and to make matters worse he is lacking creativity he desperately needs to finish his latest marketing project. Until… A random string of offensive texts starts pinging on his phone. Not only are these texts helping him spark the much-needed creativity, but are also making him very curious to know the person who's behind them.
Dani and Ram continue to text even after they clear the misunderstanding, they simply hit it off, and those texts quickly become their favorite part of the day. Fate will make sure these two meet, and when they do everything will become a beautiful disaster that we won't be able to get enough of.
This was one of those books that once you start, you can't stop. You will want to read it, devour it all because it's that much of a good time. You'll want to read it again, and buy it for other people as well. These two authors make a great team together and I cannot wait for the next book.


text:
Rise and Shine Crop Bra - Vibrant Dawn
Machine wash cold, air dry.
Rise and Shine Crop Bra - Twilight
Rise and Shine Crop Bra - Azure
Velocity Crop Bra - Azure/Slate
The Crop Bra has a higher neck to keep the girls in while you run, climb, are in downward facing dog or are picking up your kids and the stay-put crop length is ideal for activities that have you reaching for the sky. Mesh in the front and back keeps you from overheating and there is a hidden key pocket, too. Super quick dry fabric to keep you cool and dry.
Crop Bra - Fuchsia
Crop Bra - Twilight
Crop Bra - Mint
Vintage Rainbow Crop Bra - Slate
Crop Bra - Midnight
Vintage Rainbow Crop Bra - Dark Storm
Buy any pair of leggings and get any bra 50% off! Use code BetterTogether at checkout.
*offer codes may not be combined
You don't know what you got 'til it's gone. Lucky girl, there are still a few of these left.
Buy any tee or tank and get the second one 30% off. Use code TeesMe at checkout.
*offers may not be combined


text:
I Love You More than My Dog:
Five Decisions that Drive Extreme Customer Loyalty in Good Times and Bad.
Earn the Right to Grow and Prosper:
The 5 decisions that create beloved companies and drive explosive business growth.
Hundreds of businesses have customers who admire them, but only an elite few have true advocates— passionate, loyal, vocal fans—who rave about them to anyone who will listen.
Beloved companies create an indelible bond with customers. They become a part of their lives. Their devoted customers grow their business for them; telling everyone they know on twitter, Facebook, chat rooms and hundreds of websites every day that these companies are worthy of their business.
What is behind achieving beloved status? Two years of research led me to this: these companies earn the right to grow and prosper because of the anguish, thought and purpose that they put into decision making. The actions that come from their decisions set them apart. Beloved companies weave their humanity into every decision they make, connecting who they are as a people with the decisions they make in how in running their business. As a result, they earn not just loyal buyers, but passionate, vocal fans.
Why Jeanne Wrote I Love You More than My Dog
Five decisions comprise the backbone of how these companies conduct themselves in business. At a fork in the road when decisions are made, these five decisions informs and motivates their conduct, creating a seismic shift from mere business to beloved company.
Decision 1: Beloved Companies Decide to believe.
"We trust our customers. We trust those who serve them."
Beloved companies make the decision to believe, both in their customers and their employees. They suspend cynicism in their relationships, and as a result, they are freed from the extra rules, polices and layers of bureaucracy that create a barrier between them and their customers. Beloved companies understand that most people strive to do the right thing, and they decide to believe that this is also true for their customers and employees.
Decision 2: Beloved Companies Decide with clarity of purpose.
"We are clear about the purpose we serve in our customers' lives."
Beloved companies take the time to be clear about their unique promise for their customer's lives. Beloved companies realize that clarity of purpose guides choices and unites the organization. It elevates people's work from merely executing tasks to delivering experiences that customers will want to repeat and share with others. Businesses across every industry prosper when they decide with clarity of purpose and spread that clarity across the entire organization.
Decision 3: Beloved Companies Decide to be real.
"We are genuine, passionate and take the best version of ourselves to work."
Beloved companies break down barriers between customer and company, creating a relationship between people and revel in one another's foibles, quirks and spirit. It draws them to one another. Their humanity and authenticity is what sets beloved companies apart from all the others. They allow room for people to blend their personal instincts with their business decisions. Customers and employees gravitate to companies who decide to be real, who decide to drop the "corporate veneer" and to those that nurture the personality and spirit of their customers and employees.
Decision 4: Beloved Companies Decide to be there.
"We are in the scrimmage every day to build our operation from our customers' perspective."
This is about earning the right to grow, by being reliable, on your customers' terms. Beloved companies devote more resources and more plain old work to be there for their customers. They're in it every day to earn the right to a continued relationship with their customers. That's the first decision they make: to be there when the customer needs them, in the manner that they need them. This is your reliability litmus test. If your customers can't describe the consistent experience they receive from you to friends, colleagues and on social media, then you won't earn their social media raves or recommendation to others. You can't grow long term without the customer advocacy earned through experience reliability.
Decision 5: Beloved Companies Decide to say sorry.
"We are humble. We accept accountability. We will make it right."
Grace and wisdom guide the beloved companies to accept accountability when the chips are down, and when things don't go the way they planned. How a company reacts to mistakes reflects the humanity of the organization and shows its true colors more than almost any situation that might arrive. How you make your customer whole again will impact the long-term growth of your customer relationships. It is the intent and motivation that guide final outcomes when companies make mistakes that set people – and companies – apart.
How you steer your decisions and actions will impact your ability to earn the right to grow and prosper. You can earn your customers' business by deciding how you will run yours. With every order you ship, with every person you hire, with every product you develop you have the chance to tell your customers who you are and what you value. So make a choice. Decide what you want your story to be in the marketplace.
BUY THE BOOK: Amazon and Barnes and Noble


text:
this life is so cool!
It's a beautiful day! I'm so lucky. I spent most of last night on the line with my family in Vancouver! Life is funny! Or maybe the big guy has a great sense of humor! Just like that, I got a call and I'm dealing in VanCity! The irony of it all.
I'm packed and ready to go! Travel was never my bag as a wife! I was always absorbed with homemaking, parenting and wifing! Epic error!
#TranscendMia is growing by the second! I'm amazed at how the community I live in is focused on my ability to Coach and inspire! I'm honored. I'm gonna do my best to make you proud! The team we have formed is like family.
Yes, I'm unable to accept friends on FaceBook! I'm getting your messages but cannot open a new page! I wish I had the time but can barely keep up with the hundreds of messages daily! Thank you kindly. I'm lucky. Please feel free to follow me on Twitter and Instagram, I am equally active on those sites too!
If you wanna compete for Mr or Mrs South Miami, please contact me at firstname.lastname@example.com.
School starts soon and so does my role as Chair for Gulliver! Do you wanna participate in Gulliver events? Dumb question? Call me at 305-903-7160! Raider Mom for life!
Please come and shake my hand! I wanna meet you. No, I really do!
and if you don't know, now you know,


text:
I was recently reflecting and came to the conclusion that without the great high and low points in our lives we would probably wouldn't have the excuse to bond with our family & friends. And it is those moments in retrospect that we often relish as the most poignant - the most impactful.
We all look forward to 'happy' events & milestones - graduations, achievements, weddings, baby showers, housewarmings. However, we also, mixed in have our share of 'sad' life events as well. Both of these moments share the coming together of people. We try to put our differences aside and simply 'be' in each other's presence.
The point being that it isn't the just the in the happy moments that we come together and enjoy being around each other but it is in those moments of sorrow that sometimes we come even closer to one another. I was sitting at my breakfast table a few weeks back with my mom, mother-in-law and sister-in-law. We were having a home cooked meal in the middle of a work week & in the middle of the day. We laughed, shared stories and came closer to one another. I couldn't believe these women were here for me & that in a circumstance that otherwise would have been labeled as sad, I was so happy. My mind then snap, click, saved it as a moment of impact.
So maybe the next time you've gathered with loved ones for something challenging you must go through, you can choose to focus for a few moments on your priceless company & time...
Side note: I am excited to share a special post next week on a personal experience that I know some of you have been anticipating. Trust me, I am unnerved that I will be writing about it but I feel compelled to share the story so someone else may benefit from it.
Be Radiant,
~Dr. Dimpi