{"id":618,"date":"2012-06-11T13:48:44","date_gmt":"2012-06-11T18:48:44","guid":{"rendered":"https:\/\/blogs.mathworks.com\/steve\/?p=618"},"modified":"2018-01-08T16:03:49","modified_gmt":"2018-01-08T21:03:49","slug":"new-blog-cleves-corner","status":"publish","type":"post","link":"https:\/\/blogs.mathworks.com\/steve\/2012\/06\/11\/new-blog-cleves-corner\/","title":{"rendered":"New blog &#8211; Cleve&#8217;s Corner!"},"content":{"rendered":"<div class=\"content\"><p>All of us MathWorkers who hang out on MATLAB Central are very excited that MATLAB creator and MathWorks cofounder <a href=\"https:\/\/www.mathworks.com\/company\/aboutus\/founders\/clevemoler.html\">Cleve Moler<\/a> has just become the <a href=\"https:\/\/blogs.mathworks.com\/cleve\">latest MATLAB Central blogger<\/a>.<\/p><p>I think I first started to get to know a little bit about Cleve from the Usenet newsgroup <a>comp.soft-sys.matlab<\/a>, which I started eagerly reading when it was formed at the beginning of 1993. Cleve posted <a href=\"https:\/\/groups.google.com\/group\/comp.soft-sys.matlab\/browse_thread\/thread\/e662a11142f24784\/cb217995ec74f7ce?hl=en&amp;q=group:comp.soft-sys.matlab+author:moler#cb217995ec74f7ce\">\"Hello from MathWorks\"<\/a> the first week, and he's been a very active participant ever since.<\/p><p>I met Cleve in person in September 1993 when I interviewed at MathWorks. I vaguely recall that he asked me if I knew anything about the use of wavelets and fractals for image compression, but mostly he wanted to show off the cool new secret stuff MathWorks was working on for the Symbolic Math Toolbox.<\/p><p>I mostly worked on the Image Processing Toolbox back then, but I sought Cleve's advice for one of my earliest contributions to MATLAB. I thought it might be beneficial for the <tt>filter2<\/tt> function to automatically determine if the input filter is separable. (See my <a href=\"https:\/\/blogs.mathworks.com\/steve\/2006\/10\/04\/separable-convolution\/\">04-Oct-2006 post<\/a> on separable convolution.) Cleve explained to me how the <tt>rank<\/tt> function works and advised me on numerical issues and speed trade-offs. We decided to make the change, and it's been there ever since.<\/p><p>Cleve also helped me early on with an image processing algorithm. Someone suggested to me that we could fill in (or replace) pixels in a particular region by modeling it like a soap-film problem. That is, if you form wire in the shape of the pixel values (as heights) around the region to be filled, what shape would a soap film take inside the wire? I did a little searching (in books; the World Wide Web was still just a couple of years old) and found that I needed a solution where each pixel equals the average value of its north, east, south, and west neighbors, subject to boundary conditions based on the pixel values around the edge of the region. I programmed an iterative algorithm that worked, but it was quite slow.<\/p><p>When I asked Cleve for his advice, he said, \"Isn't that a sparse system? Why don't you just use backslash?\"<\/p><p>[head slap] Of course!<\/p><p>He was very nice about it, so I was only a little embarrassed.<\/p><p>I could go on and on about Cleve. However, he doesn't like it when people make a fuss about him, so he's probably already mad at me.<\/p><p>One more thought before I wrap this up. Anybody interested in how MATLAB came to be should watch Cleve's <a href=\"https:\/\/www.mathworks.com\/videos\/origins-of-matlab-70332.html\">Origins of MATLAB video<\/a>. He spins a great yarn.<\/p><p>Hey, Cleve - I've got two numbers whose average is three. What are they?<\/p><script language=\"JavaScript\"> <!-- \r\n    function grabCode_7aba314ec517418daa4d2e4066f08a0b() {\r\n        \/\/ Remember the title so we can use it in the new page\r\n        title = document.title;\r\n\r\n        \/\/ Break up these strings so that their presence\r\n        \/\/ in the Javascript doesn't mess up the search for\r\n        \/\/ the MATLAB code.\r\n        t1='7aba314ec517418daa4d2e4066f08a0b ' + '##### ' + 'SOURCE BEGIN' + ' #####';\r\n        t2='##### ' + 'SOURCE END' + ' #####' + ' 7aba314ec517418daa4d2e4066f08a0b';\r\n    \r\n        b=document.getElementsByTagName('body')[0];\r\n        i1=b.innerHTML.indexOf(t1)+t1.length;\r\n        i2=b.innerHTML.indexOf(t2);\r\n \r\n        code_string = b.innerHTML.substring(i1, i2);\r\n        code_string = code_string.replace(\/REPLACE_WITH_DASH_DASH\/g,'--');\r\n\r\n        \/\/ Use \/x3C\/g instead of the less-than character to avoid errors \r\n        \/\/ in the XML parser.\r\n        \/\/ Use '\\x26#60;' instead of '<' so that the XML parser\r\n        \/\/ doesn't go ahead and substitute the less-than character. \r\n        code_string = code_string.replace(\/\\x3C\/g, '\\x26#60;');\r\n\r\n        copyright = 'Copyright 2012 The MathWorks, Inc.';\r\n\r\n        w = window.open();\r\n        d = w.document;\r\n        d.write('<pre>\\n');\r\n        d.write(code_string);\r\n\r\n        \/\/ Add copyright line at the bottom if specified.\r\n        if (copyright.length > 0) {\r\n            d.writeln('');\r\n            d.writeln('%%');\r\n            if (copyright.length > 0) {\r\n                d.writeln('% _' + copyright + '_');\r\n            }\r\n        }\r\n\r\n        d.write('<\/pre>\\n');\r\n\r\n        d.title = title + ' (MATLAB code)';\r\n        d.close();\r\n    }   \r\n     --> <\/script><p style=\"text-align: right; font-size: xx-small; font-weight:lighter;   font-style: italic; color: gray\"><br><a href=\"javascript:grabCode_7aba314ec517418daa4d2e4066f08a0b()\"><span style=\"font-size: x-small;        font-style: italic;\">Get \r\n      the MATLAB code <noscript>(requires JavaScript)<\/noscript><\/span><\/a><br><br>\r\n      Published with MATLAB&reg; 7.14<br><\/p><p class=\"footer\"><br>\r\n      Published with MATLAB&reg; 7.14<br><\/p><\/div><!--\r\n7aba314ec517418daa4d2e4066f08a0b ##### SOURCE BEGIN #####\r\n%%\r\n% All of us MathWorkers who hang out on MATLAB Central are very excited\r\n% that MATLAB creator and MathWorks cofounder\r\n% <https:\/\/www.mathworks.com\/company\/aboutus\/founders\/clevemoler.html Cleve\r\n% Moler> has just become the <https:\/\/blogs.mathworks.com\/cleve latest\r\n% MATLAB Central blogger>.\r\n%\r\n% I think I first started to get to know a little bit about Cleve from the\r\n% Usenet newsgroup <http:\/\/\r\n% comp.soft-sys.matlab>, which I started eagerly reading when it was formed\r\n% at the beginning of 1993. Cleve posted\r\n% <https:\/\/groups.google.com\/group\/comp.soft-sys.matlab\/browse_thread\/thread\/e662a11142f24784\/cb217995ec74f7ce?hl=en&q=group:comp.soft-sys.matlab+author:moler#cb217995ec74f7ce\r\n% \"Hello from MathWorks\"> the first week, and he's been a very active\r\n% participant ever since.\r\n%\r\n% I met Cleve in person in September 1993 when I interviewed at MathWorks.\r\n% I vaguely recall that he asked me if I knew anything about the use of\r\n% wavelets and fractals for image compression, but mostly he wanted to show\r\n% off the cool new secret stuff MathWorks was working on for the Symbolic\r\n% Math Toolbox.\r\n%\r\n% I mostly worked on the Image Processing Toolbox back then, but I sought\r\n% Cleve's advice for one of my earliest contributions to MATLAB. I thought\r\n% it might be beneficial for the |filter2| function to automatically\r\n% determine if the input filter is separable. (See my\r\n% <https:\/\/blogs.mathworks.com\/steve\/2006\/10\/04\/separable-convolution\/\r\n% 04-Oct-2006 post> on separable convolution.) Cleve explained to me how\r\n% the |rank| function works and advised me on numerical issues and speed\r\n% trade-offs. We decided to make the change, and it's been there ever\r\n% since.\r\n%\r\n% Cleve also helped me early on with an image processing algorithm. Someone\r\n% suggested to me that we could fill in (or replace) pixels in a particular\r\n% region by modeling it like a soap-film problem. That is, if you form wire\r\n% in the shape of the pixel value (as heights) around the region to be\r\n% filled, what shape would a soap film take inside the wire? I did a little\r\n% searching (in books; the World Wide Web was still just a couple of years\r\n% old) and found that I needed a solution where each pixel equals the\r\n% average value of its north, east, south, and west neighbors, subject to\r\n% boundary conditions based on the pixel values around the edge of the\r\n% region. I programmed an iterative algorithm that worked, but it was quite\r\n% slow.\r\n%\r\n% When I asked Cleve for his advice, he said, \"Isn't that a sparse system?\r\n% Why don't you just use backslash?\"\r\n%\r\n% [head slap] Of course!\r\n%\r\n% He was very nice about it, so I was only a little embarrassed.\r\n%\r\n% I could go on and on about Cleve. However, he doesn't like it when people\r\n% make a fuss about him, so he's probably already mad at me.\r\n%\r\n% One more thought before I wrap this up. Anybody interested in how MATLAB\r\n% came to be should watch Cleve's\r\n% <https:\/\/www.mathworks.com\/videos\/origins-of-matlab-70332.html\r\n% Origins of MATLAB video>. He spins a great yarn.\r\n%\r\n% Hey, Cleve - I've got two numbers whose average is three. What are\r\n% they?\r\n\r\n\r\n##### SOURCE END ##### 7aba314ec517418daa4d2e4066f08a0b\r\n-->","protected":false},"excerpt":{"rendered":"<p>All of us MathWorkers who hang out on MATLAB Central are very excited that MATLAB creator and MathWorks cofounder Cleve Moler has just become the latest MATLAB Central blogger.I think I first started... <a class=\"read-more\" href=\"https:\/\/blogs.mathworks.com\/steve\/2012\/06\/11\/new-blog-cleves-corner\/\">read more >><\/a><\/p>","protected":false},"author":42,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/posts\/618"}],"collection":[{"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/users\/42"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/comments?post=618"}],"version-history":[{"count":11,"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/posts\/618\/revisions"}],"predecessor-version":[{"id":2758,"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/posts\/618\/revisions\/2758"}],"wp:attachment":[{"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/media?parent=618"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/categories?post=618"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/tags?post=618"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}