• Как корректно сделать SEO для сайта по регионам?

    @domanskiy
    Прописать "человеческие" поддомены в URL
    Поисковики это любят.

    Адреса в контактах и город в метатегах
    Ответ написан
    Комментировать
  • Как избежать дублирования кода в проекте с использованием Flask-RESTplus + Marsmallow?

    @domanskiy
    Очень помогло использование метода SQLAlchemyAutoSchema в последней версии flask-marshmallow
    Сам генерирует схему )

    class DieCutSchema(ma.SQLAlchemyAutoSchema):
        class Meta:
            model = DieCut


    @api.route('/diecuts')
    def index():
        items = DieCut.query.all()
        items_schema = DieCutSchema(many=True)
        result = items_schema.dump(items)
        return jsonify(result)
    Ответ написан
    4 комментария
  • Как добиться автоматической генерации Shema модели используя Marshmallow и SQLAlchemyAutoSchema?

    @domanskiy Автор вопроса
    Нашел решение
    items = TypeMaterial.query.all()
        items_schema = TypeMaterialSchema(many=True)
        results = items_schema.dump(items)
        print(results)
        return jsonify(results)


    Мне кажется очень удобным использование SQLAlchemyAutoSchema
    Может кто напишет, есть ли у него подводные камни?
    Ответ написан
  • Flask-Migrate не видит изменений в БД?

    @domanskiy
    Попробуй
    stamp head
    migrate
    upgrade

    Более радикальный вариант.
    В доках указано что compare_type по дефолту False. Изза этого Auto Generating Migrations не "видит" изменений в типах колонок.
    Как я это победил.

    В папке migrations в файле env.py меняем функцию def run_migrations_online():
    Вариант 1
    compare_type = True
    with connectable.connect() as connection:
            context.configure(
                connection=connection,
                target_metadata=target_metadata,
                process_revision_directives=process_revision_directives,
                **current_app.extensions['migrate'].configure_args,
                # compare_type=True
                compare_type=my_compare_type


    Вариант 2
    Добавляем к параметру функцию my_compare_type в run_migrations_online

    def my_compare_type(context, inspected_column,
                            metadata_column, inspected_type, metadata_type):
            # return False if the metadata_type is the same as the inspected_type
            # or None to allow the default implementation to compare these
            # types. a return value of True means the two types do not
            # match and should result in a type change operation.
            return None
    
    
        with connectable.connect() as connection:
            context.configure(
                connection=connection,
                target_metadata=target_metadata,
                process_revision_directives=process_revision_directives,
                **current_app.extensions['migrate'].configure_args,
                compare_type=my_compare_type
    
            )


    Далее
    manage.py db migrate -m "Initial migration."
    Затем manage.py db upgrade
    Ответ написан
    Комментировать
  • Почему не создается окно с инструментами в Illustrator?

    @domanskiy
    Переустановить иллюстратор
    Ответ написан
    Комментировать
  • Размер монтажной области под объекту illustrator?

    @domanskiy
    Если файлы в формате PDF. Или из Ai можно в PDF экспортнуть/сохранить.
    Если у вас в итоге куча отдельных файлов, то сделайте из них отдельный многостраничный.
    Далее сделать всё в Acrobat Pro через Print production -> Preflight
    Есть готовый экшен - Crop all page to bounding box
    Ответ написан
    Комментировать
  • Как правильно разносить код в JavaFX+FXML с моделью MVC?

    @domanskiy Автор вопроса
    Как мне кажется, нужно делать так:
    - всю логику работы с БД, если не выводить в отдельный класс, то нужно прописывать в main.java
    - список/массив, который заполняется по запросу из БД то же в main
    - А вот уже заполнение значениями из списка элемента интерфейса - ComboBox, прописать в controller в разделе инициализации.
    Верно?
    Ответ написан
    Комментировать
  • Как использовать арифметическое округление вместо банковского, и повысить точность расчётов?

    @domanskiy
    Пользуюсь вот такой простой функцией.
    def rd(x, y=0):
        ''' Функция математического округления '''
        m = int('1' + '0' * y)  # multiplier - how many positions to the right
        q = x * m  # shift to the right by multiplier
        c = int(q)  # new number
        i = int((q - c) * 10)  # indicator number on the right
        if i >= 5:
            c += 1
        return c / m
    Ответ написан
    Комментировать
  • PYTHON Как в xlrd считать значение именнованной ячейки xls файла?

    @domanskiy Автор вопроса
    Да, это я видел. Но долго разбирался, отчего у меня не получается
    Вот рабочий пример
    import xlrd
    xls_file = 'C:/Temp/test.xls'
     
    book = xlrd.open_workbook(xls_file)
    Name = book.name_map['jobnamecell'][0] #имя маленькими буквами, 
    #даже если в Excel используются заглавные
    #[0] индекс, т.к. это может быть диапазон ячеек
     Job = (Name.cell().value) #присваиваем значение переменной Job. .vflue нужна что бы убрать из выдачи тип ячейки
     print ("Job: " + Job + '\n')
    Ответ написан
    Комментировать
  • Как используя VBScript конвертировать xls и xlsx файлы в xml без установленного Excel?

    @domanskiy Автор вопроса
    Разобрался.
    'Читаем данные из XLS файла
    Dim connStr, objConn, getNames, inputFile 
    inputFile  = test.xls
    connStr = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & inputFile & ";Extended Properties=""Excel 12.0 xml;HDR=No;IMEX=2;"";"
    
    Set objConn = CreateObject("ADODB.Connection")
    'Open Connection
    objConn.open connStr
    
    'Define recordset and SQL query
    'тут мы через SQL запрос вытаскиваем данные из ИМЕННЫХ ячеек экселевского файла. Всё это в массив
    Set rs = objConn.execute("SELECT * FROM Job,Customer,Prod")
    
    'присваиваем значения переменным из массива
    DO WHILE NOT rs.EOF
    Job = rs.Fields(0)
    Customer = rs.Fields(1)
    Prod = rs.Fields(2)
    rs.MoveNext
    Loop
    
    'Close connection XLS and release objects
    objConn.Close
    Set rs = Nothing
    Set objConn = Nothing
    
    'формируем XML
    Dim  rootNode, subNode, xmlDoc, commentItem, Fragment
    Set xmlDoc = CreateObject("Msxml2.DOMDocument")
    'Создание объявления XML
    xmlDoc.appendChild(xmlDoc.createProcessingInstruction("xml", "version='1.0' encoding='utf-8'"))
    
    'Создание корневого элемента
    Set rootNode = xmlDoc.CreateElement("JOBS")
    xmlDoc.AppendChild rootNode
    
    Set subNode = rootNode.appendChild(xmlDoc.createElement("Job"))
    subNode.text = Job
    
    Set subNode = rootNode.appendChild(xmlDoc.createElement("Customer"))
    subNode.text = Customer
    
    Set subNode = rootNode.appendChild(xmlDoc.createElement("Prod"))
    subNode.text = Prod
    
    '* -- написание XML-файла с отступом для более легкого использования независимо от того, какая программа использовалась для просмотра или редактирования файла -- *'
    Dim rdr, wrt, oStream
    Set rdr = CreateObject("MSXML2.SAXXMLReader")
    Set wrt = CreateObject("MSXML2.MXXMLWriter")
    
    Set oStream = CreateObject("ADODB.STREAM")
    oStream.Open
    oStream.Charset = "UTF-8"
     
    wrt.Indent = True
    wrt.Encoding = "UTF-8"
    wrt.Output = oStream
    Set rdr.ContentHandler = wrt
    Set rdr.ErrorHandler = wrt
    rdr.Parse xmlDoc
    wrt.Flush
    
    'запись xml файла
    oStream.SaveToFile "Test.xml", 2
    
    Set rdr = Nothing
    Set wrt = Nothing
    Ответ написан
    4 комментария
  • Какую MongoDB или MySQL для локального web приложения документооборота малого предприятия?

    @domanskiy Автор вопроса
    Хранить данные в текстовых файлах?
    У меня 1-2тысячи заказов в год.
    + база дизайнов на 2-4 тысячи.

    Плюс логи изменений... и т.д.
    В принципе, не много. Но мне не верится что это реально в файлах хранить.

    По связям - связей не много будет.
    Наверное остановлюсь на MySQL
    Ответ написан
  • Как в C# Windows Form прочитать названия сепараций в PDF файле?

    @domanskiy Автор вопроса
    Я смог вытащить весь XMP код. Это по сути XML
    PdfReader pdf = new PdfReader(filePath);
                string metadataXml = System.Text.Encoding.Default.GetString(pdf.Metadata);
                label1.Text = metadataXml;

    Вот теперь гадаю, как вывести допустим по xpath из этого XML вытащить значение
    //xmpmeta/RDF/Description/inks/Seq/li[1]/egname
    Ответ написан
    Комментировать
  • Как на JS сортировать один список JSON по другому и получить третий?

    @domanskiy Автор вопроса
    Преобрабовать в объекты. Т.е. привести к виду
    var tmp = {
            "Angle": 7,
            "Frequency": 150,
            "InkParam": "новая",
            "ID": 1,
            "ColorName": "PANTONE  877 C"
        },
        {
            "Angle": 67,
            "Frequency": 150,
            "InkParam": "новая",
            "ID": 2,
            "ColorName": "PANTONE Bright Red C"
        },
        {
            "Angle": 82,
            "Frequency": 175,
            "InkParam": "новая",
            "ID": 3,
            "ColorName": "Yellow"
        };


    на let выдаёт ошибку.
    arr2 - это второй JSON?

    Если не сложно, можно готовый вариант на JS написать?
    Ответ написан
    Комментировать
  • На каком движке можно реализовать сайт-портфолио с возможностью оплаты для фрилансера?

    @domanskiy
    Это типичные задачи движков интернет-магазинов. Многие из которых "из коробки" имеют подобный функционал. Ну а если нет, то можно просто вместо "товар" писать "услуга". и т.п.
    Ответ написан
    Комментировать
  • Что надо подучить, чтобы можно было более менее свободно верстку делать из PSD макета?

    @domanskiy
    Почему именно PSD?
    Верстку можно и в Иллюстраторе/индизайне сделать. А есть еще Инкспейс и Гимп из бесплатных
    Ответ написан
    Комментировать
  • Как на сервере рассчитать таблицу excel с использованием формул из таблицы?

    @domanskiy
    использовать Vbscript
    VBS открывает xls и запускает скрипт из него.
    Ответ написан
    Комментировать
  • Как в VBS для Excel сделать автокоррекцию данных с поиском сопоставления в массиве?

    @domanskiy Автор вопроса
    Т.е. человек набирает в ячейке 485, а макрос автоматически подставляет PANTONE 485 C ?
    Как это реализуется?
    Сейчас у меня макрос запускается через панель запуска макрасов в Экселе.

    Сейчас код такой:
    Const strFilePath As String = "Y:\TEMP-Shuttle-IN\Blank_v1.xml"
    
    
    
    Sub MyXLS2XML()
    
    
        Dim arRound As Integer
        Dim objDoc As MSXML2.DOMDocument
        Dim objNode As MSXML2.IXMLDOMNode
        Dim objRoot As MSXML2.IXMLDOMElement
        Dim objElem As MSXML2.IXMLDOMElement
        Dim ar As Variant
        Dim i As Integer
        
    '    Для подсчёта новых форм
    Dim val As String
    Dim val1 As String
    Dim r As Range
    Dim SummNewForm As Integer
    Set r = Range("E13:E22") 'диапазон ячеек
        
    'Массив значений для сравнения
    Dim MyArray
    MyArray = Array("нов", "новая", "нов.")
     
    
        
        Set objDoc = New DOMDocument
        objDoc.resolveExternals = True
        Set objNode = objDoc.createProcessingInstruction("xml", "version='1.0' encoding='utf-8'")
        Set objNode = objDoc.InsertBefore(objNode, _
        objDoc.ChildNodes.Item(0))
        Set objRoot = objDoc.createElement("JOB")
        Set objDoc.DocumentElement = objRoot
        
          
                 Set objElem = objDoc.createElement("JobNamber")
                      objElem.Text = Range("Номер_заказа")
                      objRoot.appendChild objElem
                
                 Set objElem = objDoc.createElement("CustomerName")
                      objElem.Text = Range("Заказчик")
                      objRoot.appendChild objElem
    
    
                 Set objElem = objDoc.createElement("Substrate")
                      objElem.Text = Range("Тип_материала")
                      objRoot.appendChild objElem
    
                 Set objElem = objDoc.createElement("PrintTech")
                      objElem.Text = Range("Способ_печати")
                      objRoot.appendChild objElem
    
                 Set objElem = objDoc.createElement("ICCprof")
                      objElem.Text = Range("ICC_профиль")
                      objRoot.appendChild objElem
    
                 Set objElem = objDoc.createElement("CutTools")
                      objElem.Text = Range("Номер_штампа")
                      objRoot.appendChild objElem
    
                 Set objElem = objDoc.createElement("LabelSize")
                      objElem.Text = Range("Размер_этикетки")
                      objRoot.appendChild objElem
    
                 Set objElem = objDoc.createElement("LabelPart")
                      objElem.Text = Range("часть_этикетки")
                      objRoot.appendChild objElem
    
                 Set objElem = objDoc.createElement("Winding")
                      objElem.Text = Range("Вариант_намотки")
                      objRoot.appendChild objElem
    
                 Set objElem = objDoc.createElement("Designer")
                      objElem.Text = Range("Дизайнер")
                      objRoot.appendChild objElem
    
              
                
      i = 13
      Do
      
              
            Set objElem = objDoc.createElement("Ink")
                objElem.setAttribute "ID", Cells(i, 1)
                objElem.setAttribute "ColorName", Cells(i, 2)
                objElem.setAttribute "Frequency", Cells(i, 3)
                objElem.setAttribute "Angle", Cells(i, 4)
                objElem.setAttribute "InkParam", Cells(i, 5)
                objRoot.appendChild objElem
                
    
                
          i = i + 1
     Loop Until Cells(i, 1) = ""
               
    'Подсчёт  количества новых форм. по условию val
               
               SummNewForm = Application.WorksheetFunction.CountIf(r, "*" & MyArray(0) & "*")
                 Set objElem = objDoc.createElement("SummNewForm")
                      objElem.Text = SummNewForm
                      objRoot.appendChild objElem
    
    
    
    
                
    
            
        'Выполнение XSL-преобразования для добавления отступов в XML
        Call transformXML(objDoc)
    
        objDoc.Save strFilePath
    
          End Sub
    
    'Процедура для придания XML читабельного вида (с отступами)
    Sub transformXML(ByRef objDoc As Variant)
    
        'Cоздание объекта XSL
        Set xsl = CreateObject("MSXML2.DOMDocument")
        
        'Загрузка XSL из строки (не требует наличия отдельного XSL-файла)
        xsl.LoadXML ("<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>" & vbCrLf & _
        "<xsl:output method='xml' version='1.0' encoding='UTF-8' indent='yes'/>" & vbCrLf & _
        "<xsl:template match='@*|node()'>" & vbCrLf & _
        "<xsl:copy>" & vbCrLf & _
        "<xsl:apply-templates select='@*|node()' />" & vbCrLf & _
        "</xsl:copy>" & vbCrLf & _
        "</xsl:template>" & vbCrLf & _
        "</xsl:stylesheet>")
        
        'Выполнение преобразования
        objDoc.transformNodeToObject xsl, objDoc
    
    End Sub
    Ответ написан
  • Хорош ли MODx и чем?

    @domanskiy
    Самый простой пример того... чем он лучше Joomla или WP
    Заказчик захотел меню, как на сайте конкурента, ссылку на который он даёт. А там JS с библиотеками.
    В джумла и вп - вам нужно подобрать плагин или свой плагин написать, что бы меню было такое как на том сайте. Что бы оно работало именно так.

    А как в MODX.
    Вы копируете с того сайта JS и кусок HTML кода меню.
    Потом просто, стандартными средствами MODx генерируете код меню в HTML в таком виде и логике как на сайте конкурента.
    Т.е. Вам не нужно править JS

    Главный минус WP - 90% плагинов платные или частично платные.
    Хотите плагин с популярной JS бибилиотекой - скорее всего он платный 100%
    Joomla - таже история.

    В MODx. Всё как писал выше. Библиотеку подключаешь, а дальше стандартными средствами генерируешь HTML в том виде, в котором нужно библиотеке.
    Ответ написан
    Комментировать
  • Translate API. Хороший и бесплатный - миф?

    @domanskiy
    Хочу сделать авто. перевод статей на сайте. Есть текст, с именами, названиями предметов и пр, которые ни один переводчик адекватно не пеневодит. Есть ли возможность принудительно заставить переводчик переводить эти слова так как я указываю? Т.е. как бы обучить его переводить определенным образом для моего сайта.
    Ответ написан
  • Как наложить текстуру в Blender?

    @domanskiy
    Создать UV развертку
    Далее - или экспортируешь её и рисуешь в фотошопе, либо натягиваешь текстуру.
    https://blender3d.com.ua/texturirovanie-v-blender/
    https://blender3d.com.ua/uv-razvertka-v-blender/
    Ответ написан
    Комментировать