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

Alex

Приєднався: 4 роки тому | 8 Читає   15 Читачів | 1.9K

Адмін сайту

  1. Прибрав expo-router/babel з файлу babel.config.js і все працює.


  2. Знайдіть індекс елемента масиву, який потрібно видалити, за допомогою indexOf, а потім видаліть цей індекс за допомогою splice.

    const array = [2, 5, 9];
    
    console.log(array);
    
    const index = array.indexOf(5);
    if (index > -1) { // only splice array when item is found
      array.splice(index, 1); // 2nd parameter means remove one item only
    }
    
    // array = [2, 9]
    console.log(array); 
    

    Другим параметром splice є кількість елементів, які потрібно видалити. Зауважте, що splice модифікує масив на місці та повертає новий масив, що містить елементи, які було видалено.


  3. Обмеження при створенні статті наступні:

    • Максимальна довжина заголовка: 191 символ
    • Мінімальна довжина тексту: 100 слів
    • Максимальна кількість тегів: 7
    • В тегах забороняється використовувати спецсимволи ([]{}#%^&()=\|/"~) та emoji.

  4. Додумався лише до того щоб записувати вкладені коментарі в 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
    

  5. Схоже така поведінка відбувається через те що 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();
    }
    

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

    createOrFirst()

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

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

    firstOrCreate()

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

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

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

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

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

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


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

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

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


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

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

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

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

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

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

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

    Результат

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

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

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

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

    Результат

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

  12. Тому що вчора вийшла версія 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