• Расширение (плагин) SketchUp для проектирования мебели программистом

    При расчете стоимости новой кухни цена оказалась такой большой, что я решил сделать её сам так как это обойдется в два раза дешевле. Для тренировки решил сделать для себя рабочий стол. Достаточно быстро пришло понимание: чтобы сделать хорошую вещь нужно сделать 3D модель. Это позволит на этапе проектирования посмотреть как будет выглядеть мебель и продумать как в дальнейшем будет происходить сборка. Так как 3D моделированием я не занимаюсь, то начал искать программу попроще. И самая простая что нашел SketchUp. При создании модели постоянно приходилось править модель из-за постоянно изменявшихся размеров. И после третьего изменения появилась идея — сделать параметризированную модель, чтобы она сама генерировалась с нужными размерами. SketchUp поддерживает скрипты на языке Ruby и эта статья о том что у меня получилось.


    Решение достаточно простое — создаю некоторый API, который позволяет создавать 3D объекты листов ЛДСП с нужными параметрами. Из этих объектов компонуется готовая модель а также в отдельный файл выгружаются размеры листов для передачи их в центр распила. В результате эксплуатации добавил ещё возможность указывать кромки для листов. Данный плагин был использован для проектирования более десятка различных изделий из ЛДСП. С каждым новым проектом плагин дорабатывался и модифицировался, улучшалось удобство и совершенствовалось API. В качестве примера последний проект — стол-тумба. На картинке модель + готовое изделие (птица и собака для привлечения внимания :))


    main.jpg

    Читать дальше →
  • Класс PHP для вывода в консоль цветного текста

      Делал для себя скрипт для деплоя сайта на продакшен. Для чего нужно было выводить на экран что происходит. И чтобы было нагляднее решил выводить в цвете. Однако не смог найти что-то подходящее. Максимум библиотека выводила цветной текст, но не поддерживала отступы. Поэтому сделал свою библиотеку для этого. Возможно кому-то будет полезно. Небольшая (но функциональная) библиотека для вывода на консоль цветного текста с поддержкой отступов в таком вот виде


      Console::indent(2)->color('brown')->bgcolor('magenta')->writeln('Привет Habr!');

      Читать дальше →
    • Online генератор ABAP кода

        Часто при ABAP кодировании возникает типовая задача — по значениям одних полей внутренней таблицы проинициализировать другие поля (выбрать из таблицы БД, через вызов ФМ-а, подпрограммы). И код в этом случае очень простой в плане алгоритма, но его достаточно много. Всегда хотел сократить время, убиваемое на такие рутинные операции. И даже писал метод, основанный на динамическом создании программ, для Выборки справочных значений по их ключам из таблиц БД.

        В комментариях указывали на

        "не читаемость кода" — свой микроязык, который нужно учить.
        "динамические вызовы" — не приветствуется динамические вызовы, в том числе и потом что в этом случае журнал использования не находит места использования соответствующих таблиц/полей.

        В качестве альтернативы я ещё тогда предлагал вариант с автоматической генерацией кода, но вот только сейчас довел это дело до готового инструмента. Кому интересно, прошу под кат.
        Читать дальше →
      • SQL-запрос на PHP (Версия 0.2)

        image

        Внес изменения в свою реализацию класса для генерации SQL запросов по сравнению с прошлой версией. Однако прежде чем писать о них, хотелось сразу прояснить некоторые вопросы которые в первом посте остались, на мой взгляд, не раскрыты:
        Читать дальше →
      • SQL-запрос на PHP

        image

        Так как ORM слишком тяжеловесны для моих нужд, то обычно я использовал DbSimple. Однако после знакомства с Twig, которые компилирует шаблоны в php код периодически возникала идея написать что-то аналогичное для работы с БД. И вот я это сделал. На картинке представлен запрос на PHP, который после компиляции генерирует код для создания и выполнения SQL запроса.
        Читать дальше →
      • «Дьявольский» ACL — мой вариант проверки прав

          Делаю свою CMS (точнее то, что я называю CMS). Проект дошел до уровня проверки прав пользователей. Такая система должна позволять:

          1. Проверять права пользователя на ресурс
          2. Назначать права на ресурс группе
          3. Наследование прав дочерней группе от родительской
          4. Правила на родительский ресурс распространяются на все дочерние ресурсы
          5. Наследование прав (пример: право на изменение включает в себя право на чтение)

          Попробую описать мое виденье такой системы прав.

          Читать дальше →
        • Тормоза ng-repeat? Нет — просто ngAnimate+transition в css

          Не так давно нашел хороший плагин для angularjs для ввода тэгов ngTagEditor (демо на указанной странице). Понравился он мне своим размером — 5 Кб (css+js) — и это, между прочим, без минификации. У него было всё, что мне нужно, а ненужное можно было допилить напильником.

          В общем, посмотрел демо на сайте, скачал и добавил его в свой framework велосипед. Начал тестировать и обнаружил неприятный баг — если в поле ввода новой категории нажать клавишу и держать, то категории списка Suggestions начинают дублироваться.
          Читать дальше →
        • ABAP: Выборка справочных значений по их ключам из таблиц БД

          Написал не так давно метод для выборки во внутреннюю таблицу справочных значений по их ключам с помощью создания динамической программы. К сожалению, исходный код приложить не получится, так как начальство запретило это делать. Так что ограничусь общим описанием теории.

          К примеру есть у нас внутренняя таблица:

          DATA:
            begin of it_TABLE occurs 0, 
                BE type T001-BUKRS,
                BENAME type T001-BUTXT,
            end of it_TABLE
          .
          

          В таблице заполнено поле BE и нам нужно выбрать из T001 значение BUTXT по соответствующему BE и заполнить поле BENAME. Как это нужно сделать «правильно» (т.е. с минимальными затратами памяти и максимально быстро).
          Читать дальше →
        • Скрипт на NodeJS для Backup-а данных: Окончание

          Продолжаю описывать процесс создания скрипта для Backpup-па данных. В прошлой статье я написал (а затем переписал) функцию определения списка изменившихся файлов. В текущей я буду описывать процесс создания файла измененных данных.

          Создание архива файлов


          Измененные данные в данном случае — это изменившиеся файлы и директории (они могли быть добавлены/удалены). Так что наш файл измененных данных будет представлять собой по сути архив. При создании архива у нас есть два пути —
          1. Упаковывать каждый файл отдельно
          2. Упаковывать все файлы вместе
          3. Смешанная стратегия: мы можем упаковывать вместе все файлы с одним расширением

          Вариант 2 не очень оптимальный: если в архив нужно добавить файл .gif и .txt то упаковав .gif мы получим увеличение его размера из-за того что данные в нем и так уже упакованы При это если не упаковывать, то тоже плохо, так как текстовые файлы хорошо сжимаются и оставив файл не упакованным мы теряем тот размер, который могли бы получить при упаковке.
          Остаются варианты 1 и 3 — из которых я выбрал 1-ый вариант, так как он более простой в реализации.
          Еще я буду делать шифрование файлов в архиве, чтобы можно было backup-ы хранить на внешних ресурсах типа яндекс-диска и при этом не бояться что данные украдут. :)
          Читать дальше →
        • Скрипт на NodeJS для Backup-а данных: Начало

          Давно искал программу для сохранения своих проектов. При этом обязательным требованием было:

          1. Сохранять в хранилище только изменившиеся файлы;
          2. Упаковывать изменившиеся файлы;
          3. Быть бесплатной.

          Однако поиск ничего не дал. Вернее, поиск дал, но обычно один из пунктов отсутствовал. Поэтому я решил написать свою, а заодно «пощупать вживую» NodeJS. За 2 дня написал. И даже прикрутил к программе шифрование. Что не вызвало особых сложностей, так как модуль шифрования входит в стандартную поставку ноды. При этом сделал модули упаковки, шифрования и работы с хранилищем расширяемыми. Чтобы можно было просто добавлять новые возможности, расширяя функционал. В текущей версии сохранение работает только в файловую систему, без упаковки, но с шифрованием.

          Посмотреть справку по использованию можно тут.

          На этом можно бы и закончить – дело сделано. Но есть один минус – программа работает СИНХРОННО. И хотя работает достаточно шустро (если не сохранять гигабайты информации), но всё таки нода ориентирована на АСИНХРОННУЮ работу. Так что я посмотрел Скринкаст по Node.JS и решил сделать все по «правильному», c учетом особенностей ноды.
          Читать дальше →