Alex
Підписатись

Alex

Приєднався: 4 роки тому | 6 Читає   9 Читачів | 2.1K

Адмін сайту

  1. Додумався лише до того щоб записувати вкладені коментарі в Dictionary в якому ключі — це ID коментарів, а значення це List відповідей на коментар.

    Як на мене це і буде оптимальне рішення для даної задачі.

    Спочатку обходимо список коментарів і розділяємо їх на 2 групи:

    1. Список кореневих коментарів (наприклад: rootComments) у яких немає to_comment_id і з яких почнеться дерево
    2. Словник з відповідями (наприклад: childComments) на коментарі де ключ to_comment_id, а значення - це список коментарів зі вказаним to_comment_id

    А далі рекурсивно рендеримо дерево коментарів починаючи з кореневих коментарів:

    // Псевдокод 
    // Обхід кореневих коментарів
    <ul>
    @for(comment in rootComments)
    	// рендеринг віджету з коментарем
    @endfor
    </ul>
    

    Html віджет коментаря:

    <li>тут наш комнетар</li>
    @if(childComments.has(comment.id))
    	<ul>
    		@for(comment in childComments[comment.id])
    			// рекурсивний рендеринг віджету з коментарем
    		@endfor
    	</ul>
    @endif
    

  2. Схоже така поведінка відбувається через те що URL для ajax запитів такий самий як і для запитів без ajax (сервер визначає по заголовкам яку саме сторінку віддавати). Якщо для ajax запитів використовувати інший URL, то такої проблеми не виникає.

    Змінив код наступним чином:

    function ajaxLinkLoad(event, target) {
        var url = target.getAttribute('href');
    		
        // Додав в URL параметр ajax
        axios.get(url, {params: {ajax: 1}}).then(function (response) {
            document.getElmentById('content').innerHTML = response.data;
    				
            // А в історію записується звичайний URL без параметра ajax
            window.history.pushState(null, null, url);
        });
        event.preventDefault();
    }
    

  3. У Laravel v10.20 з'явився новий метод createOrFirst(), запропонований Тоні Мессіасом (Tony Messias), який може дещо заплутати, оскільки в Laravel вже був firstOrCreate(). У чому ж полягає різниця?

    createOrFirst()

    Новий метод createOrFirst() призначений для кращої продуктивності в висококонкурентних середовищах та допомагає зменшити конфлікти, але вимагає наявності унікального індекса в базі даних.

    За допомогою createOrFirst ми інвертуємо цей процес і розраховуємо на те, що таблиці мають унікальний індекс. Спочатку ми намагаємося створити запис, і якщо ми отримуємо від бази даних виключення, і встановлюємо, що це порушення унікального індекса, ми намагаємося замість цього знайти відповідний запис. Таким чином, конкурентні процеси можуть розраховувати на характеристики ACID бази даних і більше не турбуватися про цю конфліктну ситуацію.

    firstOrCreate()

    firstOrCreate був оригінальним методом, і ось як він зараз визначений в документації:

    Метод firstOrCreate намагатиметься знайти запис в базі даних за допомогою вказаних пар колонка/значення. Якщо модель не вдасться знайти в базі даних, буде вставлено запис з атрибутами, отриманими в результаті злиття першого аргументу масиву з необов'язковим другим аргументом масиву

    Що ще круто в цьому новому методі, так це те, що тепер оригінальний метод firstOrCreate використовує новий метод createOrFirst під капотом. Отже, це відбувається наступним чином:

    • спроба знайти;
    • якщо не знайдено, спроба створення;
    • якщо відбувається порушення унікальності, спроба іншого пошуку через конфліктну ситуацію.

    Що використовувати?

    Я б сказав, що для більшості програм, оригінальний firstOrCreate підійде, і ви захочете використовувати createOrFirst тільки тоді, коли будете працювати в висококонкурентному середовищі з великими обсягами трафіку.


  4. В редакторі EasyMDE курсором являється елемент <div> з класом .CodeMirror-cursor. Тому необхідно змінити колір у border-left цього елементу

    .CodeMirror-cursor {
        border-left: 1px solid rgba(0, 0, 0, .5);
    }
    

  5. Я б рекомендував вибирати серед найпопулярніших дистрибутивів: Ubuntu, Mint, Fedora, Manjaro. Вибирайте яка графічна оболонка вам більше подобається (KDE, Gnome, Mate, Cinnamon, Unity, Pantheon, Xfce) і далі вибирайте з топових дистрибутивів які йдуть з цією оболонкою


  6. Кожна HTML сторінка починається з тега <html> і закінчується закриваючим тегом </html>

    Перед тегом <html> також необхідно вказати тип документа наступним тегом <!DOCTYPE html>

    Приклад веб сторнки

    <!DOCTYPE html>
    <html>
    ...
    </html>
    

  7. Для сворення маркованого списку використовується тег <ul>

    Приклад маркованого списку

    <ul>
        <li>Рядок 1</li>
        <li>Рядок 2</li>
    </ul>
    

    Результат

    • Рядок 1
    • Рядок 2

  8. Для сворення нумерованого списку використовується тег <ol>

    Приклад нумерованого списку

    <ol>
        <li>Рядок 1</li>
        <li>Рядок 2</li>
    </ol>
    

    Результат

    1. Рядок 1
    2. Рядок 2

  9. Тому що вчора вийшла версія importlib-metadata v5.0.0, яка видаляє застарілі endpoint'и.

    Ви можете вказати importlib-metadata<5.0 у вашому файлі setup.py, для того, щоб він не встановлював останню версію.

    Або якщо ви використовуєте файл requirements.txt, ви також можете встановити importlib-metadata нижче версії 5.0, наприклад importlib-metadata==4.13.0

    Докладніше можете почитати тут: https://importlib-metadata.readthedocs.io/en/latest/history.html


  10. Для стоврення абзацу використовується тег <p>

    Приклад використання

    <p>Абзац 1</p>
    <p>Абзац 2</p>
    

    Результат:

    Абзац 1

    Абзац 2


  11. Для відображення елементу списка використовуються теги <li>

    Для створення всього списку використовуються наступні теги:

    • <ul> - для створення не пронумерованого списку
    • <ol> - для пронумерованого списку

    Приклад не нумерованого списку

    <ul>
    	<li>Рядок 1</li>
    	<li>Рядок 2</li>
    </ul>
    

    Результат

    • Рядок 1
    • Рядок 2

    Приклад нумерованого списку

    <ol>
    	<li>Рядок 1</li>
    	<li>Рядок 2</li>
    </ol>
    

    Результат

    1. Рядок 1
    2. Рядок 2

  12. Для запису назви сторінки використовується тег <title>

    Приклад використання

    <html>
    	 <head>
    		 <title>Заголовок сторінки</title>
    	 </head>
    	 <body>
    		 Тіло сторінки
    	 </body>
    </html>