вторник, 24 ноября 2015 г.

Где мои терабайты?

Где мои терабайты?
Распространенный вопрос? Для меня - да.
Вроде, поставишь новый диск, места полно... А через некоторое время раз - и кончилось. И начинаешь долго и нудно просматривать, чем же оно забито.
Так вот, способ есть! Берем TreeMap, говорим: "Раскрыть диск (папку)" - и видим самые толстые объекты, первые клиенты на удаление.
Сделано это в виде шаблона Visio. Нужные макросы внутри.
Раньше это был шаблон VisioTreeView. Про него я уже писал. А теперь в тот же шаблон добавлен еще один режим раскрытия папок.
Вид получается примерно такой
 Все управление на контекстных меню. Самое первое - показать диски (это меню страницы).
Так как тысячи файлов Visio рисовал бы медленно, при сканировании диска введены некоторые ограничения. За одну операцию раскрываются только два уровня. Если нужно смотреть дальше, выбираем нужный прямоугольник и углубляемся в него, повторяя операцию.
Если в папке обнаруживаются более 100 дочерних объектов, мелочь тоже начинает отбрасываться. Все равно сольется в линию.
Прямоугольники подкрашиваются в зависимости от расширений файлов.
В виде надписи выводится имя папки или файла. Если прямоугольник узкий, имя не умещается и не выводится. Тогда нужно открывать окно "Данные шейпа" и смотреть в нем. Там же приведен объем файла, путь к нему и состояние.  В данном случае состояние - это свертка из расширений имен файлов, используемая для передачи цвета.

С точки зрения программирования
Поле названо состоянием для универсальности. Дело в том, что подобная задача разбивается на две части: сбор дерева структуры и его отображение. Отображение одинаковое, а на входе данные могут быть ну очень разные. У меня это приспособлено для взвешивания файлов. Но такой же тип отображения можно использовать для сравнения доходов, площади территорий, населения и т.д. Поэтому сечение содержит довольно универсальные атрибуты: текст, вес, состояние.
Собственно модуль отображения представляет собой класс, который умеет рисовать себя и своих потомков (иерархически). Данные передаются через указанные выше атрибуты. Так что по аналогии можно будет делать сменные входные приставки для других областей применения.
Универсальный, не привязанный к прокладной области тест выглядит вот так:
 Sub aTest()       'Tree for test
    Set c0 = New c
    Set c0.shp0 = ActivePage.Shapes(1)
   
    'CurrNode.AddItem Weight, State, Text, Path
    c0.AddItem 32, 0, "Text1", ""
    c0.AddItem 5, 1, "Text2", ""
    c0.AddItem 12, 2, "Text3", ""
    Set c2 = c0.AddItem(25, 3, "Text4", "")
    Set c1 = c0.AddItem(7, 4, "Text5", "")
   
    c1.AddItem 30, 0, "Text21", ""
    c1.AddItem 20, 1, "Text22", ""
    c1.AddItem 40, 2, "Text23", ""
    c1.AddItem 5, 3, "Text24", ""
   
    c2.AddItem 5, 5, "Text31", ""
    c2.AddItem 16, 6, "Text32", ""
    c2.AddItem 30, 7, "Text33", ""
    c2.AddItem 10, 8, "Text34", ""
   
    c0.DrawLevel c0, 1
End Sub
и рисует вот такую картину.
Скачать
Шаблон условно платный:
Для "богатых" стоит $5 - https://gum.co/dTHz
Для бедных бесплатно - https://www.dropbox.com/s/w7299qq37wlir9b/TreeMap.vst?dl=0

Остальные варианты по договоренности.

суббота, 4 апреля 2015 г.

О выполненных проектах

Попробовал собрать в кучку проекты, с которыми сталкивался в Visio. Чтобы выявить наиболее актуальные направления.  Получилось "портфолио" из полутора десятков работ. Дальше вспоминать не стал, решил, что для статистики достаточно.
1. Самые крупные проекты:
Два построителя оргсхем: один совсем большой, другой поменьше.
Графический редактор сети (для программирования устройства управления сетью).
Мини-САПР (для проектирования времянок из типовых конструкций и оборудования).
То есть для управления предприятием, управления сетью и конструирования. Все связано с базами данных. И обмен данными с базой обычно двусторонний.
2. Несколько проектов помельче накручены вокруг PDM системы. Причем в разных областях: мониторинг состояния на фоне состава изделий, формирователи технических документов, измерение показателей с графическим отображением. Опять же непременное присутствие баз данных.
3. Несколько систем моделирования. Причем чаще всего заказывается графическая часть: отображение модели, ввод данных, изменение конфигурации то есть графический пользовательский интерфейс. А остальная часть выполняется другими силами. Раздел происходит обычно на уровне базы данных.
4. Наконец, разрабатывалось множество более-менее мелких утилит. Формирователи отчетов по файлу Visio, конверторы, специальные функции, используемые при рисовании. Пожалуй, только в этих работах взаимодействие с базой не требовалось.
Какие же можно сделать выводы.
1. Так получилось что наиболее крупные проекты относятся к сфере управления. Исключение составляют формирователи документов и системы типа САПР, но их доля относительно невелика.
2. Практически все крупные и средние работы связаны с базами данных. Причем связи двусторонние и не примитивные.
P.S. Я понимаю, что у других разработчиков статистика может отличаться. Но у меня сложилась вот такая.

воскресенье, 15 февраля 2015 г.

Копирующий коннектор в трафарете

Задача копирования фрагментов шейпа при разработке возникает довольно часто. Решается, естественно, по-разному. Кто-то делает все вручную, кто-то автоматизирует это дело макросом, кто-то ищет готовую утилиту.
Когда-то давно я пытался использовать для копирования данных между шейпами промежуточное хранилище в виде файла Excel. Работало, но выглядело довольно громоздко. А сейчас, кажется, получилось более прогрессивное решение.
Особенности:
1. Весь программный код убран в трафарет. В нужный момент его можно открыть в любом рисунке, поработать и закрыть, на искажая основного файла.
2. Риббоны, тулбары и т.д. не искажаются. Управление идет через контекстные меню мастер-шейпа из трафарета.
3. Нет никаких диалоговых окон. Соединяем копирующим коннектором шейп-источник с шейпом-приемником и перекачиваем по нему данные. Кое-какие режимы устанавливаются через окошко Shape data того же коннектора.
4. Так как код в макросах, становятся безразличны версии и разрядность Windows и Visio. Не нужны инсталляторы. (Правда, макросы придется разрешать, что не всем понравится).
5. Шейпы могут быть как обычными, так и внутри групп. Лишь бы их можно было соединить коннектором.
Перед копированием можно сравнить шейпы. Различия пишутся в лог (поподробнее) и опять же в Shape data коннектора (короткая форма). Посмотрев различия, можно скопировать либо формулы из отдельных ячеек, либо целиком секции.
Результат сравнения (log) удобно использовать для документирования шейпа.
Короче, стремился сделать как можно удобнее.
Трафарет выложен как бесплатный, но на Gumroad (то есть вроде как в магазин).
Немного побольше написано здесь.
Прямой адрес на страничку в Gumroad здесь.