<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Rubén Varela</title><link href="/" rel="alternate"/><link href="https://rubenvarela.com/feeds/all.atom.xml" rel="self"/><id>/</id><updated>2015-12-14T10:19:05-05:00</updated><entry><title>sftp - Basic commands</title><link href="/guides/sftp-basic-commands" rel="alternate"/><published>2015-12-14T10:19:05-05:00</published><updated>2015-12-14T10:19:05-05:00</updated><author><name>Rubén Varela</name></author><id>tag:None,2015-12-14:/guides/sftp-basic-commands</id><summary type="html">&lt;p&gt;Quick most used &lt;code&gt;sftp&lt;/code&gt; commands.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Connect via sftp to host:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;sftp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;user&lt;/span&gt;&lt;span class="nv"&gt;@host&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;example&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;After connecting, some of the basic and most used SFTP commands:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;ls&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;# list the content of the remote directory&lt;/span&gt;
&lt;span class="n"&gt;lls&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;# list the content of the local directory&lt;/span&gt;
&lt;span class="n"&gt;pwd&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;# print the current directory in the remote host&lt;/span&gt;
&lt;span class="n"&gt;lpwd&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;# print the current directory in the local host&lt;/span&gt;
&lt;span class="n"&gt;cd&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="c1"&gt;# change directory in the remote host&lt;/span&gt;
&lt;span class="n"&gt;lcd&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="c1"&gt;# change directory in the local host&lt;/span&gt;
&lt;span class="n"&gt;mkdir&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;# create a directory on the remote host&lt;/span&gt;
&lt;span class="n"&gt;lmkdir&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="c1"&gt;# create a directory in the local host&lt;/span&gt;
&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# Download *filename* into current local directory&lt;/span&gt;
&lt;span class="n"&gt;put&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# Upload into the current&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Quickly downloading a file:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;sftp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;user&lt;/span&gt;&lt;span class="nv"&gt;@host&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;example&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nl"&gt;com&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="k"&gt;path&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;file&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content><category term="guides"/><category term="sftp"/><category term="Linux"/><category term="OS X"/></entry><entry><title>Symlinks utility</title><link href="/guides/symlinks-utility" rel="alternate"/><published>2015-12-14T08:29:17-05:00</published><updated>2015-12-14T08:29:17-05:00</updated><author><name>Rubén Varela</name></author><id>tag:None,2015-12-14:/guides/symlinks-utility</id><summary type="html">&lt;p&gt;Identify broken symbolic links, symbolic links to other partitions, relative and absolute ones.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;a href="http://www.ibiblio.org/pub/Linux/utils/file/symlinks-1.4.tar.gz" title="Source for symlinks"&gt;&lt;em&gt;symlink&lt;/em&gt;&lt;/a&gt; is great for identifying different characteristics of symbolic links. It will list if a symbolic link is broken (dangling), if it's absolute or relative and if it's pointing to another partition. &lt;/p&gt;
&lt;p&gt;If you specify it, it will also remove broken/dangling symbolic links and/or change absolute links to relative ones.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;First, we compile it:&lt;/p&gt;
&lt;p&gt;OS X:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;curl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;O&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ibiblio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;org&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;pub&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Linux&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;utils&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;symlinks&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1.4&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tar&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gz&lt;/span&gt;
&lt;span class="n"&gt;tar&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;xzf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;symlinks&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1.4&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tar&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gz&lt;/span&gt;
&lt;span class="n"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;symlinks&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1.4&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CFLAGS&lt;/span&gt;&lt;span class="o"&gt;=-&lt;/span&gt;&lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;include&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;malloc&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;make&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;If you want, you can install it by running &lt;code&gt;make install&lt;/code&gt;. In this case, I need it to be part of a script, so I will leave it in this folder for now.&lt;/p&gt;
&lt;p&gt;If you run the binary without specifying anything, this is the output:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;V&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;M&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;symlink_test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;😎&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;𝛌&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~/&lt;/span&gt;&lt;span class="n"&gt;Downloads&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;symlinks&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1.4&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;symlinks&lt;/span&gt;
&lt;span class="n"&gt;symlinks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scan&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;change&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;symbolic&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;links&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;by&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Mark&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Lord&lt;/span&gt;

&lt;span class="n"&gt;Usage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;symlinks&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;cdorstv&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dirlist&lt;/span&gt;

