tag:blogger.com,1999:blog-72652063042156953212024-03-05T19:51:49.373+00:00Mat Alan Gilbert: IT Notes - Software Development and Other ScribblesAssorted notes on my development experiences, and other useful workflow and environment tips, for Windows and Linux.Mathttp://www.blogger.com/profile/12333556529456840174noreply@blogger.comBlogger62125tag:blogger.com,1999:blog-7265206304215695321.post-36731881476861333562013-11-28T13:33:00.000+00:002013-11-28T13:34:17.134+00:00Going back to a previous directory in the Linux terminal A little cd trick to <i>cd</i> back in Linux terminal history:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> cd -
</code></pre>
<br />
So useful I had to share!
Mathttp://www.blogger.com/profile/12333556529456840174noreply@blogger.com0tag:blogger.com,1999:blog-7265206304215695321.post-66514728250283110632013-11-27T13:20:00.001+00:002013-11-27T13:20:22.926+00:00Adding Syntax Highlighting to Linux lessInstall source-highlight:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> sudo apt-get install source-highlight
</code></pre>
<br />
Add the following two lines to<i>~/.bashrc</i><br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> export LESSOPEN="| /usr/share/source-highlight/src-hilite-lesspipe.sh %s"
export LESS=' -R '
</code></pre>
<br />
Now source files opened with <i>less </i>will be nicely syntax highlighted. <i>source-highlight</i> supports many languages - see<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> source-highlight --lang-list
</code></pre>
for a full listing.Mathttp://www.blogger.com/profile/12333556529456840174noreply@blogger.com0tag:blogger.com,1999:blog-7265206304215695321.post-83367028065453587302013-05-07T10:30:00.000+01:002013-05-07T10:30:02.213+01:00Using Nautilus file manager with Enlightenment window managerI'm a fan of <a href="http://www.bodhilinux.com/" target="_blank">Bodhi</a> Linux, which uses the <a href="http://www.enlightenment.org/" target="_blank">Enlightenment</a> window manager and is pretty speedy on all kinds of hardware. Unfortunately however, the built in file manager isn't yet fully functional in my opinion. As <a href="http://db.tt/O4BgfACR" target="_blank">Dropbox</a> has a dependency on <a href="http://en.wikipedia.org/wiki/Nautilus_(file_manager)" target="_blank">Nautilus</a>, I've integrated that into Enlightenment as the primary file manager.<br />
<br />
To do this, we need to start Nautilus with the <i>--no-desktop </i>option. Start by making moving <i>/usr/bin/nautilus </i>to <i>/usr/bin/nautilus.original</i>, and create a new script at <i>/usr/bin/nautilus</i> containing the following command:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> #!/bin/bash
nautilus.original --no-desktop $@ &
</code></pre>
<br />
The <i>$@ </i>expands any passed arguments, allowing the use of the script as if it were the original Nautilus binary.<br />
<br />
To ensure Enlightenment uses only Nautilus, we need to disable the integrated file manager from the Modules settings (<i>Run Everything -> Modules -> Files)</i>. Disable <i>EFM (Starter) </i>and <i>EFM Operation Info </i>and close the settings window.<br />
<br />
If you use the <i>Places </i>module, either on the desktop or in a panel, you'll also want to ensure that this launches Nautilus instead of the integrated file manager. To do this, right-click on the gadget, then go to <i>Settings. </i> Finally, select <i>Use a custom file manager</i> and enter <i>nautilus</i> in the box.<br />
<br />
And we're done - we're now using Nautilus as a replacement for the Enlightenment File Manager.<br />
<br />
<br />
<b>References:[<a href="http://crunchbang.org/forums/viewtopic.php?id=10489" target="_blank">Crunchbang Forums: Make nautilus --no-desktop default.</a>]</b>Mathttp://www.blogger.com/profile/12333556529456840174noreply@blogger.com0tag:blogger.com,1999:blog-7265206304215695321.post-8248220195925832672013-04-06T21:15:00.001+01:002013-04-06T21:15:53.456+01:00Scanf in Go lang on WindowsA little gotcha when using <a href="http://fmt.scanf/"><i>fmt.Scanf</i></a> in <a href="http://golang.org/" target="_blank">Go</a>:<br />
<br />
<i>fmt.Scanf</i> currently relies on the Unix line ending <i>\n,</i> while Windows uses <i>\r\n</i>. This means that when using fmt.Scanf, you must include the <i>\n </i>if you're building your Go program for Windows. For example:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> fmt.Scanf("%d", &num)
</code></pre>
will work in Unix but not in Windows. You're most likely to notice this when using <i>fmt.Scanf </i>multiple times - either in a for loop or simply sequentially. <i>fmt.Scanf</i> will likely appear to run twice as often as you expect, leading to unexpected program flow.<br />
<br />
To resolve this issue, just make sure to include the <i>\n </i>in your use of <i>fmt.Scanf</i>, as demonstrated below.<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> fmt.Scanf("%d\n", &num)
</code></pre>
<br />
Incidentally, if you're trying to track down errors like this one, you can always check function error codes, as demonstrated below.<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> n, err := fmt.Scanf("%d", &num)
if err != nil {
fmt.Println(n, err)
}
</code></pre>
In the above case, we get this error:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> 20 unexpected newline
</code></pre>
Which gives us the line number, and the issue from that line.<br />
<br />
<br />
<br />
<b>[References] </b><a href="http://stackoverflow.com/questions/14000082/how-do-i-use-fmt-scanf-in-go" target="_blank">Stack Overflow: parallel processing: How do I use fmt.Scanf in Go</a>Mathttp://www.blogger.com/profile/12333556529456840174noreply@blogger.com0tag:blogger.com,1999:blog-7265206304215695321.post-1152724994053867022013-03-06T14:42:00.000+00:002013-03-06T14:42:21.108+00:00Linux hibernate hangs on resume - SolvedIf s2disk successfully hibernates your machine, but on powering up the resume screen appears to hang, after it has appeared to stop working try pressing <i>Alt-SysRq-E. </i>This ends all processes in the virtual terminal used by s2disk, and, for me at least, allows me to resume working in my hibernated session.<br />
<br />
Odd, but this might help others close to giving up on hibernation in Linux.Mathttp://www.blogger.com/profile/12333556529456840174noreply@blogger.com0tag:blogger.com,1999:blog-7265206304215695321.post-1095570570443470152013-03-04T08:13:00.000+00:002013-03-04T08:13:00.546+00:00Fixing plugin problems with Banshee music player in LinuxAfter installing Banshee on my minimalist <a href="http://www.bodhilinux.com/" target="_blank">Bodhi Linux</a> install, trying to play music lead to Banshee asking to install plugins, and then hanging. Installing the following packages using the command below resolves the issue.<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> sudo aptitude install gstreamer0.10-plugins-bad gstreamer0.10-plugins-good gstreamer0.10-plugins-ugly
</code></pre>
<br />Mathttp://www.blogger.com/profile/12333556529456840174noreply@blogger.com1tag:blogger.com,1999:blog-7265206304215695321.post-10612757663677908882013-02-21T16:16:00.000+00:002013-02-21T16:16:00.764+00:00Converting Latex to HTML using PandocInstall Pandoc using your disto's package manager, or by following the installation instructions <a href="http://johnmacfarlane.net/pandoc/installing.html" target="_blank">here</a>.<br />
<br />
Then use:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> pandoc input.tex -o output.html --mathjax
</code></pre>
<br />
Nice and straightforward!Mathttp://www.blogger.com/profile/12333556529456840174noreply@blogger.com0tag:blogger.com,1999:blog-7265206304215695321.post-34495318100838419942013-02-20T16:06:00.003+00:002013-02-20T16:06:43.633+00:00Linux Remote Desktops: A Comparison<br />
<i>This is the final post in a three part series exploring Ubuntu-based remote desktop options. See posts <a href="http://matalangilbert.blogspot.com/2012/11/using-remote-desktop-in-ubuntu-1204.html" target="_blank">one</a> and <a href="http://matalangilbert.blogspot.com/2013/02/linux-ubuntu-remote-desktop-cendio-thinlinc.html" target="_blank">two</a> for an exploration of <a href="http://www.nomachine.com/" target="_blank">NoMachine</a> and <a href="http://www.cendio.com/" target="_blank">ThinLinc</a>.</i><br />
<div>
<i><br /></i></div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://lifeskillsfromthedojo.com/wp-content/uploads/2012/03/e-balance-01.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="213" src="http://lifeskillsfromthedojo.com/wp-content/uploads/2012/03/e-balance-01.jpg" width="320" /></a></div>
My primary motivation for testing these remote desktop solutions was my desire to find a remote desktop solution that worked as Windows Remote Desktop - in terms of speed and functionality. While Linux and Windows do have differing user paradigms - Windows being designed around a single user logon, I was looking for the ability to log on to my system both at work and at home, resuming my session from wherever I was. My work machine is behind a VPN, and I need my sessions to be responsive enough to work as if I was working on the local machine.<br />
<br />
Productivity therefore is of primary importance to me, and closely tied to this is the latency of a connection. I find that a slow, lagging connection impairs not only my ability to work in the graphical environments I require, but also affects my desire and motivation to try to continue to work remotely. For these reasons, I've found that using NoMachine, via the <a href="http://freenx.berlios.de/" target="_blank">FreeNx</a> client is most suitable for my purposes - there was just too much latency within a Cendio Thinlinc connection during my testing. To be clear, your mileage may vary - the latency I experienced may be down to a specific interaction between something in my setup and Thinlinc, but during testing over a number of days, at a variety of times, under different network condition, the NoMachine sessions consistently delivered a near desktop speed experience.<br />
<br />
I'm interested to hear about the experience of others, using either of the Linux remote desktop solutions I tested - feel free to add them in the comments below.<br />
<br />
<br />
<b>[Image Credit] </b><a href="http://lifeskillsfromthedojo.com/wp-content/uploads/2012/03/e-balance-01.jpg" rel="nofollow" target="_blank">lifeskillsfromthedojo.com</a>Mathttp://www.blogger.com/profile/12333556529456840174noreply@blogger.com1tag:blogger.com,1999:blog-7265206304215695321.post-17601676654171440042013-02-20T15:32:00.000+00:002013-02-20T16:23:08.894+00:00Another Linux Remote Desktop Solution: Cendio ThinLinc<i>This is the second post in a three part series exploring Ubuntu-based remote desktop options. See posts <a href="http://matalangilbert.blogspot.co.uk/2012/11/using-remote-desktop-in-ubuntu-1204.html" target="_blank">one</a> and <a href="http://matalangilbert.blogspot.co.uk/2013/02/linux-ubuntu-remote-desktop-comparison.html" target="_blank">three</a> for further exploration and conclusions.</i><br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjH4LwqBWh792XOkRX49jGBRam54z15Gbee-26Mk6NP9Py1irdJWTjFlGb5j2HcW52ugp-06ItSA8b9Z2bc9MqtqhqOCugruK5npDi_N6V6Q3ZQlrGAh91zj2sKetSbUKnzucf0Gp4C1KA/s1600/Features-Comparison-300x225.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjH4LwqBWh792XOkRX49jGBRam54z15Gbee-26Mk6NP9Py1irdJWTjFlGb5j2HcW52ugp-06ItSA8b9Z2bc9MqtqhqOCugruK5npDi_N6V6Q3ZQlrGAh91zj2sKetSbUKnzucf0Gp4C1KA/s200/Features-Comparison-300x225.jpg" width="200" /></a>After the popularity of my <a href="http://matalangilbert.blogspot.co.uk/2012/11/using-remote-desktop-in-ubuntu-1204.html" target="_blank">earlier post</a> reviewing <a href="http://freenx.berlios.de/" target="_blank">FreeNx</a>, Pierre Ossman, a developer at <a href="http://www.cendio.com/" target="_blank">Cendio</a>, informed me of their product, which provides an alternative remote desktop/thin client option for Linux. This post details my comparison of FreeNx and Cendio ThinLinc, as options for remote desktop solutions that rival Windows remote desktop.<br />
<br />
<b>Installation and use of Cendio ThinLinc</b><br />
<br />
Obtaining and installing the software is relatively easy - you do have to give Cendio your email address before they will email you the download link, but the installation instructions are straightforward, and the installer does a good job of pulling in any additional required packages. The <a href="http://www.cendio.com/downloads/server/install.xhtml" target="_blank">installation instructions</a> simply consist of unzipping the downloaded package and executing an install script.<br />
<div>
<br /></div>
<div>
For me, the installer did seem to pull a a significant number of additional packages - these packages may just be required as ThinLinc provides a little more functionality than Nx. Overall, the ThinLinc installation took longer and felt a little less friendly than Nx, requiring slightly more configuration and interaction during the install process.</div>
<div>
<br /></div>
<div>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEig3UsetStT1iVW8BuKCSAOIaEABuEJ6Qr83MAtFVDXBB2_LC2wQygPjq_jhjufN8OnH47-eQbH0svfjZwRzqgio8xj5Gf8oR_mUUC7zwfMJptQYo-iAywrg3hUQe7Bc1i15bTrC0PySeI/s1600/Screenshot-ThinLinc+Web+Administration+-+Google+Chrome.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="254" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEig3UsetStT1iVW8BuKCSAOIaEABuEJ6Qr83MAtFVDXBB2_LC2wQygPjq_jhjufN8OnH47-eQbH0svfjZwRzqgio8xj5Gf8oR_mUUC7zwfMJptQYo-iAywrg3hUQe7Bc1i15bTrC0PySeI/s320/Screenshot-ThinLinc+Web+Administration+-+Google+Chrome.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">ThinLinc administration page</td></tr>
</tbody></table>
Once installed, the ThinLinc server is administered via a webpage at <a href="http://localhost:1010/">http://localhost:1010</a><br />
<br />
<br /></div>
<div>
Downloading and installing the client is also a simple process, and connecting to the server is straightforward, as can be seen in the box below:<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-RUmgM6Sa3Ao760XAy_VlCCRj42OxeuQRoLkjQSNyTyGmw_SzE-RREj0uUl0eg7hn9z2kOOohJbZp8U4jzczV3kynJELLmhztipeSVkf1EUSvYz2JG_3qRDkfAh8WkUgYU2UJ3L0WMq0/s1600/thinlincClient.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="120" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-RUmgM6Sa3Ao760XAy_VlCCRj42OxeuQRoLkjQSNyTyGmw_SzE-RREj0uUl0eg7hn9z2kOOohJbZp8U4jzczV3kynJELLmhztipeSVkf1EUSvYz2JG_3qRDkfAh8WkUgYU2UJ3L0WMq0/s200/thinlincClient.jpg" width="200" /></a><br />
<br /></div>
<div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
It took me a bit of time to figure out how to disconnect from a session without logging off - the ability to resume a session from multiple locations is a primary driver of my remote desktop use. After some digging around in the documentation however, I found the <a href="http://www.cendio.com/resources/docs/tag/client.html#client_session_menu" target="_blank">relevant information</a> - pressing F8 while logged into a remote session pops up a menu that provides the option to disconnect from the session, without ending it.<br />
<br />
Now for the best bit - downloading and running the client on the same machine as the server allows you to start a ThinLinc session on that machine. Working in this session then allows connection from another location - using the ThinLinc client at work, for example, leaving programs running and then using the client from home to connect to that same machine gives the same experience as Windows Remote Desktop - the one feature I've missed ever since I've moved to using Linux full time.<br />
<br />
Finally, it's worth noting that neither <a href="https://twitter.com/ThinLinc/status/269457621558374400" target="_blank">ThinLinc</a> or <a href="http://www.nomachine.com/ar/view.php?ar_id=AR0500591" target="_blank">NoMachine</a> support the full Unity desktop that that is default in Ubuntu versions later than 11.04. Because of this, you need to ensure that <i>gnome-session-fallback </i>is installed:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> sudo apt-get install gnome-session-fallback
</code></pre>
<br />
<br />
<b>The Comparison</b><br />
The results of my comparison can be found in the final post of this series: <a href="http://matalangilbert.blogspot.com/2013/02/linux-ubuntu-remote-desktop-comparison.html" target="_blank">Linux Remote Desktops: A Comparison</a>.<br />
<br />
<br />
<br />
<br />
<b>[Image credit] </b><a href="http://www.roommaster2000.co.uk/wp-content/uploads/2012/10/Features-Comparison-300x225.jpg" target="_blank">RoomMaster2000</a></div>
Mathttp://www.blogger.com/profile/12333556529456840174noreply@blogger.com0tag:blogger.com,1999:blog-7265206304215695321.post-58641216934776710362013-02-20T15:13:00.000+00:002013-02-20T15:13:20.074+00:00Juniper Network Connect in Bodhi, Ubuntu and Linux MintThe Juniper Network Connect client simply wouldn't launch for me under any of the Linux distributions listed in the title of this post, even after trying multiple Java version installations.<br />
<br />
Thankfully, Paul Smith at <a href="http://mad-scientist.us/" target="_blank">Mad-Scientist.us</a> has put together a great script which allows connection to a Juniper WebVPN from a Ubuntu-based distro. He has a great write up on his <a href="http://mad-scientist.us/juniper.html" target="_blank">blog</a>, so I won't repeat his instructions here, other than to say he makes it incredibly simple to get connected to your institution WebVPN.<br />
<br />
I followed his instructions on a reasonably fresh install of <a href="https://www.google.co.uk/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&sqi=2&ved=0CDEQFjAA&url=http%3A%2F%2Fwww.bodhilinux.com%2F&ei=G-MkUZKiDomg0QW_34CQDw&usg=AFQjCNEGgYjyW0UeBTke62WVuBobQ2sbIQ&sig2=OYewhn8gCySTUh08kWVpCg&bvm=bv.42661473,d.d2k" target="_blank">Bodhi Linux</a>*, and ended up running into a <i>"missing /etc/resolv.conf" </i>error. This can be fixed by running the following command:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> sudo dpkg-reconfigure resolvconf
</code></pre>
Answer <i>Yes </i>to all the prompts and restart your machine once the tool finishes.<br />
<br />
Launching Paul's script (hosted <a href="https://github.com/madscientist/msjnc" target="_blank">here</a> at Github, should you want to check out the code), should now present you with a working GUI, allowing you to connect you to your WebVPN. He also provides the option of connecting via the command line, detailed further in his <a href="http://mad-scientist.us/juniper.html" target="_blank">blog post</a><br />
<br />
As usual, any issues or comments in the box below!<br />
<br />
* If you haven't checked this distro out, I highly recommend it - it absolutely flies even on older hardware, and is Ubuntu-based giving access to the huge Ubuntu software repositories<br />
<br />
[References]<br />
<a href="http://mad-scientist.us/juniper.html" target="_blank">Mad-Scientist.us</a><br />
<a href="http://forums.bodhilinux.com/index.php?/topic/5821-dns-issues-on-bodhi-20-solved/" target="_blank">Bohdi Linux Forums</a><br />
<br />Mathttp://www.blogger.com/profile/12333556529456840174noreply@blogger.com0tag:blogger.com,1999:blog-7265206304215695321.post-81765926476349227012013-01-21T15:49:00.002+00:002013-01-21T15:49:57.840+00:00 LaTeX Error: File `algorithm.sty' not foundTo resolve this error in a Debian based Linux distribution (Debian, Ubuntu, Mint, etc), the fastest way to continue working is to install the <i>texlive-science </i>package, using:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> sudo apt-get install texlive-science
</code></pre>
<br />
<br />
<br />Mathttp://www.blogger.com/profile/12333556529456840174noreply@blogger.com0tag:blogger.com,1999:blog-7265206304215695321.post-34716485472855353722012-12-06T08:04:00.000+00:002012-12-06T08:04:00.426+00:00Printing from the Linux command lineTo print a file from the Linux command line, use the simple command:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> lpr FILENAME
</code></pre>
It's that easy!<br />
<br />
I came across this while trying to print all pdf files in a directory. To do this, the simple bash script you need is:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> #!/bin/bash
for file in *.pdf; do
/usr/bin/lpr "$file"
done
</code></pre>
<br />
Save this into a file - I called mine <i>print-all-pdfs.sh</i>. Then make it executable using<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> chmod +x <i>print-all-pdfs.sh </i>
</code></pre>
<br />
Copy it to the directory you want to run it in, then execute with<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> ./<i>print-all-pdfs.sh </i>
</code></pre>
<br />
For an additional challenge, can anyone adapt the above script to print all .pdfs from directories recursively? Answers in the comments below!<br />
<br />
<br />
<b>[References] </b>Bash script adapted from a <a href="http://www.linuxforums.org/forum/programming-scripting/88625-print-pdf-files-folder.html" target="_blank">LinuxForums</a> post.Mathttp://www.blogger.com/profile/12333556529456840174noreply@blogger.com0tag:blogger.com,1999:blog-7265206304215695321.post-44333474482724031642012-12-05T22:06:00.000+00:002012-12-05T22:06:00.184+00:00Notes on using HerokuThese are a few common things I find myself looking up when working with Heroku - I update this post if I find myself repeated searching for how to do the same tasks.<br />
<br />
<h3>
<b>Running commands from a folder not linked to Heroku</b>
</h3>
Simply append <i>--app APP_NAME</i> to any relevant Heroku command:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;">HEROKU_COMMAND --app APP_NAME </code></pre>
<br />
<h3>
<b>Deployment</b>
</h3>
If trying to push to Heroku:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> git push heroku master
</code></pre>
but get a publickey error:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> Permission denied (publickey).
fatal: The remote end hung up unexpectedly </code></pre>
You need to add your public key to Heroku.<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> heroku keys:add path_to_publickey </code></pre>
If you don't have a public key, Heroku can prompt and generate one for you - simply use the command:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> heroku keys:add
</code></pre>
<br />
<h3>
<b>Resetting the application database</b>
</h3>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> heroku pg:reset DATABASE_URL
</code></pre>
To reset the database without a validation prompt, use:
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> heroku pg:reset DATABASE_URL --confirm APP_NAME
</code></pre>
<br />
<h3>
<b>Rake</b>
</h3>
To run a rake task on Heroku, create the task in <i>app/lib/tasks </i><i>(Rails)</i>, test locally then deploy. To run, use:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> heroku run rake TASK_NAME
</code></pre>
<br />
<br />
If you have any useful commands you regularly use while working with Heroku, let me know in the comments below!Mathttp://www.blogger.com/profile/12333556529456840174noreply@blogger.com0tag:blogger.com,1999:blog-7265206304215695321.post-50375083848385746082012-12-04T12:30:00.000+00:002012-12-04T12:30:00.509+00:00How to add a menu item for SPSS in LinuxI keep forgetting where SPSS installs itself - this .desktop file may be of help to others too.<br />
<br />
Create .desktop file for SPSS:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> sudo leafpad /usr/share/applications/spss.desktop
</code></pre>
<br />
Add this text to that file:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> [Desktop Entry]
Name=SPSS
GenericName=SPSS
Comment=Statistics program
Exec=/opt/IBM/SPSS/Statistics/19/bin/stats
Icon=gnome-monitor
Terminal=false
Type=Application
Categories=Application;Education;
</code></pre>
<br />
Save, then log out and back in again, or restart the desktop using<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> xfdesktop --reload
</code></pre>
if using an XFCE desktop.<br />
<br />
SPSS will now be available under Applications -> Education.Mathttp://www.blogger.com/profile/12333556529456840174noreply@blogger.com1tag:blogger.com,1999:blog-7265206304215695321.post-30035516183439853232012-11-26T08:16:00.000+00:002012-11-26T08:16:00.034+00:00Find all files and move to a target directory from the Linux command lineFor this example, we're going to be moving all .mp3 files from the subdirectories of the current directory into current directory.<br />
<br />
To do this, we need to combine two different commands. To find all the files in the current directory and its subdirectories, we use the find command:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> find -name \*.mp3
</code></pre>
<br />
The <i>\ </i>escapes the <i>*</i>, so it's interpreted as a wild card on the command line. The <i>-name </i>argument allows us to check only the file names.<br />
<br />
To move files around on the command line, we use the <i>mv </i>command, and for our example, we add the <i>-t </i>argument, which lets us define the target directory:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> mv -t <i><target-directory></i> <i><file-to-move></i>
</code></pre>
where <i>target-directory </i>is where we want to move the file to, and <i>file-to-move</i> is the file we want to move.<br />
<br />
With a bit of command-line magic, we can combine these commands using the <i>-exec </i>switch on find, to give us our final command:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> find -name \*.mp3 -exec mv -t . {} \+ </code></pre>
<i>-exec</i> takes the command we want to execute, and <i>{} \+ </i>appends each find result to the command, which in our case is <i>mv</i>. So the above line will find all files end in <i>.mp3 </i>and move them to the current directory.Mathttp://www.blogger.com/profile/12333556529456840174noreply@blogger.com0tag:blogger.com,1999:blog-7265206304215695321.post-34146307904075892042012-11-19T08:30:00.000+00:002012-11-19T08:30:05.374+00:00Fail Fast - A Lesson In Not Wasting Time<br />
<div style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;">
<div style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;">
<img alt="fail fast" height="198" src="http://thumannresources.files.wordpress.com/2010/02/fail-fast.jpg" title="" width="320" /></div>
<br />
<br />
<br />
<br /></div>
Around a year ago, I had an idea for a small browser based application that had the potential to smooth and streamline a workflow within universities around the country. The concept was simple and wouldn't have taken a huge amount of time to develop. Given my position working in a university setting, I had the ideal environment to test and prototype, but due to constraints on my time I didn't take the concept any further.
<br />
<br />
Fast forward to last week. I'd finally found the inspiration, motivation, and time to solidify and explore this idea. It took me less than an hour to map out the specifics of my concept, and email a few academic contacts to see what they thought of the idea. Feedback was positive; I'd found a niche. Unfortunately, the very same week, the university have announced that they are trialling a new, much larger system which implements a substantial feature list, and includes the subset of functionality I was aiming to provide.
<br />
<br />
Why do I tell you this story? Well, there's lessons here. Despite my initial disappointment, this is a perfect example of failing fast and learning quickly. While there was a part of me that felt I shouldn't release my idea into the world until I had built the application and had a full, perfect implementation to demonstrate, had I done this I would have committed hours, days, or weeks of my time to building a system that had <i>zero chance</i> <i>of ever being used</i>. Here's what this experience taught me:
<br />
<ol>
<li><b>Talk about your ideas</b>. It's natural to feel protective of your concepts, and worry that they might be stolen or plagiarised (or laughed at - see <i>3<b>.</b></i>). In my experience, it's highly unlikely that they will, and if they do, talking to enough people makes it clear where the idea originated. The knowledge and insights you stand to gain from sharing knowledge and ideas far outweigh any perceived risks of collaboration.</li>
<li><b>Act Early</b>. If you have an idea, or discover a niche you could occupy, act on it early. If I'd had the confidence to explore my concept a year earlier, I'd have been first to market, so to speak, and would have been in a much better position to compete with the larger system that has come along now. Who knows, I might have gained enough traction to have become that larger system.</li>
<li><b>Fight your inner perfectionism</b>. The world is imperfect, and so your contributions to it can be too. Don't spend forever perfecting designs, ideas and implementations. However scary it might be, put yourself and your ideas out there, and you'll be pleasantly surprised at the what happens.</li>
</ol>
So there we have it, it took me less than a day to establish that, despite a market need, my good idea wasn't commercially viable in current circumstances. My time is now free to explore my next project. Next time you find yourself thinking "maybe there's a need for this...<span style="color: red;"> </span>one day I'll have the time..." - take the time to explore, find feedback and fail fast or fly.<br />
<br />
<br />
<b>[Image credit]</b> <a href="http://thumannresources.files.wordpress.com/">http://thumannresources.files.wordpress.com</a><br />
<br />Mathttp://www.blogger.com/profile/12333556529456840174noreply@blogger.com2tag:blogger.com,1999:blog-7265206304215695321.post-24998140857346652312012-11-16T14:08:00.000+00:002012-11-16T14:14:53.424+00:00Finding out what Matlab tooboxes are available for useFinding out what toolboxes are available to a Matlab installation is actually relatively simple - it's just a case of typing:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> ver </code></pre>
<br />
at the Matlab prompt.<br />
<br />
On it's own, however, this function doesn't supply much useful information, <i>as it doesn't tell you what licences are available to the installation</i>, and hence which toolboxes you can actually use (which is probably what you care about when you're trying to find out what toolboxes are available).<br />
<br />
It is possible to find out what licenses are available to the installation, however it takes a bit more work.<br />
<br />
First, we need to define a feature string, which is just a list of all the toolboxes potentially installed:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> featureStr = {'Aerospace_Blockset'; ...
'Aerospace_Toolbox'; ...
'Bioinformatics_Toolbox'; ...
'Communication_Blocks'; ...
'Communication_Toolbox'; ...
'Compiler'; ...
'Control_Toolbox'; ...
'Curve_Fitting_Toolbox'; ...
'Data_Acq_Toolbox'; ...
'Database_Toolbox'; ...
'Datafeed_Toolbox'; ...
'Dial_and_Gauge_Blocks'; ...
'Distrib_Computing_Toolbox'; ...
'Econometrics_Toolbox'; ...
'EDA_Simulator_Link_DS'; ...
'Embedded_Target_c166'; ...
'Embedded_Target_c2000'; ...
'Embedded_Target_c6000'; ...
'Embedded_Target_MPC555'; ...
'Excel_Link'; ...
'Filter_Design_HDL_Coder'; ...
'Filter_Design_Toolbox'; ...
'Fin_Derivatives_Toolbox'; ...
'Financial_Toolbox'; ...
'Fixed_Income_Toolbox'; ...
'Fixed_Point_Toolbox'; ...
'Fixed-Point_Blocks'; ...
'Fuzzy_Toolbox'; ...
'GADS_Toolbox'; ...
'IDE_Link_MU'; ...
'Identification_Toolbox'; ...
'Image_Acquisition_Toolbox'; ...
'Image_Toolbox'; ...
'Instr_Control_Toolbox'; ...
'Link_for_Incisive'; ...
'Link_for_ModelSim'; ...
'Link_for_Tasking'; ...
'Link_for_VisualDSP'; ...
'MAP_Toolbox'; ...
'MATLAB'; ...
'MATLAB_Builder_for_dot_Net'; ...
'MATLAB_Builder_for_Java'; ...
'MATLAB_Distrib_Comp_Engine'; ...
'MATLAB_Excel_Builder'; ...
'MATLAB_Link_for_CCS'; ...
'MATLAB_Report_Gen'; ...
'MBC_Toolbox'; ...
'MPC_Toolbox'; ...
'NCD_Toolbox'; ...
'Neural_Network_Toolbox'; ...
'OPC_Toolbox'; ...
'Optimization_Toolbox'; ...
'PDE_Toolbox'; ...
'Power_System_Blocks'; ...
'Real-Time_Win_Target'; ...
'Real-Time_Workshop'; ...
'RF_Blockset'; ...
'RF_Toolbox'; ...
'Robust_Toolbox'; ...
'RTW_Embedded_Coder'; ...
'Signal_Blocks'; ...
'Signal_Toolbox'; ...
'SimBiology'; ...
'SimDriveline'; ...
'SimElectronics'; ...
'SimEvents'; ...
'SimHydraulics'; ...
'SimMechanics'; ...
'Simscape'; ...
'SIMULINK'; ...
'Simulink_Control_Design'; ...
'Simulink_Design_Verifier'; ...
'Simulink_HDL_Coder'; ...
'Simulink_Param_Estimation'; ...
'SIMULINK_Report_Gen'; ...
'SL_Verification_Validation'; ...
'Spline_Toolbox'; ...
'Stateflow'; ...
'Stateflow_Coder'; ...
'Statistics_Toolbox'; ...
'Symbolic_Toolbox'; ...
'SystemTest'; ...
'Video_and_Image_Blockset'; ...
'Virtual_Reality_Toolbox'; ...
'Wavelet_Toolbox'; ...
'XPC_Embedded_Option'; ...
'XPC_Target'};
</code></pre>
<br />
That's a lot of typing, so I'd just copy and paste from above, into your Matlab prompt.<br />
<br />
Next, we want to check that licenses exist for each of the items in the above list:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> index = cellfun(@(f) license('test',f),featureStr);
availableFeatures = featureStr(logical(index));
</code></pre>
<br />
Licences that exist are now stored in <i>availableFeatures</i>, so typing that at the prompt gives us a list of licences that are available to the installation:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> availableFeatures
</code></pre>
<br />
To see if a single license exists, we can also simply supply <i>license('test',<feature_name>) </i>with the single feature string we care about. For example:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> license('test', 'Neural_Network_Toolbox') </code></pre>
<br />
This is normally as much information as we need, but if we need to know if a licence is available to checkout at the present time, we can continue as below.<br />
<br />
<b><span style="font-size: x-small;">NB: Using <i>license('checkout',<license>)</i>, as described below,<i> </i>is not normally a good idea when using network licences, as the license will not be released until Matlab is shut down. Usually, licenses are checked out automatically, as and when they are required by a toolbox.</span></b><br />
<b><br /></b>
So far, we've found out whether or not a license exists, but not if one is presently available for us to check out. To actually checkout a license, such as the <i>Signal Toolbox</i>, we can do:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> license('checkout','Signal_Toolbox')
</code></pre>
Where <i>Signal_Toolbox </i>comes for the feature string list at the top of this post.<br />
<br />
If Matlab returns:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> ans = 1
</code></pre>
<br />
Then the license checkout was successful. We can also look at the licenses we currently have checked out out using:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> license('inuse')
</code></pre>
<br />
As usual, I hope this has been helpful, and feel free to add any notes or observations in the comments below.<br />
<br />
<b><i>References:</i></b><br />
<br />
<ol>
<li><a href="http://www.mathworks.co.uk/help/matlab/ref/license.html">Matlab documentation: license()</a></li>
<li><a href="http://www.mathworks.co.uk/matlabcentral/newsreader/view_thread/244320">Matlab newsgroup: License checking</a></li>
<li><a href="http://stackoverflow.com/questions/2060382/how-would-one-check-for-installed-matlab-toolboxes-in-a-script-function">StackOverflow: How would one check for installed MATLAB toolboxes in a script/function?</a></li>
</ol>
<br />
<br />Mathttp://www.blogger.com/profile/12333556529456840174noreply@blogger.com2tag:blogger.com,1999:blog-7265206304215695321.post-8787710721545504952012-11-06T00:47:00.000+00:002012-11-06T00:49:59.438+00:00Fixing Print Screen in Linux Mint XFCETo enable Print Screen key functionality in Linux Mint XFCE:<br />
<br />
Ensure <i>xfce4-screenshooter </i>is installed:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> sudo apt-get install xfce4-screenshooter
</code></pre>
<br />
Then, in the Menu, go to <i>Settings -> Keyboard</i> then <i>Application Shortcuts -> Add. </i>In the <i>Command</i> field, enter <i>xfce4-screenshooter</i> and then click OK, before pressing the Print Screen key on the keyboard, to set that shortcut.Mathttp://www.blogger.com/profile/12333556529456840174noreply@blogger.com0tag:blogger.com,1999:blog-7265206304215695321.post-45105541564585331902012-11-06T00:23:00.000+00:002013-02-20T16:03:53.896+00:00Remote Desktop in Ubuntu 12.04<i>This is the first post in a three part series exploring Ubuntu-based remote desktop options. See posts <a href="http://matalangilbert.blogspot.com/2013/02/linux-ubuntu-remote-desktop-cendio-thinlinc.html" target="_blank">two</a> and <a href="http://matalangilbert.blogspot.co.uk/2013/02/linux-ubuntu-remote-desktop-comparison.html" target="_blank">three</a> for further exploration and conclusions.</i><br />
<br />
In my opinion, both of the mainstream remote desktop/windowing approaches in Linux do not compare with the ease of use, and the speed of Windows remote desktop. VNC is inherently insecure, and setting up VNC over an SSH tunnel isn't the most user friendly of experiences. X forwarding over SSH is better, but in my experience there's simply too much latency when using it outside a LAN. Enter NX, or <a href="http://www.nomachine.com/">NoMachine</a> - the <strike>only</strike> Linux remote desktop solution <strike>I've come across</strike> used that isn't a pain to get up and running, and is more than fast enough to be useable.<br />
<br />
Here's what you need to do to get going with NoMachine. Below, <i>target machine</i> refers to the machine you want to connect to, and <i>client machine</i> refers to the machine you are connecting from.<br />
<br />
<b>On the target machine:</b><br />
<b><br /></b>
If it's not already installed, add openssh server to your machine:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> sudo apt-get install openssh-server
</code></pre>
<br />
Add the <a href="http://freenx.berlios.de/">FreeNX</a> repository to your system using:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> sudo add-apt-repository ppa:freenx-team
</code></pre>
<br />
Then install FreeNX with:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> sudo apt-get update
sudo apt-get install freenx
</code></pre>
<br />
As Unity3D is too heavy to use over a WAN connection, allow fallback to a gnome session:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> sudo apt-get install gnome-session-fallback </code></pre>
<br />
<b>On the client machine:</b><br />
Use the NX client of your choice - <strike>personally I used Remmina, with the Remmina NX plugin:</strike><b> Update: While Remmina works well, the offical NX client gives a lot more options - see below for more.</b><br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> sudo apt-get install remmina
sudo apt-get install remmina-plugin-nx
</code></pre>
<br />
Start Remmina, and create a new connection. You should now be able to choose to connect using the NX protocol, as seen below.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiU-5IF-3x5mtcdPLTcSy8J8uz8DFCSrgxoBycEi0x4kCi8ZJ6Tsg8eMzV_8AIfQekxG3ooR8plM6Shxcwk8ttIxhhUQp7uZzH6RPwuQeuWAL5XU-KPaxFkWU6NCNhPVKmTBBkeJNo_znc/s1600/remmina-nx.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiU-5IF-3x5mtcdPLTcSy8J8uz8DFCSrgxoBycEi0x4kCi8ZJ6Tsg8eMzV_8AIfQekxG3ooR8plM6Shxcwk8ttIxhhUQp7uZzH6RPwuQeuWAL5XU-KPaxFkWU6NCNhPVKmTBBkeJNo_znc/s320/remmina-nx.png" width="256" /></a></div>
<br />
Enter the target machine's IP address into the server field, and the username and password of the user account you wish to connect to. Hit connect and after a few moments your remote desktop will open.<br />
<br />
<br />
You can also use the <a href="http://www.nomachine.com/download.php">official NX client</a>, and if you're connecting from Windows or Mac, that's probably easiest. For Linux, the official client download and install instructions are currently <a href="http://www.nomachine.com/download-package.php?Prod_Id=3831">here</a>.<br />
<br />
<br />
I've not yet had the chance to experiment, but it may be possible to run the NX client from a different desktop on the target machine - if so, then this would make NX a complete, drop in replacement for Windows remote desktop, as far as I can see. Which is no bad thing, as other than the obvious proprietary graphics issues Linux can suffer from, a decent RDP implementation was the only only key feature I've noticeably missed since moving to Linux full-time (yes, there's X forwarding over SSH, but even with compression there's still too much lag to be usable over my connections). <b>Update: </b>It looks like the official NX client has a shadowing mode - again, I've not yet tested it, but it may be useful for the above.<br />
<br />
<i>Update Nov-16-2012: As noted in the comments, <a href="http://www.cendio.com/">Cendio</a> also offer a Linux remote desktop solution - after testing and comparing, my thoughts can be found in <a href="http://matalangilbert.blogspot.com/2013/02/linux-ubuntu-remote-desktop-cendio-thinlinc.html" target="_blank">post two</a>.</i><br />
<i><br /></i>
<i><br /></i>Mathttp://www.blogger.com/profile/12333556529456840174noreply@blogger.com3tag:blogger.com,1999:blog-7265206304215695321.post-32104501420151458332012-11-05T14:33:00.001+00:002012-11-05T14:33:55.415+00:00Installing the latest version of R into Debian StableThe R packages available in the Debian repository are are little out of date - to install the latest (stable) version we need to add a backports repository. Just follow the steps below!<br />
<br />
Open the sources list with:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> sudo nano /etc/apt/sources.list
</code></pre>
<br />
Then add this line to the bottom of the file (use your favourite mirror if desired):<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> deb http://cran.ma.imperial.ac.uk/bin/linux/debian squeeze-cran/
</code></pre>
<br />
The Debian backports are signed with the key of "Johannes Ranke (CRAN Debian archive) <<a href="mailto:jranke@uni-bremen.de">jranke@uni-bremen.de</a>>", with key ID 381BA480 . Import this using:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> sudo apt-key adv --keyserver subkeys.pgp.net --recv-key 381BA480
</code></pre>
<br />
Then, update the packages cache - this should complete without errors.<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> sudo apt-get update
</code></pre>
<br />
Finally, install R and the R recommended packages using:
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> sudo apt-get r-base r-recommended
</code></pre>
<br />
To check the version of R that is now installed, use:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> R --version
</code></pre>
<br />
To start R, simply type<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> R
</code></pre>
<br />
at a command prompt. As usual, let me know of any issues or problems in the comments below.Mathttp://www.blogger.com/profile/12333556529456840174noreply@blogger.com0tag:blogger.com,1999:blog-7265206304215695321.post-18961394467022148142012-09-27T15:46:00.001+01:002012-10-10T21:25:47.049+01:00Problems with R and RGtk2I ran across this issue while installing <a href="http://rattle.togaware.com/">Rattle</a>, a data mining library for the statistical programming language <a href="http://www.r-project.org/" target="_blank">R</a>, on to a Debian system. When installing the package RGtk2, seeing the below error means that your GTK version is not the version required by RGtk2.<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> * installing *source* package ‘RGtk2’ ...
** package ‘RGtk2’ successfully unpacked and MD5 sums checked
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for INTROSPECTION... no
checking for GTK... no
configure: error: GTK version 2.8.0 required
ERROR: configuration failed for package ‘RGtk2’
</code></pre>
<br />
The required version can be found in <i>libgtk2.0-dev</i>, so install this using your preferred package manager - for example using <i>apt-get</i>:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> sudo apt-get install libgtk2.0-dev
</code></pre>
<br />
Then reload R and:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> install.packages('RGtk2')
</code></pre>
<br />
Now, after the installation has finished, you should see:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> * DONE (RGtk2)
</code></pre>
<br />
As usual, let me know if it works for you in the comments below.<br />
<br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><b>If you like this blog, and use R for statistical processing, you can help support my writing by purchasing a book from my <a href="http://matalangilbert.blogspot.co.uk/p/blog-page.html" target="_blank">bookstore</a>. For both beginning and more advanced R users, I'd recommend <a href="http://www.amazon.co.uk/gp/search/ref=as_li_qf_sp_sr_tl?ie=UTF8&camp=1634&creative=6738&index=aps&keywords=Kenneth%20Knoblauch&linkCode=ur2&tag=maalgiitno-21" target="_blank">Kenneth Knoblauch</a><img alt="" border="0" height="1" src="https://www.assoc-amazon.co.uk/e/ir?t=maalgiitno-21&l=ur2&o=2" style="border: none !important; margin: 0px !important;" width="1" />.</b></span><br />
<br />Mathttp://www.blogger.com/profile/12333556529456840174noreply@blogger.com9tag:blogger.com,1999:blog-7265206304215695321.post-4685200826483427292012-09-20T16:25:00.001+01:002012-09-20T16:25:34.302+01:00Install the latest version of R in UbuntuThe R version in the Ubuntu repositories is not the latest, so here's how to install R into Ubuntu 12.04:<br />
<br />
Add the SSL key and import into apt:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> gpg --keyserver keyserver.ubuntu.com --recv-key E084DAB9
gpg -a --export E084DAB9 | sudo apt-key add -
</code></pre>
<br />
Add the repository to your sources list, by doing:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> sudo nano /etc/apt/sources.list
</code></pre>
<br />
Then add this line to the bottom of the sources file:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> deb http://cran.ma.imperial.ac.uk/bin/linux/ubuntu precise/
</code></pre>
<br />
Then, to install the latest version of R, do:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> sudo apt-get update
sudo apt-get install r-base
</code></pre>
<br />
Hit yes at the prompts, and voila, the latest version of R is installed!Mathttp://www.blogger.com/profile/12333556529456840174noreply@blogger.com0tag:blogger.com,1999:blog-7265206304215695321.post-90389598095862573992012-09-10T15:37:00.000+01:002012-09-10T15:56:19.424+01:00Great gEdit Theme RepositoryI'm a fan of light on dark backgrounds when writing or coding, and Githubber <i>kalmi </i>maintains a great collection of gEdit (the default text editor in Gnome) themes - they can be found here: <a href="https://github.com/kalmi/gedit-themes">https://github.com/kalmi/gedit-themes</a><br />
<br />
To use, clone the repo into a temporary directory, using:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> git clone https://github.com/kalmi/gedit-themes.git
</code></pre>
<br />
Then copy them into a styles folder in the gEdit directory, using the install script from the repo:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> cd gedit-themes
./install.sh
</code></pre>
<br />
To use them, open gEdit, then go to <i>Edit -> Preferences -> Fonts and Colours</i>. The themes should now be available in the <i>Colour Scheme</i> scroll box.<br />
<br />
Enjoy!Mathttp://www.blogger.com/profile/12333556529456840174noreply@blogger.com1tag:blogger.com,1999:blog-7265206304215695321.post-44515634295242946852012-07-19T17:14:00.000+01:002012-07-19T17:14:13.683+01:00Mounting an executable CD Drive in LinuxI ran into the below problem while installing Matlab onto a Linux machine. Hopefully this will help someone else!<br />
<br />
On most modern Linux systems, CD drives are automatically mounted. The problem comes when they are mounted without any exec permissions - this means that any scripts, etc on the CD, or .iso, will be unable to run. To resolve this, follow the steps below:
<br />
<div>
</div>
<div>
<ol>
<li>Find the name of your mounted CD drive by using:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> mount
</code></pre>
</li>
<li>Then remount the device with the exec bit set:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> mount -o remount,exec $DEVICE</code></pre>
</li>
</ol>
<div>
Where <i>$DEVICE </i>is the name of the CD drive.</div>
</div>
<div>
<br /></div>
<div>
You'll then be able to run all executables on the drive - in my case, the Matlab executable was then launched using the below commands:</div>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> $ su
$ /path/to/mounted/cdrom/./install
</code></pre>
<div>
<br />
Remember to logout as root when the installer has finished!<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnATl-PbpCG4Tu41jfrYnA8b5JFcoXFsY46bXmNodVA-6yIthCZXr6EYk_FZupH2A8Xoger9eGUNFy3clXi4ZegLI4l_JLMy0TTcAgpvUwyXwx1k69o5jYwq9L2LTO2C2CKYtBTrHLKSDe/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> logout
</code></pre>
<br /></div>Mathttp://www.blogger.com/profile/12333556529456840174noreply@blogger.com1tag:blogger.com,1999:blog-7265206304215695321.post-10432802309644280322012-07-18T11:24:00.000+01:002012-12-13T17:06:12.428+00:00Betty and George - an overview<script>
!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");
</script>
<br />
<div>
<i>This is the first in a series of posts detailing my latest hobby project. The bulk of the work was completed in under 10 hours, with minor styling tweaks taking a little longer to get right. The project is <span style="background-color: white;">currently hosted</span><span style="background-color: white;"> </span><a href="http://hollow-flower-9984.herokuapp.com/" target="_blank">here</a><span style="background-color: white;">, and the source code is on Github </span><a href="https://github.com/matalangilbert/betty-and-george#readme" target="_blank">here</a><span style="background-color: white;">. As usual, please post any comments or opinions in the comments below, or tweet me directly <a href="http://www.twitter.com/matalangilbert" target="_blank">@matalangilbert</a>.</span></i><br />
<br /></div>
<h4>
<b>Introduction</b></h4>
<div>
<a href="http://hollow-flower-9984.herokuapp.com/" target="_blank">Betty and George</a> are Artificial Intelligence entities - they chat with each other in real time, and, somewhat incredibly in my opinion, make sense most of the time! They're sometimes witty, sometimes poignant, and sometimes inane, but they keep talking, no matter what!</div>
<h4>
<b><br /></b></h4>
<h4>
<b>Technical Overview</b></h4>
<div>
The application is split into two main parts. The backend is a <span style="background-color: white;">Ruby program managing two Cleverbot instances (</span><a href="http://www.cleverbot.com/" id="" shape="rect" style="background-color: white;" target="_blank">http://www.cleverbot.com</a><span style="background-color: white;">), juggling responses between each instance. There's not too much to this, but I will go over the technical details in a future post.</span></div>
<div>
<span style="background-color: white;"><br /></span></div>
<div>
<span style="background-color: white;">Each conversational response is posted</span><span style="background-color: white;"> to a Rails application endpoint by the Ruby program, and then the front-end takes over. The frontend is backed by a Rails application, which receives data from the Ruby program, and displays it on the <a href="http://hollow-flower-9984.herokuapp.com/" target="_blank">live site</a>. There's a couple of neat techniques used on the main application page, which update the page in the background. The first is a background AJAX request, which hits the server every 5 seconds, retrieving new responses and adding them to the top of the scrolling conversation on the site. The second is an "Endless River of News" style endless scroll implementation. This invisibly loads more of the conversation as the user scrolls down the page, in much the same way as Twitter and other sites do. Individually, neither of these techniques are particularly new on their own, but combining them seamlessly was technically satisfying. I'll talk more about these techniques in a dedicated future post.</span></div>
<h4>
<span style="background-color: white;"><br /></span></h4>
<h4>
<span style="background-color: white;">Hosting</span></h4>
<div>
At present, both the conversation program and the Rails application are hosted at <a href="http://www.heroku.com/" target="_blank">Heroku</a>. A future post will detail a few of the technical subtleties I discovered while deploying the live Betty and George website.</div>
<div>
<br /></div>
<div>
<h4>
<b>Now visit Betty and George!</b></h4>
</div>
<div>
<span style="background-color: white;">OK, so this was just a brief overview of the Betty and George architecture - now go <a href="http://hollow-flower-9984.herokuapp.com/" target="_blank">check them out</a>, and let me know what you think in the comments below!</span></div>
<div>
<span style="background-color: white;"><br /></span></div>
<div>
<br /></div>
Mathttp://www.blogger.com/profile/12333556529456840174noreply@blogger.com0