<rss version="2.0">
  <channel>
    <title>XTargets Matlab Snippets: Code Repository </title>
    <link>http://xtargets.com/snippets/</link>
    <description>XTargets Matlab Snippets: Code Repository </description>
    <item>
      <title>need help</title>
      <link>http://xtargets.com/snippets/posts/show/95</link>
      <description>Can any one have any idea ..........about mouse programming.....in MATLAB.................&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In 3 Dimensions.......means 3D point generation/line/curve etc.......using mouse.</description>
      <pubDate>Tue May 13 07:02:51 +0000 2008</pubDate>
    </item>
    <item>
      <title>Snippets is being retired</title>
      <link>http://xtargets.com/snippets/posts/show/94</link>
      <description>Have moved to a new blog engine and a new url.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://xtargets.com/blog"&gt;http://xtargets.com/blog&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This site will stay live for historical purposes but no new content will be added.</description>
      <pubDate>Sun Apr 20 13:03:10 +0000 2008</pubDate>
    </item>
    <item>
      <title> Radio Frequency Kill Switch is On ( Acer Wireless Stops Working )</title>
      <link>http://xtargets.com/snippets/posts/show/93</link>
      <description>Today I opened up my three year old acer 3002wlmi laptop to vacuum all the dust out of it in a vain attempt to make the fan a little quieter and the box to run a little less hot. &lt;br /&gt;&lt;br /&gt;The vacuuming semi successful I turn the box back on, running Ubuntu 7.10 (Feisty), only to find that the wireless networking is not recognized. The horror of life without internet suddenly struck me. However I found in my bag of bits and old Netgear USB wireless stick. I didn't have much faith in it working but I plugged it in and it worked immediately.&lt;br /&gt;&lt;br /&gt;However how to get my built-in wireless working. I ran dmesg and found the following.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span class="sym"&gt;[&lt;/span&gt; &lt;span class="num"&gt;124.663287&lt;/span&gt;&lt;span class="sym"&gt;]&lt;/span&gt; ipw2200&lt;span class="sym"&gt;:&lt;/span&gt; Radio Frequency Kill &lt;span class="kwa"&gt;Switch&lt;/span&gt; is On&lt;span class="sym"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;span class="sym"&gt;[&lt;/span&gt; &lt;span class="num"&gt;124.663290&lt;/span&gt;&lt;span class="sym"&gt;]&lt;/span&gt; Kill &lt;span class="kwa"&gt;switch&lt;/span&gt; must be turned off &lt;span class="kwa"&gt;for&lt;/span&gt; wireless networking to work.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;After nosing around the newsgroups I ended up running the following commands.&lt;br /&gt;mod ipw2200&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sudo rmmod ipw2200&lt;br /&gt;sudo modprobe fsam7400&lt;br /&gt;sudo su&lt;br /&gt;sudo modprobe ipw2200&lt;br /&gt;echo_ &lt;span class="str"&gt;&amp;quot;1&amp;quot;&lt;/span&gt; &lt;span class="sym"&gt;&amp;gt; /&lt;/span&gt;proc&lt;span class="sym"&gt;/&lt;/span&gt;driver&lt;span class="sym"&gt;/&lt;/span&gt;wireless&lt;span class="sym"&gt;/&lt;/span&gt;radio&lt;br /&gt;exit&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Not sure if I needed all the above. The line starting "echo" is definitely needed as that is what is started the wireless radio again.&lt;br /&gt;&lt;br /&gt;Now all is working again but the fan still runs loud and the box is hot.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Update&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The above all gets cleared on reboot. To make it permanent&lt;br /&gt;do.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sudo echo_ fsam7400 &lt;span class="sym"&gt;&amp;gt;&amp;gt; /&lt;/span&gt;etc&lt;span class="sym"&gt;/&lt;/span&gt;modules&lt;br /&gt;sudo echo_ options fsam7400 radio&lt;span class="sym"&gt;=&lt;/span&gt;&lt;span class="num"&gt;1&lt;/span&gt; &lt;span class="sym"&gt;&amp;gt;&amp;gt;&lt;/span&gt; etc&lt;span class="sym"&gt;/&lt;/span&gt;modprob.d&lt;span class="sym"&gt;/&lt;/span&gt;options&lt;br /&gt;&lt;/pre&gt;</description>
      <pubDate>Wed Apr 16 05:03:04 +0000 2008</pubDate>
    </item>
    <item>
      <title>Liquid Planner : Project Management Tool</title>
      <link>http://xtargets.com/snippets/posts/show/92</link>
      <description>I have been looking for a project management tool for ages, one that doesn't make me curl up inside and want to die and one that helps my team get stuff done rather than waste their time.&lt;br /&gt;&lt;br /&gt;Finally stumbled across &lt;a href="htpp://liquidplanner.com"&gt;Liquid Planner&lt;/a&gt; which turns out to be an amazing little tool. &lt;br /&gt;&lt;br /&gt;The features that I really like are&lt;br /&gt;&lt;br /&gt;* Range estimation for tasks.&lt;br /&gt;* Category vs Project views.&lt;br /&gt;&lt;br /&gt;LP takes a novel approach to planning. Instead of giving a single point estimate. ie this task will take 10d to complete I estimate that the task will take between 8d and 12d to complete. This uncertainty is percolated up into the estimates for the rollup tasks and eventually to the estimate for the entire project. Range estimates fit my brain better than single point estimates and I think they make me more honest.&lt;br /&gt;&lt;br /&gt;The second feature I like is that there are two views of the system. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The category view allows you to do a functional decomposition of the project. Containers can be nested and are navigable via a tree view. So this view is great for design and requirements capture.&lt;br /&gt;&lt;br /&gt;The "project view" is again a tree view but items higher up on the screen and containers represent milestones. Containers are nested so you can model intermediate deliverables or sprints within you greater plan.&lt;br /&gt;&lt;br /&gt;The project view is orthogonal to the category view and this is important because when designing a view you want to see the functional layout. When planning you want to see the order in which things need to be delivered.&lt;br /&gt;&lt;br /&gt;This has solved my one gripe about other tools I see. They are either good for requirements capture or good for scheduling but never for both.&lt;br /&gt;&lt;br /&gt;Scheduling works quite well. It performs resource leveling and supports precedes and depends on dependencies. Scheduling is done in the background and you are notified by an icon when the scheduling is finished and you should refresh the screen. &lt;br /&gt;&lt;br /&gt;On the downside, here in Europe the site is a bit sluggish but to be fair they are still in beta and the devs seems quite responsive on the forums. As it is in beta it is currently free to sign up to but will eventually cost about $25 USD per user per month. Fair enough if it saves me an hour a month in time.&lt;br /&gt;&lt;br /&gt;As a final note the site is a Ruby On Rails application which may excite or turn some people off depending on their religion :)&lt;br /&gt;&lt;br /&gt;</description>
      <pubDate>Wed Apr 02 19:39:42 +0000 2008</pubDate>
    </item>
    <item>
      <title>Joining technorati</title>
      <link>http://xtargets.com/snippets/posts/show/91</link>
      <description>&lt;a href="http://technorati.com/claim/zuhtnmkfyx" rel="me"&gt;Technorati Profile&lt;/a&gt;</description>
      <pubDate>Thu Mar 20 20:45:33 +0000 2008</pubDate>
    </item>
    <item>
      <title>Matlab onCleanup fatally flawed?</title>
      <link>http://xtargets.com/snippets/posts/show/90</link>
      <description>Matlab 2008a provides a new function &lt;br /&gt;&lt;br /&gt;&lt;a href="http://tinyurl.com/2ewah4"&gt;onCleanup&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Loren Shure writes about it here http://blogs.mathworks.com/loren/&lt;br /&gt;&lt;br /&gt;However I think the class is fatally flawed.&lt;br /&gt;&lt;br /&gt;As I read the Matlab documentation the implementation of onCleanup is fatally flawed and I don’t think anybody should use it unless some things can be clarified.&lt;br /&gt;&lt;br /&gt;According to the Matlab &lt;a href="http://tinyurl.com/2drurc"&gt;documentation&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;‘the lifecycle of an object ends *sometime* between the time its variable is no longer used inside the function and the end of the function’&lt;br /&gt;&lt;br /&gt;The implementation of onCleanup seems to rely on a subtly different interpretation of object lifecyle.&lt;br /&gt;&lt;br /&gt;‘the lifecycle of an object ends at the end of the function within which it’s last reference is lost’&lt;br /&gt;&lt;br /&gt;This means the following example&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span class="kwa"&gt;function&lt;/span&gt; y &lt;span class="sym"&gt;=&lt;/span&gt; run4&lt;br /&gt;&lt;span class="slc"&gt;% run4 processes an image file.&lt;/span&gt;&lt;br /&gt;&lt;span class="sym"&gt;[&lt;/span&gt;fid&lt;span class="sym"&gt;,&lt;/span&gt;C&lt;span class="sym"&gt;] =&lt;/span&gt; openImageFile4&lt;span class="sym"&gt;();&lt;/span&gt;&lt;br /&gt;blocksize &lt;span class="sym"&gt;=&lt;/span&gt; &lt;span class="num"&gt;100&lt;/span&gt;&lt;span class="sym"&gt;;&lt;/span&gt;&lt;br /&gt;y &lt;span class="sym"&gt;= [];&lt;/span&gt;&lt;br /&gt;&lt;span class="kwa"&gt;while&lt;/span&gt; something&lt;br /&gt; dat &lt;span class="sym"&gt;=&lt;/span&gt; &lt;span class="kwb"&gt;fread&lt;/span&gt;&lt;span class="sym"&gt;(&lt;/span&gt;fid&lt;span class="sym"&gt;,&lt;/span&gt;count&lt;span class="sym"&gt;);&lt;/span&gt;&lt;br /&gt; y &lt;span class="sym"&gt;=&lt;/span&gt; doSomething&lt;span class="sym"&gt;(&lt;/span&gt;y&lt;span class="sym"&gt;,&lt;/span&gt;dat&lt;span class="sym"&gt;);&lt;/span&gt;&lt;br /&gt; something &lt;span class="sym"&gt;=&lt;/span&gt; update&lt;span class="sym"&gt;(&lt;/span&gt;something&lt;span class="sym"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span class="kwa"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;is broken.&lt;br /&gt;&lt;br /&gt;According to Matlab spec C could be deleted any time after it appears in the line&lt;br /&gt;&lt;br /&gt;[fid,C] = openImageFile4();&lt;br /&gt;&lt;br /&gt;thus deleting the file handle whilst it was being used. It looks like a classic race condition problem.&lt;br /&gt;&lt;br /&gt;To be safe you could rewrite the code&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span class="kwa"&gt;function&lt;/span&gt; y &lt;span class="sym"&gt;=&lt;/span&gt; run4&lt;br /&gt;&lt;span class="slc"&gt;% run4 processes an image file.&lt;/span&gt;&lt;br /&gt;&lt;span class="sym"&gt;[&lt;/span&gt;fid&lt;span class="sym"&gt;,&lt;/span&gt;C&lt;span class="sym"&gt;] =&lt;/span&gt; openImageFile4&lt;span class="sym"&gt;();&lt;/span&gt;&lt;br /&gt;blocksize &lt;span class="sym"&gt;=&lt;/span&gt; &lt;span class="num"&gt;100&lt;/span&gt;&lt;span class="sym"&gt;;&lt;/span&gt;&lt;br /&gt;y &lt;span class="sym"&gt;= [];&lt;/span&gt;&lt;br /&gt;&lt;span class="kwa"&gt;while&lt;/span&gt; something&lt;br /&gt;…dat &lt;span class="sym"&gt;=&lt;/span&gt; &lt;span class="kwb"&gt;fread&lt;/span&gt;&lt;span class="sym"&gt;(&lt;/span&gt;fid&lt;span class="sym"&gt;,&lt;/span&gt;count&lt;span class="sym"&gt;);&lt;/span&gt;&lt;br /&gt;…y &lt;span class="sym"&gt;=&lt;/span&gt; doSomething&lt;span class="sym"&gt;(&lt;/span&gt;y&lt;span class="sym"&gt;,&lt;/span&gt;dat&lt;span class="sym"&gt;);&lt;/span&gt;&lt;br /&gt;…something &lt;span class="sym"&gt;=&lt;/span&gt; update&lt;span class="sym"&gt;(&lt;/span&gt;something&lt;span class="sym"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span class="kwa"&gt;end&lt;/span&gt;&lt;br /&gt;C&lt;span class="sym"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;But somehow I see the Matlab optimiser at some time in the future stripping out such dead code and rendering the trick useless anyway.&lt;br /&gt;&lt;br /&gt;Stylistically it is also not obvious to a reader of the code what C is being used for and it’s inclusion in the code could easily be deleted by an eager maintainer unless the ode is accompanied by copious documentation.&lt;br /&gt;&lt;br /&gt;There are however neater ways to solve the same problem in other languages.&lt;br /&gt;&lt;br /&gt;The Python way:&lt;br /&gt;&lt;br /&gt;http://docs.python.org/whatsnew/pep-343.html&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;with &lt;span class="kwa"&gt;open&lt;/span&gt;&lt;span class="sym"&gt;(&lt;/span&gt;’&lt;span class="sym"&gt;/&lt;/span&gt;etc&lt;span class="sym"&gt;/&lt;/span&gt;passwd’&lt;span class="sym"&gt;,&lt;/span&gt; ‘r’&lt;span class="sym"&gt;)&lt;/span&gt; as f&lt;span class="sym"&gt;:&lt;/span&gt;&lt;br /&gt; &lt;span class="kwb"&gt;for&lt;/span&gt; line &lt;span class="kwb"&gt;in&lt;/span&gt; f&lt;span class="sym"&gt;:&lt;/span&gt;&lt;br /&gt; &lt;span class="kwb"&gt;print&lt;/span&gt; line&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;lexical scoping is used to clarify the required lifetime of the file handle f. As well if any exception is thrown from within the block the file is also closed.&lt;br /&gt;&lt;br /&gt;The Ruby way:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;File&lt;span class="sym"&gt;.&lt;/span&gt;open ‘&lt;span class="sym"&gt;/&lt;/span&gt;etc&lt;span class="sym"&gt;/&lt;/span&gt;passwd’ &lt;span class="kwa"&gt;do&lt;/span&gt; &lt;span class="sym"&gt;|&lt;/span&gt;f&lt;span class="sym"&gt;|&lt;/span&gt;&lt;br /&gt; f&lt;span class="sym"&gt;.&lt;/span&gt;each_line &lt;span class="kwa"&gt;do&lt;/span&gt; &lt;span class="sym"&gt;|&lt;/span&gt;l&lt;span class="sym"&gt;|&lt;/span&gt;&lt;br /&gt; puts l&lt;br /&gt; &lt;span class="kwa"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="kwa"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Very similar to the python way and again there is no requirement by the user to provide any cleanup or close functionality. In case of normal block termination or in the event of an error the open function will *always* close the file handle when the block terminates.&lt;br /&gt;&lt;br /&gt;The onCleanup functionality could also be dealt with by adding an ensure keyword to the Matlab language as has Ruby and Python.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span class="kwa"&gt;function&lt;/span&gt; do_open&lt;span class="sym"&gt;(&lt;/span&gt;file&lt;span class="sym"&gt;,&lt;/span&gt; flags&lt;span class="sym"&gt;,&lt;/span&gt; action&lt;span class="sym"&gt;)&lt;/span&gt;&lt;br /&gt; fid &lt;span class="sym"&gt;=&lt;/span&gt; &lt;span class="kwb"&gt;fopen&lt;/span&gt;&lt;span class="sym"&gt;(&lt;/span&gt;file&lt;span class="sym"&gt;,&lt;/span&gt; flags&lt;span class="sym"&gt;)&lt;/span&gt;&lt;br /&gt; &lt;span class="kwa"&gt;try&lt;/span&gt;&lt;br /&gt; action&lt;span class="sym"&gt;(&lt;/span&gt;fid&lt;span class="sym"&gt;)&lt;/span&gt;&lt;br /&gt; ensure&lt;br /&gt; &lt;span class="kwb"&gt;fclose&lt;/span&gt;&lt;span class="sym"&gt;(&lt;/span&gt;fid&lt;span class="sym"&gt;)&lt;/span&gt;&lt;br /&gt; &lt;span class="kwa"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="kwa"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Notice there is no catch above. We don’t want to catch an error we just want to *ensure* that we cleanup if there is an error or not. Any error is propagated to code further upstream to handle. The ensure can be substituted with a catch and rethrow but is a bit uglier as you need to write code to handle closing the file if and if not an error occurs.&lt;br /&gt;&lt;br /&gt;Using do_open in Matlab would be like&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;do_open&lt;span class="sym"&gt;(&lt;/span&gt;’&lt;span class="sym"&gt;/&lt;/span&gt;etc&lt;span class="sym"&gt;/&lt;/span&gt;passwd’&lt;span class="sym"&gt;,&lt;/span&gt; ‘r’&lt;span class="sym"&gt;,&lt;/span&gt; &amp;#64;body&lt;span class="sym"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="kwa"&gt;function&lt;/span&gt; body&lt;span class="sym"&gt;(&lt;/span&gt;fid&lt;span class="sym"&gt;)&lt;/span&gt;&lt;br /&gt; read&lt;span class="sym"&gt;(&lt;/span&gt;fid&lt;span class="sym"&gt;,&lt;/span&gt; &lt;span class="num"&gt;10&lt;/span&gt;&lt;span class="sym"&gt;)&lt;/span&gt;&lt;br /&gt; function_with_error&lt;span class="sym"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span class="kwa"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;As is obvious the function definition is kind of superfluous and would be nicer with some kind of multi line anonymous function&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;do_open&lt;span class="sym"&gt;(&lt;/span&gt;’&lt;span class="sym"&gt;/&lt;/span&gt;etc&lt;span class="sym"&gt;/&lt;/span&gt;passwd’&lt;span class="sym"&gt;,&lt;/span&gt; ‘r’ &lt;span class="sym"&gt;)&lt;/span&gt; &amp;#64;&lt;span class="sym"&gt;(&lt;/span&gt;fid&lt;span class="sym"&gt;)&lt;/span&gt;&lt;br /&gt; read&lt;span class="sym"&gt;(&lt;/span&gt;fid&lt;span class="sym"&gt;,&lt;/span&gt; &lt;span class="num"&gt;10&lt;/span&gt;&lt;span class="sym"&gt;)&lt;/span&gt;&lt;br /&gt; function_with_error&lt;span class="sym"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span class="kwa"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt; &lt;br /&gt;</description>
      <pubDate>Thu Mar 20 20:14:51 +0000 2008</pubDate>
    </item>
    <item>
      <title>C++ lambdas</title>
      <link>http://xtargets.com/snippets/posts/show/89</link>
      <description>I've just noticed that the C++0x standard has just accepted lambda functions as part of the upcoming standard. So you will be able to do&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;std&lt;span class="sym"&gt;::&lt;/span&gt;vector&lt;span class="sym"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kwb"&gt;int&lt;/span&gt;&lt;span class="sym"&gt;&amp;gt;&lt;/span&gt; someList&lt;span class="sym"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwb"&gt;int&lt;/span&gt; total &lt;span class="sym"&gt;=&lt;/span&gt; &lt;span class="num"&gt;0&lt;/span&gt;&lt;span class="sym"&gt;;&lt;/span&gt;&lt;br /&gt;std&lt;span class="sym"&gt;::&lt;/span&gt;&lt;span class="kwd"&gt;for_each&lt;/span&gt;&lt;span class="sym"&gt;(&lt;/span&gt;someList&lt;span class="sym"&gt;.&lt;/span&gt;&lt;span class="kwd"&gt;begin&lt;/span&gt;&lt;span class="sym"&gt;(),&lt;/span&gt; someList&lt;span class="sym"&gt;.&lt;/span&gt;&lt;span class="kwd"&gt;end&lt;/span&gt;&lt;span class="sym"&gt;(), &amp;lt;&amp;gt;(&lt;/span&gt;&lt;span class="kwb"&gt;int&lt;/span&gt; x&lt;span class="sym"&gt;) : [&amp;amp;&lt;/span&gt;total&lt;span class="sym"&gt;] (&lt;/span&gt;total &lt;span class="sym"&gt;+=&lt;/span&gt; x&lt;span class="sym"&gt;));&lt;/span&gt;&lt;br /&gt;std&lt;span class="sym"&gt;::&lt;/span&gt;cout &lt;span class="sym"&gt;&amp;lt;&amp;lt;&lt;/span&gt; total&lt;span class="sym"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;It actually comes in two forms, an expression form where a return value is not required for one line quickies and a function form which is surrounded by curly braces and requires a return statement.&lt;br /&gt;&lt;br /&gt;Note that Matlab only allows the expression form. Multi line anonymous functions are not possible which is quite strange and limiting.&lt;br /&gt;&lt;br /&gt;See &lt;a href="http://en.wikipedia.org/wiki/C%2B%2B0x#Lambda_functions_and_expressions&gt;wikipedia&lt;/a&gt; for more details.&lt;br /&gt;</description>
      <pubDate>Mon Mar 10 21:38:06 +0000 2008</pubDate>
    </item>
    <item>
      <title>Matlab 2008a</title>
      <link>http://xtargets.com/snippets/posts/show/88</link>
      <description>I don't do much Matlab these days but it is nice to see that release 2008a is out with the much waited for object oriented additions.&lt;br /&gt;&lt;br /&gt;It is definitely something that will make programming Matlab much easier for larger applications and do away with many of the hacks which I have illustrated myself on this website. However I am not sure I like the verbosity of the OO features. &lt;br /&gt;&lt;br /&gt;For example there are provisions for &lt;br /&gt;&lt;br /&gt;- attributes&lt;br /&gt;- events&lt;br /&gt;- methods&lt;br /&gt;- listeners&lt;br /&gt;&lt;br /&gt;whereas in Ruby you can make do with just instance variables and methods, the rest being sorted out with meta programming tricks. Mentioning metaprogramming I don't see any facility for this within the documentation though it is probably there under the hood. &lt;br /&gt;&lt;br /&gt;Also not sure why you are restricted to creating classes in files. It would be neat and generally usefully to be able to create classes at the command line and/or multiple classes per file as is possible in Ruby/Python.&lt;br /&gt;&lt;br /&gt;I also noted a boo boo in the documentation. Some doc writer claims that Matlab is weakly typed, when in fact they mean dynamically typed as opposed the to statically typed.&lt;br /&gt;&lt;br /&gt;Matalb is strongly and dynamically typed whereas C/C++ is weakly and statically typed.&lt;br /&gt;&lt;br /&gt;A simple example from the Mathworks home page&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;classdef BankAccount &lt;span class="sym"&gt;&amp;lt;&lt;/span&gt; handle&lt;br /&gt; properties &lt;span class="sym"&gt;(&lt;/span&gt;&lt;span class="kwb"&gt;Hidden&lt;/span&gt;&lt;span class="sym"&gt;)&lt;/span&gt;&lt;br /&gt; AccountStatus &lt;span class="sym"&gt;=&lt;/span&gt; &lt;span class="str"&gt;'open'&lt;/span&gt;&lt;span class="sym"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span class="kwa"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="slc"&gt;% The following properties can be set only by class methods&lt;/span&gt;&lt;br /&gt; properties &lt;span class="sym"&gt;(&lt;/span&gt;SetAccess &lt;span class="sym"&gt;=&lt;/span&gt; private&lt;span class="sym"&gt;)&lt;/span&gt;&lt;br /&gt; AccountNumber&lt;br /&gt; AccountBalance &lt;span class="sym"&gt;=&lt;/span&gt; &lt;span class="num"&gt;0&lt;/span&gt;&lt;span class="sym"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span class="kwa"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="slc"&gt;% Define an event called InsufficientFunds&lt;/span&gt;&lt;br /&gt; events&lt;br /&gt; InsufficientFunds&lt;br /&gt; &lt;span class="kwa"&gt;end&lt;/span&gt;&lt;br /&gt; methods&lt;br /&gt; &lt;span class="kwa"&gt;function&lt;/span&gt; BA &lt;span class="sym"&gt;=&lt;/span&gt; BankAccount&lt;span class="sym"&gt;(&lt;/span&gt;AccountNumber&lt;span class="sym"&gt;,&lt;/span&gt;InitialBalance&lt;span class="sym"&gt;)&lt;/span&gt;&lt;br /&gt; BA.AccountNumber &lt;span class="sym"&gt;=&lt;/span&gt; AccountNumber&lt;span class="sym"&gt;;&lt;/span&gt;&lt;br /&gt; BA.AccountBalance &lt;span class="sym"&gt;=&lt;/span&gt; InitialBalance&lt;span class="sym"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="slc"&gt;% Calling a static method requires the class name&lt;/span&gt;&lt;br /&gt;&lt;span class="slc"&gt;% addAccount registers the InsufficientFunds listener on this instance&lt;/span&gt;&lt;br /&gt; AccountManager.addAccount&lt;span class="sym"&gt;(&lt;/span&gt;BA&lt;span class="sym"&gt;);&lt;/span&gt;&lt;br /&gt; &lt;span class="kwa"&gt;end&lt;/span&gt;&lt;br /&gt; &lt;span class="kwa"&gt;function&lt;/span&gt; deposit&lt;span class="sym"&gt;(&lt;/span&gt;BA&lt;span class="sym"&gt;,&lt;/span&gt;amt&lt;span class="sym"&gt;)&lt;/span&gt;&lt;br /&gt; BA.AccountBalance &lt;span class="sym"&gt;=&lt;/span&gt; BA.AccountBalance &lt;span class="sym"&gt;+&lt;/span&gt; amt&lt;span class="sym"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span class="kwa"&gt;if&lt;/span&gt; BA.AccountBalance &lt;span class="sym"&gt;&amp;gt;&lt;/span&gt; &lt;span class="num"&gt;0&lt;/span&gt;&lt;br /&gt; BA.AccountStatus &lt;span class="sym"&gt;=&lt;/span&gt; &lt;span class="str"&gt;'open'&lt;/span&gt;&lt;span class="sym"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span class="kwa"&gt;end&lt;/span&gt;&lt;br /&gt; &lt;span class="kwa"&gt;end&lt;/span&gt;&lt;br /&gt; &lt;span class="kwa"&gt;function&lt;/span&gt; withdraw&lt;span class="sym"&gt;(&lt;/span&gt;BA&lt;span class="sym"&gt;,&lt;/span&gt;amt&lt;span class="sym"&gt;)&lt;/span&gt;&lt;br /&gt; &lt;span class="kwa"&gt;if&lt;/span&gt; &lt;span class="sym"&gt;(&lt;/span&gt;&lt;span class="kwb"&gt;strcmp&lt;/span&gt;&lt;span class="sym"&gt;(&lt;/span&gt;BA.AccountStatus&lt;span class="sym"&gt;,&lt;/span&gt;&lt;span class="str"&gt;'closed'&lt;/span&gt;&lt;span class="sym"&gt;)&amp;amp;&amp;amp;&lt;/span&gt; BA.AccountBalance &lt;span class="sym"&gt;&amp;lt;&lt;/span&gt; &lt;span class="num"&gt;0&lt;/span&gt;&lt;span class="sym"&gt;)&lt;/span&gt;&lt;br /&gt; &lt;span class="kwa"&gt;disp&lt;/span&gt;&lt;span class="sym"&gt;([&lt;/span&gt;&lt;span class="str"&gt;'Account '&lt;/span&gt;&lt;span class="sym"&gt;,&lt;/span&gt;&lt;span class="kwb"&gt;num2str&lt;/span&gt;&lt;span class="sym"&gt;(&lt;/span&gt;BA.AccountNumber&lt;span class="sym"&gt;),&lt;/span&gt;&lt;span class="str"&gt;' has been closed.'&lt;/span&gt;&lt;span class="sym"&gt;])&lt;/span&gt;&lt;br /&gt; &lt;span class="kwa"&gt;return&lt;/span&gt;&lt;br /&gt; &lt;span class="kwa"&gt;end&lt;/span&gt;&lt;br /&gt; newbal &lt;span class="sym"&gt;=&lt;/span&gt; obj.AccountBalance &lt;span class="sym"&gt;-&lt;/span&gt; amt&lt;span class="sym"&gt;;&lt;/span&gt;&lt;br /&gt; BA.AccountBalance &lt;span class="sym"&gt;=&lt;/span&gt; newbal&lt;span class="sym"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="slc"&gt;% If a withdrawal results in a negative balance,&lt;/span&gt;&lt;br /&gt;&lt;span class="slc"&gt;% trigger the InsufficientFunds event using notify&lt;/span&gt;&lt;br /&gt; &lt;span class="kwa"&gt;if&lt;/span&gt; newbal &lt;span class="sym"&gt;&amp;lt;&lt;/span&gt; &lt;span class="num"&gt;0&lt;/span&gt;&lt;br /&gt; notify&lt;span class="sym"&gt;(&lt;/span&gt;BA&lt;span class="sym"&gt;,&lt;/span&gt;&lt;span class="str"&gt;'InsufficientFunds'&lt;/span&gt;&lt;span class="sym"&gt;)&lt;/span&gt;&lt;br /&gt; &lt;span class="kwa"&gt;end&lt;/span&gt;&lt;br /&gt; &lt;span class="kwa"&gt;end&lt;/span&gt; &lt;span class="slc"&gt;% withdraw&lt;/span&gt;&lt;br /&gt; &lt;span class="kwa"&gt;end&lt;/span&gt; &lt;span class="slc"&gt;% methods&lt;/span&gt;&lt;br /&gt;&lt;span class="kwa"&gt;end&lt;/span&gt; &lt;span class="slc"&gt;% classdef&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;See &lt;a href="http://www.mathworks.com"&gt;Mathworks&lt;/a&gt; for more information.&lt;br /&gt;&lt;br /&gt;</description>
      <pubDate>Sun Mar 09 21:31:57 +0000 2008</pubDate>
    </item>
    <item>
      <title>Demangling C++ type information at run time</title>
      <link>http://xtargets.com/snippets/posts/show/87</link>
      <description>Here's a nice way to print the type of an object to an ostream. Handy during debugging when you have nested template horrors shriveling your brain.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="dir"&gt;#include &amp;lt;cxxabi.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwc"&gt;template&lt;/span&gt; &lt;span class="sym"&gt;&amp;lt;&lt;/span&gt;typename T&lt;span class="sym"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwb"&gt;struct&lt;/span&gt; TypeInfo &lt;span class="sym"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;span class="kwc"&gt;friend&lt;/span&gt; std&lt;span class="sym"&gt;::&lt;/span&gt;ostream &lt;span class="sym"&gt;&amp;amp;&lt;/span&gt;&lt;br /&gt; &lt;span class="kwc"&gt;operator&lt;/span&gt; &lt;span class="sym"&gt;&amp;lt;&amp;lt;(&lt;/span&gt;std&lt;span class="sym"&gt;::&lt;/span&gt;ostream &lt;span class="sym"&gt;&amp;amp;&lt;/span&gt; os&lt;span class="sym"&gt;,&lt;/span&gt; TypeInfo&lt;span class="sym"&gt;&amp;lt;&lt;/span&gt;T&lt;span class="sym"&gt;&amp;gt;&lt;/span&gt; t&lt;span class="sym"&gt;){&lt;/span&gt;&lt;br /&gt; &lt;span class="kwb"&gt;const&lt;/span&gt; std&lt;span class="sym"&gt;::&lt;/span&gt;type_info &lt;span class="sym"&gt;&amp;amp;&lt;/span&gt; ti &lt;span class="sym"&gt;=&lt;/span&gt; &lt;span class="kwc"&gt;typeid&lt;/span&gt;&lt;span class="sym"&gt;(&lt;/span&gt;T&lt;span class="sym"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; &lt;span class="kwb"&gt;int&lt;/span&gt; status&lt;span class="sym"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span class="kwb"&gt;char&lt;/span&gt; &lt;span class="sym"&gt;*&lt;/span&gt; realname &lt;span class="sym"&gt;=&lt;/span&gt; abi&lt;span class="sym"&gt;::&lt;/span&gt;&lt;span class="kwd"&gt;__cxa_demangle&lt;/span&gt;&lt;span class="sym"&gt;(&lt;/span&gt;ti&lt;span class="sym"&gt;.&lt;/span&gt;&lt;span class="kwd"&gt;name&lt;/span&gt;&lt;span class="sym"&gt;(),&lt;/span&gt; &lt;span class="num"&gt;0&lt;/span&gt;&lt;span class="sym"&gt;,&lt;/span&gt; &lt;span class="num"&gt;0&lt;/span&gt;&lt;span class="sym"&gt;, &amp;amp;&lt;/span&gt;status&lt;span class="sym"&gt;);&lt;/span&gt;&lt;br /&gt; os &lt;span class="sym"&gt;&amp;lt;&amp;lt;&lt;/span&gt; realname&lt;span class="sym"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span class="kwd"&gt;free&lt;/span&gt;&lt;span class="sym"&gt;(&lt;/span&gt;realname&lt;span class="sym"&gt;);&lt;/span&gt;&lt;br /&gt; &lt;span class="kwa"&gt;return&lt;/span&gt; os&lt;span class="sym"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; &lt;span class="sym"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="sym"&gt;};&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;use as&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;std&lt;span class="sym"&gt;::&lt;/span&gt;cout &lt;span class="sym"&gt;&amp;lt;&amp;lt;&lt;/span&gt; TypeInfo&lt;span class="sym"&gt;&amp;lt;&lt;/span&gt;std&lt;span class="sym"&gt;::&lt;/span&gt;vector&lt;span class="sym"&gt;&amp;lt;&lt;/span&gt;std&lt;span class="sym"&gt;::&lt;/span&gt;vector&lt;span class="sym"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kwb"&gt;int&lt;/span&gt;&lt;span class="sym"&gt;&amp;gt; &amp;gt; &amp;gt;() &amp;lt;&amp;lt;&lt;/span&gt; std&lt;span class="sym"&gt;::&lt;/span&gt;endl&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;will print&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;std::vector&amp;lt;std::vector&amp;lt;int, std::allocator&amp;lt;int&amp;gt; &amp;gt;, std::allocator&amp;lt;std::vector&amp;lt;int, std::allocator&amp;lt;int&amp;gt; &amp;gt; &amp;gt; &amp;gt;&lt;br /&gt;&lt;/strong&gt;</description>
      <pubDate>Fri Feb 15 11:58:38 +0000 2008</pubDate>
    </item>
    <item>
      <title>Convert a string to anything using a function.</title>
      <link>http://xtargets.com/snippets/posts/show/86</link>
      <description>Not sure where this would be usefull but was playing around with the C++ cast operator and came up with this gem. Allows you to assign a string to any type in the declaration.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#&lt;span class="sym"&gt;!&lt;/span&gt;c&lt;span class="sym"&gt;++!&lt;/span&gt;#&lt;br /&gt;&lt;br /&gt;int a &lt;span class="sym"&gt;=&lt;/span&gt; strconv&lt;span class="sym"&gt;(&lt;/span&gt;&lt;span class="str"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;&lt;span class="sym"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwa"&gt;struct&lt;/span&gt; strconv &lt;span class="sym"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;span class="kwb"&gt;std&lt;/span&gt;&lt;span class="sym"&gt;::&lt;/span&gt;string s&lt;span class="sym"&gt;;&lt;/span&gt;&lt;br /&gt; Convert&lt;span class="sym"&gt;(&lt;/span&gt;&lt;span class="kwb"&gt;std&lt;/span&gt;&lt;span class="sym"&gt;::&lt;/span&gt;string s&lt;span class="sym"&gt;):&lt;/span&gt;s&lt;span class="sym"&gt;(&lt;/span&gt;s&lt;span class="sym"&gt;){&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; &lt;span class="sym"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; template &lt;span class="sym"&gt;&amp;lt;&lt;/span&gt;typename T&lt;span class="sym"&gt;&amp;gt;&lt;/span&gt; operator T &lt;span class="sym"&gt;( ){&lt;/span&gt;&lt;br /&gt; &lt;span class="kwb"&gt;std&lt;/span&gt;&lt;span class="sym"&gt;::&lt;/span&gt;istringstream ss&lt;span class="sym"&gt;(&lt;/span&gt;s&lt;span class="sym"&gt;);&lt;/span&gt;&lt;br /&gt; T t&lt;span class="sym"&gt;;&lt;/span&gt;&lt;br /&gt; ss &lt;span class="sym"&gt;&amp;gt;&amp;gt;&lt;/span&gt; t&lt;span class="sym"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span class="kwa"&gt;return&lt;/span&gt; t&lt;span class="sym"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span class="sym"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="sym"&gt;};&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;</description>
      <pubDate>Thu Feb 14 16:45:36 +0000 2008</pubDate>
    </item>
  </channel>
</rss>