&lt;span class="n"&gt;Flags&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;change&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;absolute&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;messy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;links&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;relative&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;delete&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dangling&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;links&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;warn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;about&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;links&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;across&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;systems&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;recurse&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;into&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;subdirs&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;shorten&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lengthy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;links&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;displayed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;only&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;when&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;specified&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;show&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;what&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;would&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;be&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;done&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;by&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;verbose&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;show&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;all&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;symlinks&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Now, this is how it works:&lt;/p&gt;
&lt;p&gt;I created 3 symbolic links:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;abc&lt;/strong&gt; is broken. It references something that doesn't exist.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ruben&lt;/strong&gt; is linking to my &lt;code&gt;$HOME&lt;/code&gt; directory in another partition.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;tmp&lt;/strong&gt; is linked to a folder in this partition.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is how you can use the utility:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;V&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;M&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;symlink_test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;😎&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;𝛌&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pwd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;P&lt;/span&gt;
&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Volumes&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;MiniDrive&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;symlink_test&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;V&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;M&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;symlink_test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;😎&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;𝛌&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ls&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;lhA&lt;/span&gt;
&lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;
&lt;span class="n"&gt;lrwxr&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;xr&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ruben&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;staff&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Dec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;08&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;27&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;abc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;abc&lt;/span&gt;
&lt;span class="n"&gt;lrwxr&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;xr&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ruben&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;staff&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Dec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;08&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;34&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ruben&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Users&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ruben&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;span class="n"&gt;lrwxr&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;xr&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ruben&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;staff&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;23&lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Dec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;08&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;35&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Volumes&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;MiniDrive&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;And this is the output you get without any parameters:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;V&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;M&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;symlink_test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;😎&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;𝛌&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~/&lt;/span&gt;&lt;span class="n"&gt;Downloads&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;symlinks&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1.4&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;symlinks&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;./&lt;/span&gt;
&lt;span class="n"&gt;dangling&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Volumes&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;MiniDrive&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;symlink_test&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;abc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;abc&lt;/span&gt;
&lt;span class="n"&gt;other_fs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Volumes&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;MiniDrive&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;symlink_test&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ruben&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Users&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ruben&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;span class="n"&gt;absolute&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Volumes&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;MiniDrive&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;symlink_test&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Volumes&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;MiniDrive&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;V&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;M&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;symlink_test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;😎&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;𝛌&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;You can easily redirect this to a file and &lt;em&gt;grep&lt;/em&gt;/sort based on what you need to find.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.ibiblio.org/pub/Linux/utils/file/symlinks-1.4.tar.gz" title="Source for symlinks"&gt;Symlinks source&lt;/a&gt;&lt;br&gt;
&lt;a href="http://www.ibiblio.org/pub/Linux/utils/file/symlinks.lsm" title="symlinks' linux software map"&gt;Symlinks software map&lt;/a&gt;&lt;/p&gt;</content><category term="guides"/><category term="Linux"/><category term="OS X"/><category term="symbolic links"/><category term="maintenance"/></entry><entry><title>Recovering tmux when it's socket was deleted</title><link href="/guides/recovering-tmux-when-its-socket-was-deleted" rel="alternate"/><published>2015-12-09T17:14:20-05:00</published><updated>2015-12-09T17:14:20-05:00</updated><author><name>Rubén Varela</name></author><id>tag:None,2015-12-09:/guides/recovering-tmux-when-its-socket-was-deleted</id><summary type="html">&lt;p&gt;Tmux usually creates it's socket under /tmp. If someone or a process cleans this periodically you might loose the ability to reconnect to your tmux sessions even though tmux is running.&lt;/p&gt;</summary><content type="html">&lt;p&gt;When you use tmux, it stores a socket so you can regain access to the detached sessions in the tmux server. These can be located in multiple places depending on your environment.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;First tmux checks if an absolute path is given via &lt;code&gt;-S&lt;/code&gt;. &lt;/li&gt;
&lt;li&gt;If not specified, it uses the flag &lt;code&gt;-L&lt;/code&gt; to name the socket. &lt;/li&gt;
&lt;li&gt;The location where this socket is created is defined by &lt;code&gt;$TMPDIR&lt;/code&gt; if set. &lt;/li&gt;
&lt;li&gt;If not, it will be created under &lt;code&gt;/tmp&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is all documented under &lt;a href="http://manpages.debian.org/cgi-bin/man.cgi?query=tmux&amp;amp;apropos=0&amp;amp;sektion=0&amp;amp;manpath=Debian+8+jessie&amp;amp;format=html&amp;amp;locale=en" title="Tmux's man page on debian.org."&gt;tmux's man page&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Reminds me of &lt;a href="http://manpages.debian.org/cgi-bin/man.cgi?query=mktemp&amp;amp;apropos=0&amp;amp;sektion=0&amp;amp;manpath=Debian+8+jessie&amp;amp;format=html&amp;amp;locale=en" title="mktemp's man page on debian.org."&gt;&lt;code&gt;mktemp&lt;/code&gt;&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Now, if &lt;code&gt;$TMPDIR&lt;/code&gt; isn't set, it will create the socket in &lt;code&gt;/tmp&lt;/code&gt;. Sometimes this folder is cleaned and you can loose access to your tmux server. If this happen, your process will still be running, but you simply won't be able to connect. &lt;/p&gt;
&lt;p&gt;If you run &lt;code&gt;tmux list-session&lt;/code&gt; you will receive an error message:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class="w"&gt; &lt;/span&gt;tmux&lt;span class="w"&gt; &lt;/span&gt;list-session
failed&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;connect&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;server:&lt;span class="w"&gt; &lt;/span&gt;Connection&lt;span class="w"&gt; &lt;/span&gt;refused
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;When you check &lt;code&gt;ps aux | grep -i tmux&lt;/code&gt; or &lt;code&gt;top&lt;/code&gt; or &lt;code&gt;htop&lt;/code&gt; you can definitely see that tmux is running. If you run &lt;code&gt;lsof -U&lt;/code&gt; you can also see the socket that tmux has open.&lt;/p&gt;
&lt;p&gt;Now, reading through tmux's man page, you can find the answer. Under &lt;code&gt;-L&lt;/code&gt; it says: &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If the socket is accidentally removed, the SIGUSR1 signal may be sent to the tmux server process to recreate it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Now, I also checked &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man1/tmux.1?query=tmux" title="Tmux's man page on OpenBSD.org."&gt;OpenBSD's man page&lt;/a&gt; and it adds a bit more of information:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If the socket is accidentally removed, the SIGUSR1 signal may be sent to the tmux server process to recreate it &lt;strong&gt;&lt;em&gt;(note that this will fail if any parent directories are missing).&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If it doesn't work, check the parent directories. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;So, solution. If you're only running one tmux server, you can do:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;killall -SIGUSR1 tmux
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;If you want to target a specific instance of tmux, you can use &lt;code&gt;kill&lt;/code&gt; and specify the process ID. &lt;/p&gt;
&lt;p&gt;If you want the numeric value, you can use &lt;code&gt;kill -l&lt;/code&gt; to get a list. In the machines I have access (OS X and Linux), this is 10, but I've checked references online for other OS' and it can change.&lt;/p&gt;</content><category term="guides"/><category term="tmux"/><category term="Linux"/><category term="Purdue"/></entry><entry><title>Installing latest siege from source</title><link href="/guides/20151118-installing_siege_from_source" rel="alternate"/><published>2015-11-18T17:36:30-05:00</published><updated>2015-11-18T17:36:30-05:00</updated><author><name>Rubén Varela</name></author><id>tag:None,2015-11-18:/guides/20151118-installing_siege_from_source</id><summary type="html">&lt;p&gt;These are instructions for installing the latest version of siege from source.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Siege is a utility for stress testing web applications and web servers. It's used to help expose vulnerabilities or failures that happen under stress.&lt;/p&gt;
&lt;p&gt;The instructions for installing siege from source aren't too dificult. Here I'll be installing it on my home folder in an folder named opt.&lt;/p&gt;
&lt;p&gt;In Debian/Ubuntu or other systems like it, you should install the package &lt;code&gt;build-essential&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt; sudo apt-get update &amp;amp;&amp;amp; sudo apt-get install build-essential
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;On OS X, you need the XCode Command Line Tools.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;xcode-select --install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Now to install it.&lt;/p&gt;
&lt;p&gt;If you want the latest version, you can just download it,&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;curl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;O&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;download&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;joedog&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;org&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;siege&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;siege&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;latest&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tar&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gz&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Now we extract it, &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;tar xf siege-latest.tar.gz
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;It will create a folder named &lt;code&gt;siege-x.y.z&lt;/code&gt;. In my case it's &lt;code&gt;siege-3.1.3&lt;/code&gt;. We now cd into this directory:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;cd siege-3.1.3
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Run configure with the --prefix we want.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;./configure --prefix $HOME/opt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Now we simply run make and make install&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;make
make install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;If you want to do it via Git:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Clone the repo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;git clone https://github.com/JoeDog/siege.git
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Change into the new siege folder&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;cd siege
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run the &lt;code&gt;bootstrap&lt;/code&gt; script.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;utils/bootstrap
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now we can run configure with a prefix:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;./configure&lt;span class="w"&gt; &lt;/span&gt;--prefix&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;${&lt;/span&gt;&lt;span class="n"&gt;HOME&lt;/span&gt;&lt;span class="cp"&gt;}&lt;/span&gt;/opt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now we can make siege&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;make
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;And now we install it:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;make install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;/li&gt;
&lt;/ol&gt;</content><category term="guides"/><category term="Linux"/><category term="siege"/></entry><entry><title>Installing latest git without sudo privileges</title><link href="/guides/20151118-installing_latest_git_without_sudo_privileges" rel="alternate"/><published>2015-11-18T14:19:35-05:00</published><updated>2015-11-18T14:19:35-05:00</updated><author><name>Rubén Varela</name></author><id>tag:None,2015-11-18:/guides/20151118-installing_latest_git_without_sudo_privileges</id><summary type="html">&lt;p&gt;A friend needed the latest version of Git. Here's how to install the latest version without sudo/root privileges.&lt;/p&gt;</summary><content type="html">&lt;p&gt;If you already have an previous version of Git installed, you can clone the latest version:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;git clone https://github.com/git/git.git
cd git
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Now, we can actually build &lt;code&gt;git&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;make
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;By default Git will be installed onto &lt;code&gt;~/bin&lt;/code&gt;. Now we install it.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;make install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;If the folder doesn't exist, it will be created. The only thing we need to do now is make sure that &lt;code&gt;~/bin&lt;/code&gt; exists in your &lt;code&gt;$PATH&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;echo $PATH
  /home/ruben/bin:/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;If it doesn't, you can add it.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;nano ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Replace nano with whichever editor you want.
