My first exposure was during my national service back in the early 90’s.
Most of my national-service work used other programming environments, not MATLAB. We only used MATLAB occasionally, for simulations. I started using MATLAB regularly when I left the service in the late 90’s and worked on my Master’s thesis. By then, I had already programmed in other environments for many years, so it was easy for me to start using MATLAB right away. You could say that it was love at 2nd sight – I loved MATLAB’s ease-of-use that did not come at the expense of programming power, and discovered that I could do things in MATLAB with a fraction of the effort that other programming languages would require. When I discovered MATLAB hidden internals I got hooked for good.
I created a MATLAB program to configure, analyze, backtest, track, and automatically trade market-neutral pairs of securities. The user can interactively define custom trading strategies using a GUI (graphical user interface), without needing to code the strategies (coding hooks are available but not required). There are other programs and websites with similar functionality, but creating a relatively complex commercial-grade program from scratch and then using it gave me a lot of professional satisfaction and I’m feeling especially proud of the achievement. Along the way I discovered that I’m less successful as a trader, so I’ll stick to programming for the time being.
When I started using MATLAB regularly in the late 90’s, there was minimal user engagement on the MathWorks website. Most of the community action was on the now-defunct CSSM (com.soft-sys.matlab) newsgroup (RIP), where I found fascinating coding nuggets that I stored for later use. Over the years, these nuggets multiplied until they eventually materialized into my Undocumented MATLAB website a decade later. I started lurking on CSSM and became increasingly active on it over time. CSSM was integrated in the MathWorks website (in the “Newsreader” section), so I quickly started using other parts of the website. I became an avid adopter of the MATLAB Central File Exchange (FX), first as a passive downloader, and later actively, when I started uploading utilities. Some of my early submissions (Cprintf and Findjobj, for example) received very positive ratings and feedbacks. This gave me a tremendous incentive to upload additional files and improve them based on user feedbacks and requests.
To this day I continue to download terrific File Exchange user submissions that assist my work. I also often learn new techniques and ideas from utilities, especially those by highly-rated users, whom I highly respect.
In addition to File Exchange, I use MATLAB Answers, where I often find great answers to things like “how can I do <this-or-that>?” – It turns out that in many cases somebody has already asked what I wanted and received multiple excellent answers in response. So it’s a great resource that saves a lot of work and enables me to learn new things, such as MATLAB functions I was not aware of, or clever ways of using the built-in MATLAB functionality.
I created this utility in the early 2000’s to provide access to the Java components underlying MATLAB’s user interface controls such as figure, toolbar, menubar and uicontrols. It turns out that numerous important customizations could be done at the Java level that are impossible to achieve at the documented MATLAB level. This enables creating a user interface using MATLAB’s easy-to-use tools and programming, and then customize the interface with professional-looking customizations, all within the MATLAB program. I found the tight and intuitive integration between MATLAB and Java very useful for this, and enables customizing Java-based UI components without needing to know Java at all. The Findjobj utility received great reviews, and is highly-downloaded and rated to this day. I enjoyed updating and improving it over the years, and have spent many hundreds of hours on it. It was a challenge to increase functionality and speed without sacrificing ease-of-use. The utility’s end-of-life is now in sight, with MATLAB’s UI moving away from Java towards a web-based interface. Still, it’s been a great 20 years for this utility, far beyond what I originally envisioned. I’m immensely proud of it.
I’m also very proud of my undocumentedmatlab.com website. I have posted hundreds of freely-available articles on advanced undocumented aspects of MATLAB since 2009.
This is a great implementation that is an absolute necessity for anyone who creates a serious MATLAB user interface with Java-based figures (not uifigures or App Designer). For anyone willing to get their hands dirty and look under the hood, the GUI Layout Toolbox codebase is a showcase for good MATLAB programming practices and documentation. Their brilliance of designing a draggable split-pane handle using a modified checkbox control was an amazing inspiration for me of thinking outside the box (pun intended).
I manage an independent MATLAB consultancy that supports clients with their MATLAB needs, such as program development, code optimization, maintenance work, training, and technical advice. I work with MATLAB all day long, sometimes even 80+ hours a week, supporting customers and end-users having MATLAB versions ranging between R2008a and the very latest pre-release.
Most customers know me from my undocumentedmatlab.com website, which is one of the top search results in many MATLAB-related web queries. The typical customer has used the website several times over the years for various advanced MATLAB tips, so when they need some non-trivial professional assistance they naturally ask me to assist them. I get several such queries each day. Many customers later return with additional requests, and for them my acquisition efforts are obviously minimal.
The relationship I had with MathWorks was always complicated, because of my publications of undocumented aspects. On one hand, my work answered a real need of MATLAB users; on the other hand, MathWorks did not want to appear as endorsing it, and perhaps they were afraid of leaking information to me that I might then publish, and not entirely sure of my motives. For quite a few years I was “semi-radioactive” and the communication between myself and MathWorks was mostly one-sided, from me to them. Over the years, I guess I made a good impression and the restrictions lifted bit by bit. I was asked to author several technical articles that appeared in MathWorks newsletters, invited to speak at MathWorks conferences, received endorsement for my second book Accelerating MATLAB Performance, invited to participate at several closed MathWorks events, invited to join the Community Advisory Board (CAB), and asked to assist in several important R&D efforts. I am now in constant communication with different MathWorks teams and managers, assisting in many ways that will never become known, but will hopefully improve the MATLAB product for the benefit of all users.
I wish to emphasize that anything I post on undocumented aspects was discovered independently, or was already published by MathWorks somewhere, for example, as part of the open code that ships with MATLAB. I never post anything that MathWorks tells me in confidence.
I wanted to be part of the Partners Program for many years, but this was not possible until recently because of MathWorks’ reluctance to appear as endorsing my work on undocumented MATLAB aspects. Over the years this fear has subsided and several MathWorks managers who knew me well supported my submission. I was finally admitted into the program in 2020.
I offer customers assistance with integrating MATLAB with their workflows and existing programs. I also offer MATLAB consulting, training and program development, to ensure that customers make the most of their MATLAB software.
In addition, I offer commercial off-the-shelf connectors to several financial services (such as Interactive Brokers, CQG, DTN IQFeed, and EOD Historical Data), helping MATLAB customers accelerate their program development and deployment.
Being a member of CAB is both an honor and a calling for me. As a CAB member, I can influence the development of community aspects (MATLAB Central) in the MathWorks website, as well as the MATLAB product itself, with the aim of representing the needs of the entire MATLAB user community in the best possible way. Being part of a group with some of the most talented MATLAB professionals outside MathWorks is truly humbling. I feel that the synergy in our meetings is great, each member contributing with different viewpoints based on their experience in very different sectors. In my opinion the diversity and wide experience of CAB members really helps. We meet online each quarter, but we also communicate among ourselves through different means.
In addition to hundreds of well-researched articles on undocumentedmatlab.com, I’ve written two MATLAB textbooks and edited a third.
Undocumented Secrets of MATLAB-Java Programming is my first book . I discuss MATLAB’s undocumented use of Java components and how MATLAB users can leverage this to easily make their MATLAB program achieve a more professional appearance and behavior, as well as integrating with 3rd-party Java libraries.
Accelerating MATLAB Performance is my second book. It aims to dispel a widely-held and entirely incorrect notion that MATLAB is inherently slow, and therefore cannot be used for heavy processing or deployed applications. Unlike my first book, this book focuses on documented MATLAB aspects. For this reason, it was endorsed by MathWorks via their book program, for which I’m very grateful. I’m currently preparing a second edition of the book, which will hopefully appear next year.
export_fig is a File Exchange utility that enables saving, printing and publishing screenshots of MATLAB charts and figure windows in publication quality. It was created in 2008 and at that time, anti-aliasing was not used by default, plot lines appeared in sub-standard resolution and so on, which necessitated a lot of manual post-processing work on the exported images before they could be accepted for publication. export_fig solved this problem by automatically configuring the necessary parameters and post-processing the results. The utility was an almost instant success and one of the most highly-rated and highly-downloaded utilities on the MATLAB Central File Exchange.
It was originally created by Oliver Woodford in 2008, and was expanded and supported by him until 2014. In 2014, Oliver posted on the MATLAB newsgroup that he’s retiring from active maintenance and asked for volunteers willing to take over this task. I volunteered and was happy that Oliver chose me to continue his work. I’ve maintained and improved the utility ever since.
Maintaining such a high-profile open-source utility as export_fig is challenging. I need to test every small change very carefully, keeping in mind that there are numerous users of the program who use either old or recent MATLAB releases; on different supported MATLAB platforms (MacOS and Linux users are a sizable chunk); with multiple possible installed Ghostscript versions (which is used for vectorized PDF/EPS outputs); with programs that worked with older versions of export_fig that must be backward compatible; with programs exporting to protected folders, and so on.
In some cases, problems are reported that end up being the result of built-in MATLAB limitations (the issue of “white lines” in solid patches, for example), and it is not always easy or possible to find a programmatic workaround. In other cases, it was a challenge to speed-up the export in case multiple exports were requested or when exporting a heavily-laden figure.
Then again, the satisfaction of solving a difficult technical challenge is a big motivator.
I’m very happy that export_fig is still as popular today as it was in the early days. MATLAB has certainly improved its built-in export quality since then, but so has export_fig
Mentoring my kids, who are all very talented: one of them (18) has recently started a Master’s degree in Biomedicine with a top honors scholarship; another (11) expects to take high-school matriculation exams this year and started taking Computer Science BSc courses. Maybe one day they’ll go to England or Boston for PhD studies and work for MathWorks – that could be a nice closure of the circle of life for me.
To leave a comment, please click here to sign in to your MathWorks Account or create a new one.