• Авторизация аккаунта Вконтакте - какие новые правила?

    @to_east
    665d5450174c5607992464.png
    Ответ написан
    Комментировать
  • Vk постинг через апи, авторизация?

    @to_east Автор вопроса
    Кажется я понял, чтобы получить расширенный доступ к своему приложению(Друзья, Стена, Сообщества), нужно загрузить паспортные данные в вк)
    Ответ написан
    Комментировать
  • Как внедрить текстовый редактор в проект на Django?

    @to_east
    Похоже тебе нужен wysiwyg
    Ответ написан
  • Как заблокировать определенные боты в Nginx?

    @to_east
    на PHP решение: https://github.com/JayBizzle/Crawler-Detect. Но если нужно чисто на нгинкс тогда наверное лучше https://openresty.org/ поставить с Луа будет проще чем в конфигах, имхо.
    Ответ написан
  • PHP смержить в один файл проект на composer?

    @to_east Автор вопроса
    Вот вроде есть https://www.php.net/manual/ru/function.get-declare... выводит список классов, думаю что можно слабать на основе этого свой скрипт сборки, только предварительно отфильтровать

    Updated:
    Вобщето лучше использовать сам лоадер композера, вот нашел метод getClassMap() который выводит список загруженных классов:
    <?php
    
    $loader = require_once __DIR__ . '/../vendor/autoload.php';
    $loader->getClassMap();

    Потом конечно можно распарсить регексом и повыдергивать все классы в один файл, но непонятно что с порядком подключения, отталкиваясь от списка этого метода рискну предположить что стек зависимостей идет снизу вверх, потому что мой рутовый класс находиться наверху остальных в этом же неймспейсе, чтобы небыло такого что определение класса ниже вызова.
    Ответ написан
  • Как подключить документацию к SwaggerUI?

    @to_east Автор вопроса
    Пришлось немного повозится чтобы получить, то чего я хотел изначально.
    В процессе поиска решения, мне стало известно, что coreapi и swagger работают с разными json форматами, для конвертации формата я обратился за помощью к https://github.com/core-api/python-openapi-codec, плюс ко всему мне удобнее описывать спеки в yaml формате.
    Все привиденные файлы расположенны относительно джанго корневого проджекта:

    file: api/helpers/SwaggerAPICodec.py

    import yaml
    from coreapi.codecs.base import BaseCodec
    from coreapi.document import Document
    from coreapi.exceptions import ParseError
    from openapi_codec.decode import _parse_document
    
    
    class SwaggerAPICodec(BaseCodec):
        format = 'openapi'
        media_type = 'application/openapi+yaml'
    
        def decode(self, bytes, **options):
            try:
                data = yaml.safe_load(bytes)
            except ValueError as exc:
                raise ParseError('Malformed YAML. {}'.format(exc))
    
            base_url = options.get('base_url')
            doc = _parse_document(data, base_url)
    
            if not isinstance(doc, Document):
                raise ParseError('Top level node must be a document.')
    
            return doc
    
        def encode(self, document, **options):
            # TODO SwaggerAPICodec.encode() freeze
            raise AttributeError('.encode() method not yet developed.')

    file: api/views/ApiView.py

    from rest_framework.views import APIView as BaseAPIView
    from rest_framework.permissions import AllowAny
    from rest_framework_swagger import renderers
    from rest_framework.response import Response
    
    from api.helpers.SwaggerAPICodec import SwaggerAPICodec
    
    
    class ApiView(BaseAPIView):
        permission_classes = [AllowAny]
        renderer_classes = [
            renderers.OpenAPIRenderer,
            renderers.SwaggerUIRenderer,
        ]
    
        def get(self, request):
            codec = SwaggerAPICodec()
            bytestr = open('api/swagger.yaml', 'rb').read()
            schema = codec.decode(bytestr)
            return Response(schema)


    file: api/urls.py

    from django.urls import path
    from .views.ApiView import ApiView
    
    
    urlpatterns = [
        path('swagger/', ApiView.as_view()),
    	# ...
    ]


    Как видно файл схемы загружается локально но можно сделать и удаленно, при помощи coreapi.Client
    Ответ написан
    Комментировать
  • Подключение и использование svg иконок в css?

    @to_east Автор вопроса
    Все до меня дошло, проблема была в том что я не упомянул что собиралось все это дело на вебпаке, до этого использовал raw-loader для svg, короче это правило решило мою проблему:
    module: {
            rules: [
                {
                    test: /\.(eot|svg|woff|woff2|ttf)$/,
                    use: [{
                        loader: 'file-loader',
                        options: {
                            name: '[name].[ext]',
                            outputPath: 'fonts/',
                            publicPath: 'static/fonts/'
                        }
                    }]
                },
            ]
    Ответ написан
    Комментировать
  • Python обмен данными между процессами через Пайпы?

    @to_east Автор вопроса
    Немного не по теме спрошу, а возможно ли использовать Queue вместе с asyncio, для предотвращения гонок в совместно используемых данных, несколькими роутинами.
    И еще вопрос. На днях ознакомился навскидку с асинхронным программированием в Python, по сути все выполняется в одном потоке, просто эффективно распределяется процессорное время между тасками(поправьте, если не верно, или неточно), так вот зачем необходимы примитивы синхронизации, такие как Lock, Event, Condition, Semaphore(в модуле asyncio), если доступ имеет только один поток в одно время?
    Ответ написан
    Комментировать
  • Gruntjs импорт в исходном js-файле?

    @to_east Автор вопроса
    Нашел плагин https://www.npmjs.com/package/grunt-import-js который делает то что мне необходимо, но потом я для себя открыл browserify+babelify, это наверное будет более правильный подход для сборки...
    Ответ написан
    Комментировать
  • Gulp передача параметров между тасками?

    @to_east Автор вопроса
    Вобщем я пересмотрел, оказывается все проще:
    gulp.task('sass', function () {
    	gulp.watch(assets_dir + '/stylesheets/src/**/*.scss', function(e) {
    		console.log(e.path);
    		// Building
    	});
    });
    
    gulp.task('default', ['sass']);
    Ответ написан
    Комментировать
  • Как делается FormSet для отношения ManyToMany?

    @to_east
    Если я правильно понимаю - тебе нужно вывести несколько экземпляров форм с возможностью редактирования, то возможно это поможет(если вопрос актуален еще:)):
    # forms.py
    
    class EditThumbsForm(forms.ModelForm):
        class Meta:
            model = Thumb
            fields = ('src', )
        src = forms.CharField()
    
    
    EditThumbsFormSet = forms.inlineformset_factory(Video, Thumb, form=EditThumbsForm, extra=0)
    
    
    class EditVideosForm(forms.ModelForm):
        class Meta:
            model = Video
            fields = ('id', 'video_id', 'title', )
    
        id = forms.IntegerField()
        video_id = forms.IntegerField()
        title = forms.CharField()
    
    
    class EditVideosModelFormSet(BaseModelFormSet):
        def add_fields(self, form, index):
            super(__class__, self).add_fields(form, index)
            form.thumb_formset = EditThumbsFormSet(
                instance=form.instance,
                data=form.is_bound and form.data or None,
                files=form.is_bound and form.files or None,
                prefix='thumb-%s-%s' % (
                    form.prefix,
                    EditThumbsFormSet.get_default_prefix()
                )
            )
    
    EditVideosFormSet = forms.modelformset_factory(Video, EditVideosForm, formset=EditVideosModelFormSet, extra=0)

    Во вьюхе так:
    class EditVideosView(View):
        template_name = 'admin/edit_videos.html'
    
        def get(self, request):
            instance = Video.objects.all()
            formset = EditVideosFormSet(queryset=instance)
            return render(request, self.template_name, context={'formset': formset})

    А в шаблоне примерно так:
    {% for form in formset %}
        <li>
            {{ form }}
            {% if form.thumb_formset %}
                {{ form.thumb_formset.management_form }}
                <ul>
                {% for thumb in form.thumb_formset %}
                    <li>
                    {{ thumb.src }}
                    </li>
                {% endfor %}
                </ul>
            {% endif %}
        </li>
    {% endfor %}


    Если кратко то необходимо вначале создать формсет с основной модели при помощи modelformset_factory(), а потом уже добавлять связанные таблицы к основной при помощи inlineformset_factory()
    Ответ написан
    Комментировать
  • Как лечить спину айтишникам?

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

    @to_east Автор вопроса
    Andrey Tsvetkov,
    Хорошо, спасибо за поддержку! Детальнее разберу твой пример для ясности.

    <-- After some time -->
    К сожалению твой пример вывалился с фатальной ошибкой
    fatal error: all goroutines are asleep - deadlock!
    
    goroutine 1 [chan receive]:
    main.main()
            c:/Users/chapplin/go/src/example1/test.go:59 +0x3cf
    
    goroutine 18 [chan receive]:
    main.writer(0xc04202c0c0, 0xc042050070)
            c:/Users/chapplin/go/src/example1/test.go:23 +0x5e
    created by main.main
            c:/Users/chapplin/go/src/example1/test.go:37 +0xf0
    exit status 2
    Для продолжения нажмите любую клавишу . . .

    Но потом, закоментил последнюю строчку
    // <- done
    Код отработал без ошибок.
    Тут вот дополнительный вопрос, по видимому sigfault в бесконечном цикле:
    func writer(result <- chan string, done chan bool) {
    	for line := range result {
    		fmt.Println(line)
    	}
    	done <- true
    }

    Может необходимо дополнительную проверку, и выходить по break из цикла, типа такого:
    func writer(result <- chan string, done chan bool) {
    	for line := range result {
            if (<- done) == true {
                break
            }
    		fmt.Println(line)
    	}
    	done <- true
    }

    И в завершении программы уже делать done <- true
    И зачем вообще этот done нужен, если он определен а явного использования нет?
    Ответ написан
    Комментировать
  • Инициализация встраиваемой структуры?

    @to_east Автор вопроса
    Похоже что нашел решение, но неуверен что оно правильное, код:
    package main
    
    
    import "fmt"
    
    
    type Parent struct {
        foo int
    }
    
    type Child struct {
        Parent *Parent
        bar int
    }
    
    func main() {
        var parent = &Parent{ foo: 12 }
        var child = &Child{ Parent: *&parent, bar: 111 }
        child.Parent.foo++
        fmt.Println(&parent.foo, &child.Parent.foo)
        fmt.Println(child.Parent.foo, parent.foo)
    }
    Ответ написан
    Комментировать
  • Структуры, указатели, массивы?

    @to_east Автор вопроса
    Ясно, благодарю за подробные разъяснения!
    Выходит нужно создавать массив указателей на nextWords структуру.

    разве что мы сначала вытащим её из мапы в переменную и вызовем метод на ней

    Кстати только что получилось такое проделать, на основе этого хотел сделать вызов (&myMap["hello"]).GetFirstItem() такого рода, но тоже фэйл вышел
    Ответ написан
    Комментировать
  • Вопрос по структурам на го?

    @to_east Автор вопроса
    Решение от rustler2000 в комментах
    Ответ написан
    Комментировать
  • Ищется (фреймворк|библиотека) под критерии?

    @to_east Автор вопроса
    Спасибо, посмотрю. А с Ваниллой, я похоже поторопился с выводами, так же как на нативном JavaScript получается, в чем прикол непонятно.
    Ответ написан