At the end add:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=/&lt;/span&gt;&lt;span class="n"&gt;home&lt;/span&gt;&lt;span class="o"&gt;/&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;/&lt;/span&gt;&lt;span class="n"&gt;bin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;PATH&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;To exit nano&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;ctrl+o
ctrl+x
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you want to change where Git is installed to, for example, maybe &lt;code&gt;/home/ruben/opt&lt;/code&gt;, we can substitute the make step with:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;make prefix=/home/ruben/opt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Obviously replacing &lt;code&gt;ruben&lt;/code&gt; with your username. This should work for everyone:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;make&lt;span class="w"&gt; &lt;/span&gt;prefix=&lt;span class="cp"&gt;${&lt;/span&gt;&lt;span class="n"&gt;HOME&lt;/span&gt;&lt;span class="cp"&gt;}&lt;/span&gt;/opt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;For extra options, there's an &lt;code&gt;INSTALL&lt;/code&gt; inside the Git folder.&lt;/p&gt;</content><category term="guides"/><category term="Linux"/><category term="Git"/><category term="Purdue"/></entry><entry><title>Install Julia - Nightly version on Linux</title><link href="/guides/20151118-install_julia_nightly_on_linux" rel="alternate"/><published>2015-11-18T12:29:16-05:00</published><updated>2015-11-18T12:29:16-05:00</updated><author><name>Rubén Varela</name></author><id>tag:None,2015-11-18:/guides/20151118-install_julia_nightly_on_linux</id><summary type="html">&lt;p&gt;Install the latest nightly version of Julia on Linux&lt;/p&gt;</summary><content type="html">&lt;ol&gt;
&lt;li&gt;Clone the repo&lt;br&gt;
    git clone https://github.com/JuliaLang/julia.git&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Make sure your version of Git supports &lt;code&gt;--detach&lt;/code&gt;. If not, you'll run into &lt;a href="https://github.com/JuliaLang/julia/issues/10977"&gt;this issue&lt;/a&gt;    &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;cd julia
