Я на guide забил очень быстро, после того, как осознал, что он хранит результат в бинарном .fig файле, который совершенно не читается ничем. Соответственно, никакого source control, никакого поиска, вообще ничего. В appDesigner немногим, но всё же лучше - там тоже бинарный формат, но это zip/text, поэтому можно как минимум искать (например, через Total Commander), а при большом желании и настроить внешние системы source control, чтобы они могли сравнивать разные версии (встроенная система вроде как уже работает, но она сама настолько стрёмная, что я предпочитаю работать со внешними клиентами).
В итоге лично мне больше нравится вариант, когда GUI создаётся не ручками, а кодом. Весь функционал GUIDE доступен через функции uicontrol сотоварищи. И результат получается существенно красивее - как минимум проще сделать выравнивание контролов по одному уровню, или одинаковые расстояния между ними. Менять стили проще - мы сделали класс UIToolbox, который дублирует все команды uicontrol, выставляя кучу параметров по умолчанию, например стиль / цвет / шрифт. В этой схеме для того, чтобы перевести всё приложение на новый визуальный стиль достаточно (ну... почти достаточно) переписать этот класс, не трогая всего остального кода - можно представить себе объём работы при аналогичной задаче, когда весь GUI сделан через guide ...
Я, может быть, неправильно понимаю ваш комментарий. Но если мы о сценарии, когда IT-шник получил кредит под 5%, купил квартиру, сдал её кому-то, а сам уехал в условную Францию, продолжая выплачивать 5% в Россию - я не особо вижу смысл это делать. Проще купить квартиру под 1% во Франции и точно так же сдавать её, нет разве? Это именно что мера по удержанию в стране. Ну а что малоэффективная - что смогли сделать, то и сделали.
Это, конечно, грамотная мера по удержанию IT-шников от эмиграции - выдать те же деньги увеличением зарплаты не так привязывает к территории, как покупка квартиры в кредит. Но с другой стороны, в Европе (лично знаю про Францию) ставка по кредитам на недвижимость ~1%. Не говоря уже об уровне зарплаты и общей востребованности.
Спасибо, полезные тексты. Я сам давно работаю на связке Matlab + SVN - примерно тот же принцип, просто исторически так сложилось, что не git.
По поводу сравнения бинарных файлов. Понятно, что в каких-то случаях сам MatLab умеет сравнивать, но для этого приходится жорглировать между двумя утилитами (ваш git desktop или мой tortoise svn - и сам MatLab). Я одно время пытался разобраться, как настроить сравнение непосредственно в утилите, будь то git или svn. Подавляющее большинство "наших" бинарных файлов на самом деле - zip-архивы со множеством xml. И в подавляющем случае сравнения этих xml-файлов было бы достаточно, чтобы понять природу изменения. И вроде как даже и git, и svn поддерживают обработку на лету каких-то форматов, то есть существует возможность сделать предварительную обработку (разархивирование) файла перед сравнением - и пост-обработку (обратное архивирование) после изменений, например в процессе merge.
Но я так и не смог разобраться с тем, как это работает :-/ Так что продолжаю работать так, как у вас описано. Ну и по возможности избегаю бинарных файлов (в MatLab в отличие от SimuLink это достаточно просто, хотя LiveScripts иногда и жаль).
Да, действительно, я не до такой степени вылизываю свои графики :-)
Единственное, что могу сказать — букву (d) можно легко поставить через annotation, со всем остальным не сталкивался…
У меня каждый график отрисовывается огромное количество раз — каждый раз, когда нашёл баг в коде, ошибку в данных, сделал другую гипотезу и т.п. Поэтому нереально делать неавтоматизированный workflow — график готовится в момент первого вывода данных, а в итоговый документ вставится вариант из последнего запуска программы.
Мне пока что хватало стандартных средств MatLab. Расскажите, что вы не нашли, может помогу чем?
А кто-нибудь знает, как в MatLab синхронизировать две оси Y? То есть, у меня есть два графика, у каждого своя ось Y (слева и справа), и я хотел бы сделать так, чтобы у них, например, совпадали начала отсчёта. Или какие-то другие, заданные мною точки, были бы напротив друг друга. Есть, конечно, вариант всё просчитать самому (YLim, YTicks и т.п.), но наверняка же я не первый человек, столкнувшийся с этой проблемой, вполне возможно, есть уже какая-то работающая функция…
Я видел очень мало приличной литературы «для программистов», всё скорее «для инженеров, которые не знают, что такое „переменная“, но очень хотят программировать». Из полезного — блоги на MathWorks, особенно Loren on the Art of MatLab — встречаются и банальные для программиста темы (объясняла как-то, что такое RegExp), но есть и крайне полезные, неожиданные для меня темы (про индексирование интересно рассказывала, см. одноимённый таг).
Я регулярно использую .NET из MatLab (внешний генератор экономических сценариев), но как-то не хватает понимания того, что конкретно происходит с типами данных. В каких случаях .NET методы возвращают .NET типы, а в каких данные имплицитно конвертируются в типы MatLab. Не подскажешь, что почитать по этому поводу (и спасибо за описание конвертирования матриц в обе стороны — пригодится!)
Переходя к практике: может кто-нибудь посоветовать настраиваемую утилиту форматирования кода? Потому что всё описанное (в части оформления кода) — это хорошо, но когда стандартные IDE не помогают вообще, сложно разношерстную команду подбить под одни правила. Или там, унаследовав от предыдущей команды сотню классов в произвольном форматировании, не хочется терять часы на форматирование ручками.
P.S. У меня конкретно MatLab, но я готов потратить время на конфигурацию готового продукта. Писать с нуля парсер не готов.
Совершенно верно. Нисколько не пытаясь принизить гений Тьюринга или Реевского, помогал только прямой перебор. Я у себя в ЖЖ законспектировал книгу на эту тему.
Какая-то проблема с RSS Хабра, этот пост (и следующий анонс) появились в RSS только сегодня.
Я на guide забил очень быстро, после того, как осознал, что он хранит результат в бинарном .fig файле, который совершенно не читается ничем. Соответственно, никакого source control, никакого поиска, вообще ничего. В appDesigner немногим, но всё же лучше - там тоже бинарный формат, но это zip/text, поэтому можно как минимум искать (например, через Total Commander), а при большом желании и настроить внешние системы source control, чтобы они могли сравнивать разные версии (встроенная система вроде как уже работает, но она сама настолько стрёмная, что я предпочитаю работать со внешними клиентами).
В итоге лично мне больше нравится вариант, когда GUI создаётся не ручками, а кодом. Весь функционал GUIDE доступен через функции uicontrol сотоварищи. И результат получается существенно красивее - как минимум проще сделать выравнивание контролов по одному уровню, или одинаковые расстояния между ними. Менять стили проще - мы сделали класс UIToolbox, который дублирует все команды uicontrol, выставляя кучу параметров по умолчанию, например стиль / цвет / шрифт. В этой схеме для того, чтобы перевести всё приложение на новый визуальный стиль достаточно (ну... почти достаточно) переписать этот класс, не трогая всего остального кода - можно представить себе объём работы при аналогичной задаче, когда весь GUI сделан через guide ...
Я, может быть, неправильно понимаю ваш комментарий. Но если мы о сценарии, когда IT-шник получил кредит под 5%, купил квартиру, сдал её кому-то, а сам уехал в условную Францию, продолжая выплачивать 5% в Россию - я не особо вижу смысл это делать. Проще купить квартиру под 1% во Франции и точно так же сдавать её, нет разве? Это именно что мера по удержанию в стране. Ну а что малоэффективная - что смогли сделать, то и сделали.
Это, конечно, грамотная мера по удержанию IT-шников от эмиграции - выдать те же деньги увеличением зарплаты не так привязывает к территории, как покупка квартиры в кредит. Но с другой стороны, в Европе (лично знаю про Францию) ставка по кредитам на недвижимость ~1%. Не говоря уже об уровне зарплаты и общей востребованности.
Спасибо, полезные тексты. Я сам давно работаю на связке Matlab + SVN - примерно тот же принцип, просто исторически так сложилось, что не git.
По поводу сравнения бинарных файлов. Понятно, что в каких-то случаях сам MatLab умеет сравнивать, но для этого приходится жорглировать между двумя утилитами (ваш git desktop или мой tortoise svn - и сам MatLab). Я одно время пытался разобраться, как настроить сравнение непосредственно в утилите, будь то git или svn. Подавляющее большинство "наших" бинарных файлов на самом деле - zip-архивы со множеством xml. И в подавляющем случае сравнения этих xml-файлов было бы достаточно, чтобы понять природу изменения. И вроде как даже и git, и svn поддерживают обработку на лету каких-то форматов, то есть существует возможность сделать предварительную обработку (разархивирование) файла перед сравнением - и пост-обработку (обратное архивирование) после изменений, например в процессе merge.
Но я так и не смог разобраться с тем, как это работает :-/ Так что продолжаю работать так, как у вас описано. Ну и по возможности избегаю бинарных файлов (в MatLab в отличие от SimuLink это достаточно просто, хотя LiveScripts иногда и жаль).
Единственное, что могу сказать — букву (d) можно легко поставить через annotation, со всем остальным не сталкивался…
Мне пока что хватало стандартных средств MatLab. Расскажите, что вы не нашли, может помогу чем?
P.S. У меня конкретно MatLab, но я готов потратить время на конфигурацию готового продукта. Писать с нуля парсер не готов.