git checkout --detach
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;If it does support &lt;code&gt;--detach&lt;/code&gt;, keep going. If not, upgrade Git. &lt;a href="/guides/20151118-installing_latest_git_without_sudo_privileges"&gt;Check this guide on how to do it without privileges&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now we run make.    &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;make
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;We can use &lt;code&gt;-j X&lt;/code&gt; where &lt;strong&gt;X&lt;/strong&gt; is a number (number of cores for example) to specify how many commands &lt;code&gt;make&lt;/code&gt; can run simultaneously. If we specify &lt;code&gt;-j&lt;/code&gt; without a number, &lt;code&gt;make&lt;/code&gt; will not limit the amount of processes that can run simultaneously.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Everytime I've tried to build Julia, I've gotten an error towards the end. The last time the error was:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;\033[33;1m*** Clean the OpenBLAS build with &amp;#39;make -C deps clean-openblas&amp;#39;. Rebuild with &amp;#39;make OPENBLAS_USE_THREAD=0 if OpenBLAS had trouble linking libpthread.so, and with &amp;#39;make OPENBLAS_TARGET_ARCH=NEHALEM&amp;#39; if there were errors building SandyBridge support. Both these options can also be used simultaneously. ***\033[0m
Makefile:1131: recipe for target &amp;#39;build/openblas/libopenblas64_.so&amp;#39; failed
make[1]: *** [build/openblas/libopenblas64_.so] Error 1
Makefile:78: recipe for target &amp;#39;julia-deps&amp;#39; failed
make: *** [julia-deps] Error 2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The good thing is Julia is very well built. Doing what it says, has always worked for me. In this case:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;make -C deps clean-openblas
make OPENBLAS_USE_THREAD=0 OPENBLAS_TARGET_ARCH=NEHALEM
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Remember to add &lt;code&gt;-j X&lt;/code&gt; if you want.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Once this finishes, there will be a binary named &lt;code&gt;julia&lt;/code&gt; in this folder.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;Now you can create a symbolic link in any folder that is specified in your &lt;code&gt;$PATH&lt;/code&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;echo $PATH
  /home/ruben/bin:/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;In this case, I'll create the symbolic link under &lt;code&gt;/home/ruben/bin&lt;/code&gt; which is defined already.
    mkdir $HOME/bin
    ln -s $(pwd)/julia ${HOME}/bin
Since I don't know where you put the julia folder we cloned using Git. &lt;code&gt;$(pwd)&lt;/code&gt; will give us that path (the path of the current folder to be more specific). And since I don't know the username you use, &lt;code&gt;${HOME}&lt;/code&gt; will give us that.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Optional&lt;/strong&gt;: If for some reason &lt;code&gt;/home/&amp;lt;username&amp;gt;/bin&lt;/code&gt; is not defined and you don't have access to write to any of the other folders, you can always add that to the &lt;code&gt;$PATH&lt;/code&gt; variable.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;nano&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~/.&lt;/span&gt;&lt;span class="n"&gt;bashrc&lt;/span&gt;

&lt;span class="n"&gt;Replace&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nano&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;whichever&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;editor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;you&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;want&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;At&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=/&lt;/span&gt;&lt;span class="n"&gt;home&lt;/span&gt;&lt;span class="o"&gt;/&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;/&lt;/span&gt;&lt;span class="n"&gt;bin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;PATH&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;To&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;exit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nano&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ctrl&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ctrl&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content><category term="guides"/><category term="Julia"/><category term="Purdue"/><category term="Linux"/></entry><entry><title>Access service on remote server (forward port to local machine)</title><link href="/guides/20151117-access_service_on_remote_server_-_forward_port_to_local_machine" rel="alternate"/><published>2015-11-17T11:05:53-05:00</published><updated>2015-11-17T11:05:53-05:00</updated><author><name>Rubén Varela</name></author><id>tag:None,2015-11-17:/guides/20151117-access_service_on_remote_server_-_forward_port_to_local_machine</id><summary type="html">&lt;p&gt;An oldie but still useful. How to forward a remote port to a local machine. Useful to access a service only available in the remote machine.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Remote Port we want forwarded&lt;/td&gt;
&lt;td&gt;11138&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Local Port where we want it to be accessible&lt;/td&gt;
&lt;td&gt;11139&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Server hosting the service at 11138&lt;/td&gt;
&lt;td&gt;remote.example.com&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;ssh -L 11139:localhost:11138 remote.example.com
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The good thing about this is that the connection is secured/encrypted by SSH. Sometimes we can have a development server or a service that doesn't support encryption and we need to access it securely. Having the service only listen to local connections doesn't expose it to the internet and with something like the code above, we can access it securely from another computer.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Background&lt;/strong&gt;: Talking with some graduate friends at Purdue a few months ago this came up. They needed help accessing their research on a remote server securely. This was a quick solution I gave them.&lt;/p&gt;</content><category term="guides"/><category term="SSH"/><category term="Linux"/></entry><entry><title>Check for broken links on a site</title><link href="/guides/20150803-check_for_broken_links" rel="alternate"/><published>2015-08-03T00:00:00-04:00</published><updated>2015-10-22T00:00:00-04:00</updated><author><name>Rubén Varela</name></author><id>tag:None,2015-08-03:/guides/20150803-check_for_broken_links</id><summary type="html">Check a website for broken links.</summary><content type="html">
&lt;div class="ipynb"&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;h2 id="Crawl-rubenvarela.com"&gt;Crawl rubenvarela.com&lt;a class="anchor-link" href="#Crawl-rubenvarela.com"&gt;¶&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Get all results, even if okay (&lt;code&gt;--verbose&lt;/code&gt;)&lt;br /&gt;
By default it will only return values that are errors or warnings.&lt;br /&gt;
You can omit the &lt;code&gt;--verbose&lt;/code&gt; argument if you want.&lt;/li&gt;
&lt;li&gt;Store the results in XML format, &lt;code&gt;linkchecker-out.xml&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [141]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
&lt;div class="input_area"&gt;
&lt;div class="highlight hl-ipython2"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;linkchecker&lt;span class="w"&gt; &lt;/span&gt;-F&lt;span class="w"&gt; &lt;/span&gt;xml&lt;span class="w"&gt; &lt;/span&gt;http://rubenvarela.com&lt;span class="w"&gt; &lt;/span&gt;--check-extern&lt;span class="w"&gt; &lt;/span&gt;--verbose
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;
&lt;div class="output_area"&gt;
&lt;div class="prompt"&gt;&lt;/div&gt;
&lt;div class="output_subarea output_stream output_stdout output_text"&gt;
&lt;pre&gt;30 threads active,     0 links queued,    4 links in   1 URL checked, runtime 1 seconds
30 threads active,    10 links queued,    7 links in   4 URLs checked, runtime 6 seconds
30 threads active,   124 links queued,  306 links in  39 URLs checked, runtime 11 seconds
30 threads active,    97 links queued,  333 links in  47 URLs checked, runtime 16 seconds
30 threads active,    59 links queued,  371 links in  60 URLs checked, runtime 21 seconds
30 threads active,    28 links queued,  402 links in  67 URLs checked, runtime 26 seconds
28 threads active,     0 links queued,  432 links in  75 URLs checked, runtime 31 seconds
13 threads active,     0 links queued,  447 links in  81 URLs checked, runtime 36 seconds
 0 threads active,     0 links queued,  460 links in  87 URLs checked, runtime 41 seconds
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [142]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
&lt;div class="input_area"&gt;
&lt;div class="highlight hl-ipython2"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;xmltodict&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;random&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;sample&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;randSample&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [143]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
&lt;div class="input_area"&gt;
&lt;div class="highlight hl-ipython2"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'linkchecker-out.xml'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; 
  &lt;span class="n"&gt;obj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;xmltodict&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;ul&gt;
&lt;li&gt;Explore the object.&lt;ul&gt;
&lt;li&gt;Get the main element and see it's content.&lt;/li&gt;
&lt;li&gt;Get 5 random elements and print them in order to see the objects.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [144]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
&lt;div class="input_area"&gt;
&lt;div class="highlight hl-ipython2"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'linkchecker'&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;

&lt;span class="c1"&gt;# print type(obj['linkchecker'])&lt;/span&gt;
&lt;span class="c1"&gt;# print obj['linkchecker']['@created']&lt;/span&gt;
&lt;span class="c1"&gt;# print type(obj['linkchecker']['urldata'])&lt;/span&gt;

&lt;span class="n"&gt;randset&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;randSample&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'linkchecker'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;'urldata'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;randset&lt;/span&gt;

&lt;span class="c1"&gt;# print obj['linkchecker']['urldata'][0]&lt;/span&gt;
&lt;span class="c1"&gt;# print obj['linkchecker']['urldata'][1]&lt;/span&gt;
&lt;span class="c1"&gt;# print obj['linkchecker']['urldata'][2]&lt;/span&gt;
&lt;span class="c1"&gt;# print obj['linkchecker']['urldata'][3]&lt;/span&gt;
&lt;span class="c1"&gt;# print obj['linkchecker']['urldata'][99]&lt;/span&gt;
&lt;span class="c1"&gt;# print obj['linkchecker']['urldata'][100]&lt;/span&gt;
&lt;span class="c1"&gt;# print obj['linkchecker']['urldata'][101]&lt;/span&gt;
&lt;span class="c1"&gt;# print ''&lt;/span&gt;
&lt;span class="c1"&gt;# print obj['linkchecker']['urldata'][100]['parent']['#text']&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;
&lt;div class="output_area"&gt;
&lt;div class="prompt"&gt;&lt;/div&gt;
&lt;div class="output_subarea output_stream output_stdout output_text"&gt;
&lt;pre&gt;@created
urldata
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="output_area"&gt;
&lt;div class="prompt output_prompt"&gt;Out[144]:&lt;/div&gt;
&lt;div class="output_text output_subarea output_execute_result"&gt;
&lt;pre&gt;[OrderedDict([(u'url', u'http://getbootstrap.com'), (u'name', u'Bootstrap'), (u'parent', OrderedDict([(u'@column', u'13'), (u'@line', u'162'), ('#text', u'http://rubenvarela.com/')])), (u'realurl', u'http://getbootstrap.com'), (u'extern', u'1'), (u'dlsize', u'11937'), (u'checktime', u'7.068993'), (u'level', u'2'), (u'valid', OrderedDict([(u'@result', u'200 OK'), ('#text', u'1')]))]),
 OrderedDict([(u'url', u'http://getbootstrap.com'), (u'name', u'Bootstrap'), (u'parent', OrderedDict([(u'@column', u'13'), (u'@line', u'261'), ('#text', u'http://rubenvarela.com/ana-g-mendez-university-system-agmus.html')])), (u'realurl', u'http://getbootstrap.com'), (u'extern', u'1'), (u'dlsize', u'11937'), (u'checktime', u'7.068993'), (u'level', u'2'), (u'valid', OrderedDict([(u'@result', u'200 OK'), ('#text', u'1')]))]),
 OrderedDict([(u'url', u'http://rubenvarela.com/aaa-subastas-prasa-data-bids.html'), (u'name', u'AAA Subastas (PRASA Data Bids)'), (u'parent', OrderedDict([(u'@column', u'21'), (u'@line', u'83'), ('#text', u'http://rubenvarela.com/aaa-subastas-prasa-data-bids.html')])), (u'realurl', u'http://rubenvarela.com/aaa-subastas-prasa-data-bids.html'), (u'extern', u'0'), (u'dltime', u'0.000377'), (u'dlsize', u'9439'), (u'checktime', u'5.711945'), (u'level', u'2'), (u'valid', OrderedDict([(u'@result', u'200 OK'), ('#text', u'1')]))]),
 OrderedDict([(u'url', u'http://rubenvarela.com/theme/css/pygments/native.css'), (u'parent', OrderedDict([(u'@column', u'5'), (u'@line', u'31'), ('#text', u'http://rubenvarela.com/museo-de-arte-de-puerto-rico-puerto-rico-art-museum.html')])), (u'realurl', u'http://rubenvarela.com/theme/css/pygments/native.css'), (u'extern', u'0'), (u'dlsize', u'4732'), (u'checktime', u'2.197381'), (u'level', u'2'), (u'valid', OrderedDict([(u'@result', u'200 OK'), ('#text', u'1')]))]),
 OrderedDict([(u'url', u'/images/SUAGM/old/01_-_SUAGM_-_2015-05-25_21.55.28.png'), (u'name', u"'Old Home Page'"), (u'parent', OrderedDict([(u'@column', u'4'), (u'@line', u'147'), ('#text', u'http://rubenvarela.com/ana-g-mendez-university-system-agmus.html')])), (u'realurl', u'http://rubenvarela.com/images/SUAGM/old/01_-_SUAGM_-_2015-05-25_21.55.28.png'), (u'extern', u'0'), (u'dlsize', u'1165284'), (u'checktime', u'10.259280'), (u'level', u'2'), (u'valid', OrderedDict([(u'@result', u'200 OK'), ('#text', u'1')]))])]&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;h2 id="Now-to-extract-links-with-errors:"&gt;Now to extract links with errors:&lt;a class="anchor-link" href="#Now-to-extract-links-with-errors:"&gt;¶&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;For each URL,&lt;/li&gt;
&lt;li&gt;If the result is not okay,&lt;/li&gt;
&lt;li&gt;Check if the valid and parent keys exists.&lt;/li&gt;
&lt;li&gt;If they do, then print the values.&lt;/li&gt;
&lt;li&gt;If the necessary keys don't exist, print the object.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [145]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
&lt;div class="input_area"&gt;
&lt;div class="highlight hl-ipython2"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'linkchecker'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;'urldata'&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
&lt;span class="c1"&gt;#     print x['valid']['@result']&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'valid'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;'@result'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;"200 OK"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="s1"&gt;'valid'&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="s1"&gt;'parent'&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;#if keys exists in x&lt;/span&gt;
            &lt;span class="nb"&gt;print&lt;/span&gt; &lt;span class="s2"&gt;"Result Code: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'valid'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;'@result'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
            &lt;span class="nb"&gt;print&lt;/span&gt; &lt;span class="s2"&gt;"Link location: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'parent'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;'#text'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
            &lt;span class="nb"&gt;print&lt;/span&gt; &lt;span class="s2"&gt;"Line: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'parent'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;'@line'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="nb"&gt;print&lt;/span&gt; &lt;span class="s2"&gt;"Couldn't find all elements:"&lt;/span&gt;
            &lt;span class="nb"&gt;print&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;
        &lt;span class="nb"&gt;print&lt;/span&gt; &lt;span class="s2"&gt;"Links to: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'url'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [ ]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
&lt;div class="input_area"&gt;
&lt;div class="highlight hl-ipython2"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt; 
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
</content><category term="guides"/></entry><entry><title>Ana G. Mendez University System (AGMUS)</title><link href="/projects/ana_g_mendez_university_system_-_agmus" rel="alternate"/><published>2015-07-14T00:00:00-04:00</published><updated>2015-07-14T00:00:00-04:00</updated><author><name>Rubén Varela</name></author><id>tag:None,2015-07-14:/projects/ana_g_mendez_university_system_-_agmus</id><summary type="html">&lt;p&gt;Develop the website for the Ana G. Mendez University System. One of the main challenges they faced was with accessibility.&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Developer&lt;/h2&gt;
&lt;p&gt;Develop the website for the Ana G. Mendez University System. One of the main challenges they faced was with accessibility. They also wanted to incorporate the ability for all content to be translated between Spanish and English.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Technologies&lt;/em&gt;: Drupal, SSH, Git, Bootstrap, MySQL, Apache, PHP, jQuery, JavaScript, etc.&lt;/p&gt;
&lt;h2&gt;Systems&lt;/h2&gt;
&lt;p&gt;The first development environment for this website consisted of a VPS that had three environments, Integration, Staging and Production. In order to isolate each environment as much as possible, 3 instances of Apache where deployed.&lt;/p&gt;
&lt;p&gt;Each environment was it's own git repo. This allowed for easy deployment by simply pushing to the correct remote.&lt;/p&gt;
&lt;p&gt;Eventually SUAGM wanted to move to Acquia and everything was deployed there. The default structure Acquia uses was pretty much the same so deploying the code here was as simple as adding another remote and pushing the code.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a name="New"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Website implemented&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://ac.suagm.edu" title="Sistema Universitario Ana G. Mendez"&gt;New Website&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img alt="New Home Page" src="/images/SUAGM/new/01_-_SUAGM_new_-_Sistema_Universitario_Ana_G._Mendez_-_2015-05-25_21.56.06.png" title="New Home Page1"&gt;
&lt;em&gt;New Home Page&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'New News Listing Page'" src="/images/SUAGM/new/02_-_SUAGM_News_-Noticias_Sistema_Universitario_Ana_G._Mendez_-_2015-05-25_21.57.59.png" title="New News Listing Page"&gt;
&lt;em&gt;New News Listing Page&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'New Single News View'" src="/images/SUAGM/new/03_-_Noticia_-Observatorio_de_Arecibo_Envia_“Tweets”_al_Espacio_para_Conmemorar_el_35_Aniversario_del_WAO!_Signal_Sistema_Universitario_Ana_G._Mendez_-_2015-05-25_22.14.43.png" title="New Single News View"&gt;
&lt;em&gt;New Single News View&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'New University Listing'" src="/images/SUAGM/new/04_-_Universidades_-Universidades_Sistema_Universitario_Ana_G._Mendez_-_2015-05-25_22.15.35.png" title="New University Listing"&gt;
&lt;em&gt;New University Listing&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'New University Detail'" src="/images/SUAGM/new/05_-_Universidad_UNE_-_Universidad_del_Este_Sistema_Universitario_Ana_G._Mendez_-_2015-05-25_22.16.54.png" title="New University Detail"&gt;
&lt;em&gt;New University Detail&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'New Section Home'" src="/images/SUAGM/new/06_-_SUAGM_-_SUAGM_Sistema_Universitario_Ana_G._Mendez_-_2015-05-25_22.17.55.png" title="New Section Home"&gt;
&lt;em&gt;New Section Home&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'New President Detail Page'" src="/images/SUAGM/new/07_-_Presidente_-_Presidente_Sistema_Universitario_Ana_G._Mendez_-_2015-05-25_22.18.48.png" title="New President Detail Page"&gt;
&lt;em&gt;New President Detail Page&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'New Vice Presidency of Marketing and Student Affairs'" src="/images/SUAGM/new/08_-_Vicepresidencia_de_Mercadeo_y_Asuntos_Estudiantiles_-_Vicepresidencia_de_Mercadeo_y_Asuntos_Estudiantiles_Sistema_Universitario_Ana_G._Mendez_-_2015-05-25_22.20.10.png" title="New Vice Presidency of Marketing and Student Affairs"&gt;
&lt;em&gt;New Vice Presidency of Marketing and Student Affairs&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'New Interactive Network Student Services'" src="/images/SUAGM/new/09_-_RED_-_RED_Interactiva_de_Servicios_Estudiantiles_Sistema_Universitario_Ana_G._Mendez_-_2015-05-25_22.21.21.png" title="New Interactive Network Student Services"&gt;
&lt;em&gt;New Interactive Network Student Services&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'New Administration Page'" src="/images/SUAGM/new/10_-_Administracion_-_Administracion_Sistema_Universitario_Ana_G._Mendez_-_2015-05-25_22.23.23.png" title="New Administration Page"&gt;
&lt;em&gt;New Administration Page&lt;/em&gt;&lt;/p&gt;
&lt;!--![''](/images/SUAGM/new/11_-_Ofrecimientos_-_Planificador_Sistema_Universitario_Ana_G._Mendez_-_2015-05-25_22.25.14_1.png '')
**--&gt;

&lt;p&gt;&lt;img alt="'New Career Planner'" src="/images/SUAGM/new/11_-_Ofrecimientos_-_Planificador_Sistema_Universitario_Ana_G._Mendez_-_2015-05-25_22.25.54.png" title="New Career Planner"&gt;
&lt;em&gt;New Career Planner&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'New Events Page'" src="/images/SUAGM/new/12_-_Eventos_-_Eventos_Sistema_Universitario_Ana_G._Mendez_-_2015-05-25_22.28.07.png" title="New Events Page"&gt;
&lt;em&gt;New Events Page&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a name="old"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Old website&lt;/h3&gt;
&lt;p&gt;&lt;img alt="'Old Home Page'" src="/images/SUAGM/old/01_-_SUAGM_-_2015-05-25_21.55.28.png" title="Old Home Page"&gt;
&lt;em&gt;Old Home Page&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'Old News Listing Page'" src="/images/SUAGM/old/02_-_SUAGM_News_-_Sistema_Universitario_Ana_G._Mendez_-_2015-05-25_21.56.42.png" title="Old News Listing Page"&gt;
&lt;em&gt;Old News Listing Page&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'Old Single News View'" src="/images/SUAGM/old/03-_Noticia_-_Sistema_Universitario_Ana_G._Mendez_-_2015-05-25_22.14.33.png" title="Old Single News View"&gt;
&lt;em&gt;Old Single News View&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'Old University Listing'" src="/images/SUAGM/old/04_-_Universidades_-_Sistema_Universitario_Ana_G._Mendez_-_2015-05-25_22.15.25.png" title="Old University Listing"&gt;
&lt;em&gt;Old University Listing&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'Old University Detail'" src="/images/SUAGM/old/05_-_Universidad_UNE_-_Sistema_Universitario_Ana_G._Mendez_-_2015-05-25_22.16.23.png" title="Old University Detail"&gt;
&lt;em&gt;Old University Detail&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'Old Section Home'" src="/images/SUAGM/old/06_-_SUAGM_-_Sistema_Universitario_Ana_G._Mendez_-_2015-05-25_22.17.39.png" title="Old Section Home"&gt;
&lt;em&gt;Old Section Home&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'Old President Detail Page'" src="/images/SUAGM/old/07_-_Presidente_-_Sistema_Universitario_Ana_G._Mendez_-_2015-05-25_22.18.40.png" title="Old President Detail Page"&gt;
&lt;em&gt;Old President Detail Page&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'Old Vice Presidency of Marketing and Student Affairs'" src="/images/SUAGM/old/08_-_Mercadeo_y_Asuntos_Estudiantiles_-_Sistema_Universitario_Ana_G._Mendez_-_2015-05-25_22.19.45.png" title="Old Vice Presidency of Marketing and Student Affairs"&gt;
&lt;em&gt;Old Vice Presidency of Marketing and Student Affairs&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'Old Interactive Network Student Services'" src="/images/SUAGM/old/09_-_RED_-_Sistema_Universitario_Ana_G._Mendez_-_2015-05-25_22.21.08.png" title="Old Interactive Network Student Services"&gt;
&lt;em&gt;Old Interactive Network Student Services&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'Old Admissions'" src="/images/SUAGM/old/10_-_Admisiones_-_Sistema_Universitario_Ana_G._Mendez_-_2015-05-25_22.22.53.png" title="Old Admissions"&gt;
&lt;em&gt;Old Admissions&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'Old University Important Links'" src="/images/SUAGM/old/11_-_Ofrecimientos_-_Sistema_Universitario_Ana_G._Mendez_-_2015-05-25_22.24.59.png" title="Old University Important Links"&gt;
&lt;em&gt;Old University Important Links&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'Old Events Page'" src="/images/SUAGM/old/12_-_Eventos_-_Sistema_Universitario_Ana_G._Mendez_-_2015-05-25_22.27.50.png" title="Old Events Page"&gt;
&lt;em&gt;Old Events Page&lt;/em&gt;&lt;/p&gt;
&lt;!--
![''](/images/SUAGM/ '')
**

--&gt;

&lt;style&gt;
  p &gt; em:after {
    /*content: '';*/
  }
  p &gt; img {
    border-width: 3px;
    border-style: solid;
    border-color: #a0a0a0;
    padding: 2px;
    /*border: 1px;*/
  }
&lt;/style&gt;</content><category term="projects"/></entry><entry><title>Museo de Arte de Puerto Rico (Puerto Rico Art Museum)</title><link href="/projects/museo_de_arte_de_puerto_rico_-_puerto_rico_art_museum" rel="alternate"/><published>2015-07-13T00:00:00-04:00</published><updated>2015-07-13T00:00:00-04:00</updated><author><name>Rubén Varela</name></author><id>tag:None,2015-07-13:/projects/museo_de_arte_de_puerto_rico_-_puerto_rico_art_museum</id><summary type="html">&lt;p&gt;Develop the new online system for the Puerto Rico Art Museum.&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Developer&lt;/h2&gt;
&lt;p&gt;Develop the new online system for the &lt;a href="http://mapr.org" title="Museo de Arte de Puerto Rico"&gt;Puerto Rico Art Museum&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This platforms needed to be fully bilingual and allow them to manage the different areas of the museum:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Permanent Collection&lt;/li&gt;
&lt;li&gt;Exhibitions&lt;/li&gt;
&lt;li&gt;Artists&lt;br&gt;
    Including their biographies and Artwork&lt;/li&gt;
&lt;li&gt;Artwork&lt;br&gt;
    Including its Collection and related artwork&lt;/li&gt;
&lt;li&gt;Calendar&lt;/li&gt;
&lt;li&gt;Information pages&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="'Homepage'" src="/images/MAPR/MAPR_1_Museo_de_Arte_de_Puerto_Rico_-_2015-04-27_14.47.53.png" title="Homepage"&gt;
&lt;em&gt;Homepage&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'Visita menu'" src="/images/MAPR/MAPR_2_Museo_de_Arte_de_Puerto_Rico_-_2015-04-27_14.48.17.png" title="Visita menu"&gt;
&lt;em&gt;Visita menu&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'Arte menu'" src="/images/MAPR/MAPR_3_Museo_de_Arte_de_Puerto_Rico_-_2015-04-27_14.48.29.png" title="Arte menu"&gt;
&lt;em&gt;Arte menu&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'Museo menu'" src="/images/MAPR/MAPR_4_Museo_de_Arte_de_Puerto_Rico_-_2015-04-27_14.48.38.png" title="Museo menu"&gt;
&lt;em&gt;Museo menu&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'Admision, Hours and Parking'" src="/images/MAPR/MAPR_5_Admision,_Horarios_y_Estacionamiento_Museo_de_Arte_de_Puerto_Rico_-_2015-04-27_14.49.05.png" title="Adminisions, Hours and Parking"&gt;
&lt;em&gt;Admision, Hours and Parking&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'Events Calendar'" src="/images/MAPR/MAPR_6_Calendario_Museo_de_Arte_de_Puerto_Rico_-_2015-04-27_14.49.44.png" title="Events Calendar"&gt;
&lt;em&gt;Events Calendar&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'Join'" src="/images/MAPR/MAPR_7_Unete_Museo_de_Arte_de_Puerto_Rico_-_2015-04-27_14.50.07.png" title="Join"&gt;
&lt;em&gt;Join&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'Guided Visits'" src="/images/MAPR/MAPR_8_Visitas_Guiadas_Museo_de_Arte_de_Puerto_Rico_-_2015-04-27_14.50.40.png" title="Guided Visits"&gt;
&lt;em&gt;Guided Visits&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'Collection'" src="/images/MAPR/MAPR_9_Coleccion_Museo_de_Arte_de_Puerto_Rico_-_2015-04-27_14.51.12.png" title="Collection"&gt;
&lt;em&gt;Collection&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'Artwork in the collection'" src="/images/MAPR/MAPR_10_900–50–80_Museo_de_Arte_de_Puerto_Rico_-_2015-04-27_14.51.51.png" title="Artwork in the collection"&gt;
&lt;em&gt;Artwork in the collection&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'Artist in the collection'" src="/images/MAPR/MAPR_11_Olga_Albizu_Museo_de_Arte_de_Puerto_Rico_-_2015-04-27_14.52.11.png" title="Artist in the collection"&gt;
&lt;em&gt;Artist in the collection&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'Artist in the collection, expanded section'" src="/images/MAPR/MAPR_12_Olga_Albizu_Museo_de_Arte_de_Puerto_Rico_-_2015-04-27_14.52.53.png" title="Artist in the collection, expanded section"&gt;
&lt;em&gt;Artist in the collection, expanded section&lt;/em&gt;&lt;/p&gt;
&lt;!--![''](/images/MAPR/ '')--&gt;

&lt;!--http://stackoverflow.com/a/30366422--&gt;</content><category term="projects"/></entry><entry><title>Puerto Rico Aqueduct and Sewer Authority Data Bid (AAA Subastas)</title><link href="/projects/puerto_rico_aqueduct_and_sewer_authority_data_bid-aaa_data_bid" rel="alternate"/><published>2015-07-12T00:00:00-04:00</published><updated>2015-07-12T00:00:00-04:00</updated><author><name>Rubén Varela</name></author><id>tag:None,2015-07-12:/projects/puerto_rico_aqueduct_and_sewer_authority_data_bid-aaa_data_bid</id><summary type="html">&lt;p&gt;Design and implement the PRASA Data Bids platform for the Puerto Rico Aqueduct and Sewer Authority.&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Developer&lt;/h2&gt;
&lt;p&gt;Design and implement the PRASA Data Bids platform for the &lt;a href="http://www.acueductospr.com"&gt;Puerto Rico Aqueduct and Sewer Authority&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;&lt;em&gt;Technologies&lt;/em&gt;: Drupal, PHP, MySQL, Apache, jQuery, (X)HTML, CSS.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Systems&lt;/h2&gt;
&lt;p&gt;Create the stack, strategies and guidelines to maintain the servers and backups.&lt;/p&gt;
&lt;p&gt;Technologies: Ubuntu Linux Server, Apache, PHP, MySQL, rsync, ssh, git, Bash scripts, Python&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Home Page" src="/images/PRASA/AAA_1b_Home_-_2015-04-27_13.51.24.png" title="Home Page"&gt;
&lt;em&gt;Homepage&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Project Dashboard" src="/images/PRASA/AAA_2b_Project_Dashboard-_2015-04-27_13.52.01.png" title="Project Dashboard"&gt;
&lt;em&gt;Project Dashboard&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Project Documents" src="/images/PRASA/AAA_3_Project_Documents_-_2015-04-27_13.52.55.png" title="Project Documents"&gt;
&lt;em&gt;Project Documents&lt;/em&gt;&lt;/p&gt;</content><category term="projects"/></entry><entry><title>PG Engineering Solutions, PSC (PGES)</title><link href="/projects/pg-engineering-solutions-psc-pges" rel="alternate"/><published>2015-07-11T00:00:00-04:00</published><updated>2015-07-11T00:00:00-04:00</updated><author><name>Rubén Varela</name></author><id>tag:None,2015-07-11:/projects/pg-engineering-solutions-psc-pges</id><summary type="html">&lt;p&gt;Create a new website for the PG Engineering Solutions, PSC firm.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;img alt="'Home Page'" src="/images/PGES/Home_PGES_-_2015-10-29_10.26.32.png" title="Home Page"&gt;&lt;br&gt;
&lt;em&gt;Home Page&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'Slideshow transition'" src="/images/PGES/Home_PGES_-_2015-10-29_10.58.08.png" title="Slideshow transition"&gt;&lt;br&gt;
&lt;em&gt;Slideshow transition&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'Transition after'" src="/images/PGES/Home_PGES_-_2015-10-29_11.12.31.png" title="Transition after"&gt;&lt;br&gt;
&lt;em&gt;Transition after&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'Firm Overview'" src="/images/PGES/Firm_Overview_PGES_-_2015-10-29_10.56.57.png" title="Firm Overview"&gt;&lt;br&gt;
&lt;em&gt;Firm Overview&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'Message from the President'" src="/images/PGES/Message_from_the_President_PGES_-_2015-10-29_10.40.19.png" title="Message from the President"&gt;&lt;br&gt;
&lt;em&gt;Message from the President&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'Services'" src="/images/PGES/Services_PGES_-_2015-10-29_10.45.11.png" title="Services"&gt;&lt;br&gt;
&lt;em&gt;Services&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'Services - Hover'" src="/images/PGES/Services_PGES_-_2015-10-29_10.45.16.png" title="Services - Hover"&gt;&lt;br&gt;
&lt;em&gt;Services - Hover&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'Services - Hover'" src="/images/PGES/Services_PGES_-_2015-10-29_10.45.23.png" title="Services - Hover"&gt;&lt;br&gt;
&lt;em&gt;Services - Hover&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'Services - Hover'" src="/images/PGES/Services_PGES_-_2015-10-29_10.45.27.png" title="Services - Hover"&gt;&lt;br&gt;
&lt;em&gt;Services - Hover&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'Services - Hover'" src="/images/PGES/Services_PGES_-_2015-10-29_10.45.30.png" title="Services - Hover"&gt;&lt;br&gt;
&lt;em&gt;Services - Hover&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'Project List'" src="/images/PGES/Project_List_PGES_-_2015-10-29_10.47.30.png" title="Project List"&gt;&lt;br&gt;
&lt;em&gt;Project List&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'Project - Department of Housing'" src="/images/PGES/Project_Department_of_Housing_PGES_-_2015-10-29_11.09.02.png" title="Project - Department of Housing"&gt;&lt;br&gt;
&lt;em&gt;Project - Department of Housing&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'Project - Deparment of Housing - Gallery'" src="/images/PGES/PGES_Department_of_Housing_Gallery_-_2015-10-29_11.35.00.png" title="Project - Department of Housing - Gallery"&gt;&lt;br&gt;
&lt;em&gt;Project - Department of Housing - Gallery&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'Project - Department of Housing - 1st Image'" src="/images/PGES/PGES_Department_of_Housing_Gallery_1_-_2015-10-29_11.35.00.png" title="Project - Department of Housing - 1st Image"&gt;&lt;br&gt;
&lt;em&gt;Project - Department of Housing - 1st Image&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'Project - Guaynabo City Projects'" src="/images/PGES/Project_Guaynabo_City_PGES_-_2015-10-29_11.09.26.png" title="Project - Guaynabo City Projects"&gt;&lt;br&gt;
&lt;em&gt;Project - Guaynabo City Projects&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'Client List'" src="/images/PGES/Client_List_PGES_-_2015-10-29_10.47.42.png" title="Client List"&gt;&lt;br&gt;
&lt;em&gt;Client List&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'PGES Online Systems'" src="/images/PGES/Websites_Powered_by_PGES_PGES_-_2015-10-29_10.55.47.png" title="PGES Online Systems"&gt;&lt;br&gt;
&lt;em&gt;PGES Online Systems&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'News'" src="/images/PGES/News_PGES_-_2015-10-29_10.56.17.png" title="News"&gt;&lt;br&gt;
&lt;em&gt;News&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="'Contact Us'" src="/images/PGES/Contact_Us_PGES_-_2015-10-29_10.56.48.png" title="Contact Us"&gt;&lt;br&gt;
&lt;em&gt;Contact Us&lt;/em&gt;&lt;/p&gt;</content><category term="projects"/></entry><entry><title>Cambiar background Mac OS X desde el terminal</title><link href="/20130128-cambiar_background_mac_os_x_desde_el_terminal-es.html" rel="alternate"/><published>2013-01-28T00:00:00-05:00</published><updated>2015-11-22T00:00:00-05:00</updated><author><name>Rubén Varela</name></author><id>tag:None,2013-01-28:/20130128-cambiar_background_mac_os_x_desde_el_terminal-es.html</id><summary type="html">&lt;p&gt;Script para modificar el background de OS X.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Estuve este fin de semana pasado buscando como adaptar un script que utilizo en Linux para Mac OS X (10.8 Mountain Lion para ser mas específico).&lt;/p&gt;
&lt;p&gt;El script lo que hace es descargar una imagen y colocarla como background. Las imágenes las descarga de Reddit. Específicamente de &lt;a href="http://reddit.com/r/earthporn"&gt;/r/earthporn&lt;/a&gt; donde hay fotos impresionantes de lugares.&lt;/p&gt;
&lt;p&gt;En mi caso, el script funciona en Python, el problema que tenia era que no sabia como cambiar la imagen de fondo desde un script. La solución es sencilla (una vez la encuentras),&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;defaults write com.apple.desktop Background &amp;#39;{default = {ImageFilePath = &amp;quot;/Users/.scripts/background_changer/image.png&amp;quot;; };}&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Un script sencillo, en Bash, que cambie el background seria&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt; 1&lt;/span&gt;
&lt;span class="normal"&gt; 2&lt;/span&gt;
&lt;span class="normal"&gt; 3&lt;/span&gt;
&lt;span class="normal"&gt; 4&lt;/span&gt;
&lt;span class="normal"&gt; 5&lt;/span&gt;
&lt;span class="normal"&gt; 6&lt;/span&gt;
&lt;span class="normal"&gt; 7&lt;/span&gt;
&lt;span class="normal"&gt; 8&lt;/span&gt;
&lt;span class="normal"&gt; 9&lt;/span&gt;
&lt;span class="normal"&gt;10&lt;/span&gt;
&lt;span class="normal"&gt;11&lt;/span&gt;
&lt;span class="normal"&gt;12&lt;/span&gt;
&lt;span class="normal"&gt;13&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="ch"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="c1"&gt;###########################&lt;/span&gt;
&lt;span class="c1"&gt;#Author: Ruben Varela Rosa&lt;/span&gt;
&lt;span class="c1"&gt;#Created: 2013-01-28&lt;/span&gt;
&lt;span class="c1"&gt;############################&lt;/span&gt;

&lt;span class="nv"&gt;PathToImages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;/Users/ruben/.scripts/background_changer&amp;quot;&lt;/span&gt;
&lt;span class="nv"&gt;Image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;image_name.png&amp;quot;&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-f&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$PathToImages&lt;/span&gt;/&lt;span class="nv"&gt;$Image&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;then&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;defaults&lt;span class="w"&gt; &lt;/span&gt;write&lt;span class="w"&gt; &lt;/span&gt;com.apple.desktop&lt;span class="w"&gt; &lt;/span&gt;Background&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;{defaults = {ImageFilePath = &amp;quot;$PathToImages/$Image&amp;quot;; };}&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;killall&lt;span class="w"&gt; &lt;/span&gt;Dock&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Si desean cambiar el Background para otro usuario, tendrían que hacerlo como root. No mucho mas complicado, pero si hay unas cosas adicionales que hay que hacer.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;
&lt;span class="normal"&gt;2&lt;/span&gt;
&lt;span class="normal"&gt;3&lt;/span&gt;
&lt;span class="normal"&gt;4&lt;/span&gt;
&lt;span class="normal"&gt;5&lt;/span&gt;
&lt;span class="normal"&gt;6&lt;/span&gt;
&lt;span class="normal"&gt;7&lt;/span&gt;
&lt;span class="normal"&gt;8&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="ch"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="nv"&gt;user&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;user_name&amp;quot;&lt;/span&gt;
&lt;span class="nv"&gt;path_to_images&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;/User/&lt;/span&gt;&lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="s2"&gt;/.scripts/background_changer/&amp;quot;&lt;/span&gt;
&lt;span class="nv"&gt;images&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;image_name.png&amp;quot;&lt;/span&gt;

/usr/bin/defaults&lt;span class="w"&gt; &lt;/span&gt;write&lt;span class="w"&gt; &lt;/span&gt;/Users/&lt;span class="nv"&gt;$user&lt;/span&gt;/Library/Preferences/com.apple.desktop&lt;span class="w"&gt; &lt;/span&gt;Background&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;{default = {ImageFilePath = &amp;quot;$path_to_images/$images&amp;quot;; };}&amp;#39;&lt;/span&gt;

chown&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/Users/&lt;span class="nv"&gt;$user&lt;/span&gt;/Library/Preferences/com.apple.desktop.plist
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Espero que otros también encuentren útil lo anterior.&lt;/p&gt;</content><category term="guides"/><category term="OS X"/><category term="Linux"/><category term="Script"/><category term="Bash"/></entry></feed>